栈和队列的优点_学习数据结构--第三章:栈和队列(栈的基本操作)

第三章:栈和队列

1.栈的基本概念

栈(Stack) 只允许在 一端 (这一端叫做栈顶) 进行插入或者删除操作的 线性表

在栈中先进入栈的元素会后出栈即:先进后出 (LIFO)

b7e1a6c1281e7ca4e87c3b394e3ace23.png

2.栈的基本操作

InitStack(&s) 初始化一个空栈SStackEmpty(S) 判断一个栈是否为空,若栈为空则返回true,否则返回 falsePush(&S,x) 进栈,若栈S未满,则将加入使之成为新栈顶。Pop(&S,&x) 出栈,若栈非空,则弹出栈顶元素,并用x返回。GetTop(S,&x) 读栈顶元素,若栈非空则用x返回栈顶元素。ClearStack(&S) 销毁栈,并释放S占用的内存空间。

这里发现:Pop 和 GetTop 这两个函数都可以返回栈顶元素,不同的是Pop 会移除栈顶元素,而 GetTop只会获取栈顶元素的值,而不会出栈。

3.栈的顺序存储结构

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

#define MaxSize 50typedef struct{     ElemType date[MaxSize];     int top; //数组的下标}SqStack;
5a207a8cdc874dfb9677187ddbacabb3.png

3.1判断栈空&满&长度

栈空条件:S.top==-1 ,在栈里面没有内容的时候top代表数组的下标此时值为-1;栈的长度:S.top+1 ,top代表数据下标,所以栈的长度等于数组下标+1;栈满条件:S.top==MaxSize-1,如果栈的top下标为数组长度-1说明栈满了。

350e1e76d79019eb4a00b4395d46e57b.png

3.2 栈的基本操作

3.2.1初始化

void InitStack(SqStack &S){    S.top == -1;}

3.2.2判断栈空

boll StackEmpty(SqStack &S){    if(S.top == -1){        return true;    }else{        return false;    }}

3.2.3进栈

boll Push(SqStack &S,ElemType x){    if(S.top == MaxSize-1){ //栈满        return fase;    }    S.data[++S.top] = x;    return true;}

3.2.4出栈

boll Pop(SqStack &S,ElemType &x){    if(S.top == -1){ //栈空        return fase;    }    x = S.data[S.top--];     return true;}

3.2.5获取栈顶元素

boll GetTop(SqStack S,ElemType &x){    if(S.top == -1){ //栈空        return fase;    }    x = S.data[S.top] //只需读取,不需移动下标    return true; }

3.3.共享栈

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

判空:

  • 0号栈 top==-1
  • 1号栈 top==MaxSize
feea697e454c6e9a92db0eb39c1dfd6a.png

判满: tpp1-top0==1

共享栈的优点:存取时间复杂度仍为O(1),且空间利用更加有效。

4.栈的链式存储结构

链栈 采用链式存储的栈

这里不需要头节点,这里规定了第一个结点为栈顶结点所以:所有的操作都要在表头进行。

ceb149c066f4c6196a2f485fb8d7fd03.png

4.1链栈基本操作

因为相当于是单链表,所以链栈的判空,出栈,栈的长度和单链表的操作基本相同。

关于数据结构的知识,持续更新中,欢迎关注公众号理木客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值