> 文档中心 > 开卷数据结构(5)—— 栈 看完你就会了

开卷数据结构(5)—— 栈 看完你就会了


💟作者简介:大家好,我是Ceylan_,可以叫我CC ❣️    
📝个人主页:Ceylan_的博客
🏆博主信息:平凡的大一学生,有着不平凡的梦

         专栏  

  • 备战蓝桥杯   
  • 力扣每日一题
  • PTA天梯赛开卷数据结构

⚡希望大家多多支持😘一起进步~❤️
🌈若有帮助,还请关注点赞收藏,不6行的话我再努努力💪

 

目录

🌺栈的定义

🌺顺序

🌷顺序栈的定义

🌷顺序栈的初始化

🌷顺序栈的入栈

🌷顺序栈的出栈

🌷取顺序栈的栈顶元素

🌺链栈

🌺每日金句


🌺栈的定义

栈是一种线性表,但限定这种线性表限定只能在某一端进行插入和删除操作,如图所示:

假设栈 【s = (a1,a2,……,an) 】,a1为栈底元素,an为栈顶元素。由于栈只能在栈顶进行插入和删除操作,所以进栈次序依次为【a1,a2,……,an】,出栈次序为【an,……,a2,a1】

由此可见:栈的操作特性可以明显地概括为后进先出

栈类似于线性表,它也有两种对应的存储方式分别为顺序栈链栈

🌺顺序栈

🌷顺序栈的定义

采用顺序存储的栈成为顺序栈,它利用一组地址连续的存储单位存放自栈底到栈顶的数据元素,同时附设一个指针(top)来指示当前栈顶的位置。

栈的顺序存储类型可描述为

#define MaxSize 100//定义栈中元素的最大个数typedef struct{SElemtype *base;//栈底指针SElemtype *top;//栈顶指针 int stacksize//栈可用的最大容量 }SqStack; 

🌷顺序栈的初始化

顺序栈的初始化操作就是为顺序栈动态分配一个最大容量为 MaxSize 的数组空间。

🔺实现原理

1️⃣为顺序栈动态分配一个最大容量为MAXSIZE的数组

2️⃣栈顶指针top初始为base,表示栈为空

3️⃣stacksize置为栈的最大容量MaxSize

💬 代码演示

Status InitStack(SqStack &S){//构造一个空栈SS. base=new SElemType[MaxSize];//为顺序栈动态分配一个最大容量为MAxsiniif(!S. base) exit(OVERFLOW);//存储分配失败S. top=S. base;//top初始为base,空栈S. stacksize=MaxSize;//stacksize置为栈的最大容量MaxSizereturn OK;}

🌷顺序栈的入栈

入栈操作是将新元素进入栈

🔺实现原理

1️⃣判断栈是否满了,若满了返回ERROR

2️⃣将新元素压入栈,栈顶指针加1

💬 代码演示

Status Push(SqStack&S,SElemType e){//插入元素e为新的栈顶元素if(S.top-S.base==S:stacksize) return ERROR;//栈满 *S. top++=e;   //元素e压入栈顶,栈顶指针加1return OK;}

🌷顺序栈的出栈

出栈操作是将栈顶元素删除

🔺实现原理

1️⃣判断栈是否空,若空则返回ERROR

2️⃣栈顶指针减1,栈顶元素出栈

 💬 代码演示

Status Pop(SqStack &S,SElemType &e)(//删除S的栈顶元素,用e返回其值if(S.top==S.base) return ERROR;//栈顶指针减1,将栈顶元素赋给e   //栈顶指针减1,将栈顶元素赋给e e=*--S.top;return OK;)

🌷取顺序栈的栈顶元素

当栈非空时,此操作返回当前栈顶元素的值,栈顶指针保持不变。

🔺实现原理

1️⃣判断栈是否空

2️⃣返回栈顶元素的值,栈顶指针不变

 💬 代码演示

SElemType GetTop (SqStack S){//返回s的栈顶元素,不修改栈顶指针if(S.top!=S.base)  //栈非空    return*(S.top-1);//返回栈顶元素的值,栈顶指针不变)

🌺链栈

采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现。

栈的顺序存储类型可描述为

typedef struct Linknode{ElemType data;//数据域struct Linknode *next;//指针域} *LiStack; 

采用链式存储,便于结点的插入与删除。链栈的操作与链表类似,入栈和出栈的操作都在链表的表头进行。

🌺每日金句

不怕千万人阻挡,只怕自己投降

     本人不才,如有错误,欢迎各位大佬在评论区指正。有帮助的话还请【关注➕点赞➕收藏】,不行的话我再努努力💪💪💪

音乐圈资讯