[数据结构3.1]栈

本章总览

章节总览


栈(Stack)只允许在一端进行插入或删除操作的线性表。

栈的相关名词:入栈、出栈、栈顶、栈底、后进先出。


栈的基本操作

InitStack(&S):初始化一个空栈

StackEmpty(S):判断一个栈是否为空,若栈为空则返回true,否则返回false

Push(&S,x):进栈,若栈S未满,则将X加入使之成为栈顶

Pop(&S,&x):出栈,若栈非空,则弹出栈顶元素,并用X返回

GetTop(S,&x):读栈顶元素,若栈非空则用x返回栈顶元素

ClearStack(&S):销毁栈,并释放S占用的内存空间


顺序栈:采用顺序存储的栈

#define MaxSize 50

typedef struct {

        ElemType data[MaxSize];

        int top;

}sqStack;


初始化

void InitStack(SqStack &S){

        S.top == -1;

}


判断栈空

bool StackEmpty(SqStack S){

        if(S.top == -1)

                return true;

        else

                return false;

}


进栈

bool Push(SqStack &S,ElemType x){

        if(S.top == MaxSize-1)

                return false;

        S.data[++s.top] = x;

        return true;

}


出栈

bool Pop(SqStack &S,ElemType x){

        if(S.top == -1){

                return false;

        }

        x = S.data[S.top--];

        return true;

}


读出栈元素

bool GetTop(SqStack S,ElemType &x){

        if(S.top == -1){

                return false;

        }

        x = S.data[S.top];

        return true;

}


共享栈:将两个栈低设置在共享看空间的两端,栈顶向空间中间延伸

判空:0号栈top == -1

           1号栈top == MaxSize

栈满:top1-top0 == 1

优点:存取时间复杂度扔为O(1),但空间利用更加有效




栈链:采用链式存储的栈,所有的操作都在表头进行

typedef struct LNode{

        ElemType data;

        Struct Linknode *next;

} *LiStack;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构中最常用的一种结构---栈; 栈好比现实生活中的瓶子,瓶子的直径只能存放单个物品,先进后出,后进先出; 栈...
    阿里高级软件架构师阅读 731评论 0 1
  • 记得大一的时候自学数据结构,那时候却没有深入的去研究代码,只是了解了个表面的东西,不过还好有基础,并且去年的时候看...
    KevinCool阅读 704评论 1 3
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,153评论 0 2
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 3,220评论 0 3
  • 这是一座城市,故事开始了。 开始的时候是一群人,最后才是只有自己一个人。岁月是把杀猪刀,青春...
    GG废话阅读 153评论 0 0

友情链接更多精彩内容