当前位置 博文首页 > 文章内容

    数据结构与算法——栈 特点与算法实现

    作者: 栏目:未分类 时间:2020-10-21 18:01:19

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    1. 栈的特点

    Jack 家的胡同很窄,只能通过一辆车,而且是死胡同,只能从胡同口进出,如果第一个进入,出去会很麻烦,需要所有的车辆出去后才能出去,如图:

    胡同里的小汽车是排成一条直线,是线性排列,而且只能从一端进出,后进的汽车先出去,后进 先出(Last In First Out,LIFO),这就是"栈"。栈也是一种线性表,只不过它是操作受限的线性 表,只能在一端操作。 进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。 我们先看顺序存储方式:

     

    其中,base 指向栈底,top 指向栈顶。

    注意:栈只能在一端操作,后进先出,这是栈的关键特征,也就是说不允许在中间查找、取值、插入、删除等 操作,我们掌握好顺序栈的初始化、入栈,出栈,取栈顶元素等操作即可。

     

    2.栈的算法实现

    2.1栈数据结构的定义

    1 #define MaxSize 128        //预先分配空间,这个数值根据实际需要预估确定
    2 
    3 typedef int ElemType;
    4 
    5 typedef struct _SqStack
    6 {
    7     ElemType *base; //栈底指针
    8     ElemType *top; //栈顶指针
    9 }SqStack;

    2.2栈的初始化

     1 bool InitStack(SqStack &S)            //构造一个空栈 S
     2 {
     3     S.base = new int[MaxSize];            //为顺序栈分配一个最大容量为 Maxsize 的空间
     4 
     5     if (!S.base)                        //空间分配失败
     6         return false;
     7 
     8     S.top=S.base;                        //top 初始为 base,空栈
     9     
    10     return true;
    11 }