20-受限线性表—栈

1. 栈的基本概念

  栈也是一种线性表,栈中的元素具有线性关系,只不过它是一种特殊的线性表而已,也就是说,栈是一种只能在栈顶的位置进行插入和删除操作的线性表。

2. 栈的操作

这里写图片描述
图1-栈的基本操作

  栈的插入操作,叫做进栈,也称为压栈。类似子弹入弹夹,栈的删除操作,叫做出栈,也有的叫做弾栈,退栈。如同弹夹中的子弹出夹。

  对于栈中的a,b,c,d四个元素来说,a是最先进栈的元素,然后b,c,d依次进栈,由于d是最后进栈的,所以d元素是在栈顶,而a元素是在栈底。当出栈时,d元素在栈顶,所以d元素最先出栈,然后c,b,a依次出栈,而a元素是最后出栈的。因此我们可以发现:栈中的元素总是先进后出的。

3. 顺序栈的抽象数据类型

顺序栈的抽象数据类型定义如下

ADT Stack
{
数据对象:
    D = {ai | ai∈ElemType, i=1,2,…,n, n≧0 } //ElemType为类型标识符
数据关系:
    R = {<ai, ai+1> | ai, ai+1∈D, i=1,3,…,n-1 }
数据操作:
    InitStack(&s):初始化栈。构造一个空栈s。
    DestroyStack(&s):销毁栈。释放栈s占用的存储空间。
    StackEmpty(s):判断栈是否为空:若栈s为空,则返回真;否则返回假。
    Push(&S,e):进栈。将元素e插入到栈s中作为栈顶元素。
    Pop(&s,&e):出栈。从栈s中退出栈顶元素,并将其值赋给e。
    GetTop(s,&e):取栈顶元素。返回当前的栈顶元素,并将其值赋给e。
}

栈的顺序存储结构

  栈的顺序存储结构简称顺序栈,它是运算受限制的顺序表。栈的顺序存储结构是:利用一组地址连续的存储空间依次存放自栈底到栈顶的数据元素,同时设置栈顶元素的下标top指向栈顶元素的位置。

栈的顺序存储结构:

//定义栈的顺序存储结构
typedef struct SQSTACK
{
    ElemType data[MaxSize];//存储空间,ElemType为元素类型
    int top;               //记录栈顶元素的下标
} SqStack;



因为栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表来实现。

这里写图片描述
图2-顺序栈的存储实现


顺序栈4要素:

这里写图片描述
图3-顺序栈4要素

假设栈的大小以MaxSize=5为例
1 . 栈满条件:当top的下标等于MaxSize - 1时,表示栈已经存满元素了。

2 . 元素a进栈操作:先将top下标+1,将元素a放在top下标的位置

3 . 元素a出栈操作:先从top下标的位置将元素a出栈,然后top下标-1

4 . 栈空的条件:当top = -1,因为top = 0表示已经是指向栈中的最后一个元素,所以当top = -1则表示栈为空,没有元素了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值