【数据结构-栈】对栈的理解逻辑都在这了(图文版)

1.栈(堆栈)简介

2.栈包含的特性以及基本运算

3.基于数组的栈逻辑运算

4.基于链表的栈逻辑运算

1.1栈(堆栈)简介

栈(stack)也被称为堆栈,是一种受限运算的线性表,是一组相同数据类型的组合。它添加和删除元素都被限制在表的一端进行(栈顶端),而另外一端则被称为栈底。

栈中的元素以后进先出(Last In First Out, LIFO)的方式进出栈,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).

栈提供了两个主要操作:进栈(push),即将某个元素添加到栈集合内;出栈(pop),即将最近添加的元素移出栈集合。此外,栈一般具有特定的容量,如果栈中添加的元素总数超过了容量,则将会导致栈处于溢出状态。

栈的实现方式主要有两种:基于数组和链表。它们都提供了统一的接口,即进栈和出栈,唯一的区别就是使用了不同的结构来存储栈元素。

2.1栈的特性

(1)只能从栈的顶端存取数据

(2)数据的存取符合“后进先出”(Last In First Out, LIFO)的原则

2.2栈的基本运算

(1)create:创建一个空栈。

  (2)   push:把数据存入栈顶,并返回新栈。

  (3)   pop:从栈顶弹出新数据,并返回新栈。

  (4)   IsEmpty:判断栈是否为空栈,是返回true,不是返回false。

  (5)   full:判断栈是否已满,是返回true,不是返回false。

3.1基于数组的栈逻辑运算

  首先基于数组的栈的实现方式,该方式包含的三要素分别是数组.栈顶(top)指针和栈操作集。数组用于存放元素,栈顶指针用于指引操作的位置,栈的核心操作为进栈和出栈。此外,栈存放的元素数量不能超过数组的长度。

 3.1.1进栈操作

  现准备对“i”“miss”“you”三个字符串分别进行进栈操作,让我们来看一下整个过程:

(1)“i”进栈后,栈顶指针top右移一个位置,指向索引为1的位置。

(2)“miss”进栈后,栈顶指针top再右移一个位置,指向索引为2的位置。

(3) “you”进栈后,栈顶指针继续向右移动一个位置,指向索引为3的位置。

3.1.2出栈操作

接着我们对栈中的元素进行两次出栈操作:

(1)“you”出栈后,栈顶指针top左移一个位置指向索引为2的位置。 

(2)“miss”出栈后,栈顶指针top再左移一个位置,指向索引为1的位置。 

 

 

4.1基于链表的栈逻辑运算

      下面我们看基于单向链表的栈的实现方式,该方式包含的三要素分别是链表结构、栈顶(top)指针以及栈操作集。链表结构用于存放元素,栈顶指针用于指引操作的位置,栈的核心操作为进栈和出栈。使用链表结构来存放栈元素可以不用担心容量的问题,而基于数组的栈所存放元素的数量则不能超过数组的长度。

        初始时,栈顶指针不指向任何节点,且链表为NULL。

 4.1.1进栈操作

  现准备对“i”“miss”“you”三个字符串分别进行进栈操作,下面让我们来看这个过程:

(1)因为链表为NULL,所以直接创建“i”节点,且栈顶指针指向该节点。

 

(2)创建“miss”节点。

(3)将“miss”节点指向前一个节点,并移动栈顶指针使其指向“miss”节点。

 

(4)创建“you”节点,并将“you”节点指向前一个节点,并移动栈顶指针使其指向“you”节点。

4.1.2出栈操作

  最后我们对栈中的元素进行两次出栈操作:

(1)取出栈顶元素“you”,然后将栈顶指针前移一位。

 

(2)废弃“you”节点。

 

(3)以此类推,第二次出栈操作先取出“miss”节点,然后将栈顶指针前移一位并废弃“miss”节点。 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值