栈 顺序栈 链栈

栈(stack)是一种只能在一端进行插入或删除操作的顺序表。

表中允许进行插入、删除操作的一端称为栈顶(top),表的另一端称为栈底(bottom)。

栈的主要特点是“后进先出”,所以也称为后进先出表。

栈抽象数据类型=逻辑结构+基本运算

例题:给定一个进栈序列看是否能够得到给定的出栈序列

思路:不管第一个出栈序列为什么,直接看第二个出栈元素,如果后一个比前一个大,不用管直接往后看;如果后一个比前一个小,就看这个和前一个出栈元素中间有没有没出栈的元素,如果不存在证明此此序列可出栈,如果存在还没出栈的元素则不可出栈。

比如 进栈序列为1,2,3,4,则3142不能作为出栈序列。因为1比三小且1和3中间的2还没有出栈,所以不可以。

顺序栈

采用顺序结构存储的栈称为顺序栈(sequential stack)。

需要定义一个栈顶指针来存放栈顶元素在data数组中的下标。

代码:typedef struct

{ ElemType data[MaxSize];

int top;                                    //栈顶指针

} Sqstack;                              //顺序栈的类型

定义一个顺序栈s,初始时设置s->top=-1,以下是顺序栈的算法设计非常重要的4个要素

1. 栈空的条件:s->top==-1

2. 栈满的条件: s->top==MaxSize-1

3. 元素e的进栈操作: 先将栈顶指针top增1,然后将元素e放在栈顶指针处

3. 出栈操作: 先将栈顶指针top处的元素取出放在e中,然后将栈顶指针减1

链栈

采用链式存储结构的栈称为链栈(linked stack)

链栈的有点是不存在栈满上溢出的情况

链栈中结点类型LinkStNode的声明如下:

代码:typedef struct linknode

{ ElemType data;                        //数据域

struct linknode * next;                //指针域

} LinkStNode;                              //链栈结点的类型

定义以s为头结点指针的链栈,以下是链栈的算法设计非常重要的4个要素

1. 栈空的条件:s->next==NULL

2. 栈满的条件:由于只有内存溢出时才出现栈满,所以在链栈中不考虑栈满的情况

3. 元素e的进栈操作:新建一个结点存放元素e(由p指向它),将结点p插入到头结点之后

3. 出栈操作: 取出首结点的data值并将其删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云曦.三清幽者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值