栈的top指针指向哪里_栈(Stack)

61b69c3c105f34fef477bfaf73b91235.png

栈只允许在有序的线性资料集合的一端(top)进行加入数据(push)和移除数据(pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。

两种栈的实现方式: 1.顺序栈(数据实现) 2.链式栈(链表实现)

1.顺序栈(数组实现栈)

6572b181ca12a9b23b67b97de0e6b305.png
顺序栈结构

顺序栈的实现

0.准备工作

#define OK 1

1.构建空栈

// 构建一个空栈S

2.将栈置空

// 将栈置空

3.判断顺序栈是否为空

// 判断顺序栈是否为空;

4.返回栈的长度

// 返回栈的长度

5.获取栈顶元素

// 获取栈顶

6. push元素e为新栈顶元素

// 插入元素e为新栈顶元素

7. pop S栈顶元素,并且用e带回

// popS栈顶元素,并且用e带回

8. 从栈底到栈顶依次对栈中的每个元素打印

// 从栈底到栈顶依次对栈中的每个元素打印

9.使用栈并打印

// 使用栈

打印出来的结果

ba02be9be7cabb257b7d7af3c707ca8d.png
打印的结果

2.链式栈

0.结构

e33809dab2ddfd5225f802560d3b7ab2.png
链式结构栈

1.入栈(push)

336f3570be18f4ba84e83a0a60de2b34.png
入栈操作
  • 第0步:创建节点node
  • 第1步: 把创建的node的next指向栈顶top
  • 第2步:把top指向创建的node

2.出栈(pop)

8486e14a1101b345bc42cb8b8b24e0c7.png
  • 第1步: 记录需要弹出的节点P
  • 第2步: 把top指向top的next节点
  • 第3步: 释放节点P

链式栈的实现

0.准备工作

#define OK 1

1.构造一个空栈S

// 构造一个空栈S

2.把链栈S置为空栈

Status 

3. 检测空栈

// 若栈S为空栈,则返回TRUE, 否则返回FALSE

4.栈的长度

// 返回S的元素个数,即栈的长度

5. 获取栈顶元素

// 若链栈S不为空,则用e返回栈顶元素,并返回OK ,否则返回ERROR

6. 入栈(Push)

// 插入元素e到链栈S (成为栈顶新元素)

7. 出栈(Pop)

// 若栈不为空,则删除S的栈顶元素,用e返回其值. 并返回OK,否则返回ERROR

8.遍历链栈

// 遍历链栈,其实就是遍历链表

9.使用和打印

int 

打印的结果:

39129a4b91ea5ef551ccca4e496bcc6f.png
打印的结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值