• 顺序栈


    顺序栈

    顺序栈定义

    用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时

    由于栈的操作的特殊性,还必须附设一个栈顶指针(top)来动态的指示栈顶元素在顺序栈中的位置。

    通常以 top= -1 表示栈空。

     

     

     

    结构体定义

    struct SeqStack{
        int MAXNUM;
        int t;
        DataType *element;
    };
    typedef SeqStack* PSeqStack;

     

    顺序栈基本运算

    算法3.1 创建空栈

    PSeqStack createEmptyStack_seq( void )

    算法3.2 判断栈是否为空栈

    int isEmptyStack_seq( PSeqStack pastack )

    算法3.3 进栈

    void push_seq( PSeqStack pastack, DataType x )

    算法3.4 出栈

    void pop_seq( PSeqStack pastack )

    算法3.5 取栈顶元素

    DataType top_seq( PSeqStack pastack )

     

    顺序栈元素"入栈"

    比如,还是模拟栈存储 {1,2,3,4} 的过程。最初,栈是"空栈",即数组是空的,top 值为初始值 -1,如图 1 所示:

    图 1 空栈示意图

     

    首先向栈中添加元素 1,我们默认数组下标为 0 一端表示栈底,因此,元素 1 被存储在数组 a[1] 处,同时 top 值 +1,如图 2 所示:

    图2 模拟栈存储元素 1

     

    采用以上的方式,依次存储元素 2、3 和 4,最终,top 值变为 3,如图3 所示:

    图 3 模拟栈存储{1,2,3,4}

     

     

    创建空栈

    PSeqStack createEmptyStack(int m){
        PSeqStack pstack;
        pstack = (PSeqStack)malloc(sizeof(SeqStack));
        if (pstack!=NULL)
        {
            pstack->element=(DataType*)malloc(sizeof(DataType)*m);
            if (pstack->element!=NULL)
            {
                pstack->MAXNUM=m;//最大长度设置为m
                pstack->t=-1;//栈顶指针总是指向栈顶元素
                return pstack;
            }
            else
            {
                free(pstack);
            }
        }
        //创建失败
        cout<<"Out of space"<<endl;
        return NULL;
    }

     

     

    判断栈是否为空

    //判断栈是否为空
    int isEmpty_stack(PSeqStack pstack){
        return pstack->t==-1;
    }

     

    进栈操作

    void push_stack(PSeqStack pastack,DataType e){
        if (pastack->t>=pastack->MAXNUM-1)
        {
            cout<<"Overflow "<<endl;
        }else
        {
            pastack->t=pastack->t+1;//栈顶往上移
            pastack->element[pastack->t]=e;//添加元素
        }
    }

     

    出栈操作

     

    其实,top 变量的设置对模拟数据的 "入栈" 操作没有实际的帮助,它是为实现数据的 "出栈" 操作做准备的。

    比如,将图 5 中的元素 2 出栈,则需要先将元素 4 和元素 3 依次出栈。需要注意的是,当有数据出栈时,要将 top 做 -1 操作。因此,元素 4 和元素 3 出栈的过程分别如图 6a) 和 6b) 所示:

                     

    void pop_stack(PSeqStack pastack){
        if (pastack->t==-1)//栈为空
        {
            cout<<"not exits element"<<endl;
        }else
        {
            pastack->t--;//使用新元素直接覆盖原来的元素,假装其不存在
        }
    }

     

    获取栈顶元素

     

    DataType get_Top(PSeqStack pastack){
        if (pastack->t==-1)
        {
            cout<<"empty"<<endl;
            return 'e';
        }else
        {
            return pastack->element[pastack->t];
        }
    }
    
    

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12983771.html

  • 相关阅读:
    String.valueOf()方法的使用
    springMVC中ModelAndView学写笔记
    赛邮云通信
    DOS命令
    完全二叉树一维数组存放的结点相关关系
    Float与二进制之间的转化(Java实现)
    碎片知识1
    hashtable——散列表
    Huffman Tree
    Unable to update the EntitySet 'T_JsAPI' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12983771.html
Copyright © 2020-2023  润新知