考研网 发表于 2018-12-7 17:05:10

2019考研数据结构C语言版详解答案:栈和队列(8)

《数据结构(C语言版)》考试内容两大类:概念,算法。自从计算机专业课统考以后,专业课考试题型分为2类,一类选择题,一类综合应用题。要想把数据结构这门专业课复习好,除了做练习题,还要掌握2019考研计算机数据结构(C语言版)基础知识,只有基础知识掌握牢固,才能在做数据结构算法题目时得心应手。本次新东方在线整理了数据结构C语言版答案详解,各位考生可以对照着题目与答案详解,把计算机专业课的数据结构复习一遍。
    3.15
假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么有缺点。
    解:
    class DStack{
    ElemType *top;
    ElemType *p;
    int stacksize;
    int di;
    public:
    DStack(int m)
    {
    p=new ElemType;
    if(!p) exit(OVERFLOW);
    top=p+m/2;
    top=top;
    stacksize=m;
    }
    ~DStack(){delete p;}
    void Push(int i,ElemType x)
    {
    di=i;
    if(di==0){
    if(top>=p) *top--=x;
    else cerrtop) return *top--;
    else cerrnext;
    delete p;
    s.size--;
    }
    }
    void ClearStack(Stack &s)
    {
    LinkType p;
    while(s.top){
    p=s.top;
    s.top=p->next;
    delete p;
    s.size--;
    }
    }
    int StackLength(Stack s)
    {
    return s.size;
    }
    Status StackEmpty(Stack s)
    {
    if(s.size==0) return TRUE;
    else return FALSE;
    }
    Status GetTop(Stack s,ElemType &e)
    {
    if(!s.top) return ERROR;
    else{
    e=s.top->data;
    return OK;
    }
    }
    Status Push(Stack &s,ElemType e)
    {
    LinkType p;
    p=new NodeType;
    if(!p) exit(OVERFLOW);
    p->next=s.top;
    s.top=p;
    p->data=e;
    s.size++;
    return OK;
    }
    Status Pop(Stack &s,ElemType &e)
    {
    LinkType p;
    if(s.top){
    e=s.top->data;
    p=s.top;
    s.top=p->next;
    delete p;
    s.size--;
    }
    return OK;
    }
    // 从栈顶到栈底用Visit()函数遍历栈中每个数据元素
    void StackTraverse(Stack s,Status (*Visit)(ElemType e))
    {
    LinkType p;
    p=s.top;
    while(p) Visit(p->data);
    }
页: [1]
查看完整版本: 2019考研数据结构C语言版详解答案:栈和队列(8)