栈与队列(数据结构篇)

本文介绍了栈和队列的基本概念,以及它们的区别。栈遵循后进先出(LIFO)原则,而队列遵循先进先出(FIFO)原则。通过顺序表和链表两种方式,详细阐述了栈和队列的初始化、增加数据、删除数据、查看顶底元素、判断空栈空队列以及计算元素个数的操作。这些基础知识对于理解和实现数据结构至关重要。
摘要由CSDN通过智能技术生成

在前面讲解两个比较基础的数据结构——链表、顺序表,做了一定的基础,因此用这两个方式来实现现在的,队列和栈并不会太难。

目录

(一)什么是栈、什么是队列?

(1)区别:

(二)实现:

①初始化(创建栈、队列)

③增加数据

④删除数据

⑤返回顶、底的元素

⑥栈、队列是否为空

⑦ 栈、队列元素个数:

总结:

---------------------------------------------------------------------------------------------------------------------------------

(一)什么是栈、什么是队列?

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表

(1)区别:

原则: 先进后出,后进先出(First in Last out) ---------->栈

         先进先出,后进后出(First in First out)----------->队列

我们就按此,进行队列与栈的实现。

(二)实现:

①初始化(创建栈、队列)

栈:

为了实现栈或队列,既可以用顺序表,也可以用链表。

队列:

(1)初始化顺序表:

栈:

  InitStack   实现对结构体初始化

 

队列:

由于需要引入头尾指针,在没有录入数据的时候,会对头尾指针进行初始化~ 

②销毁队列、栈

栈:

仅仅只需要把 指向动态开辟空间的指针free掉,并将所有数据置空即可 。

队列:

队列的销毁 就和链表的销毁没两样

都是需要去遍历链表------>销毁一个 ,保存下一个的地址 

③增加数据

栈:

增添数据的思想很简单,仅仅需要考虑动态开辟的数组内容是否需要增容,如果不需要 直接就可以存放数据。

队列:

 在队列中添加数据,需要变动的就只是队尾(tail)。添加一次,变更一次。

④删除数据

栈:

当然,对于第二个assert可以进行优化 那当然是后面的事情了。 

队列:

队列的元素删除有点复杂 结合图形来理解>

很多人可能忽略掉 上面红框处的代码:

 在删除的前提下,需要保证,删除后不会留下野指针。

⑤返回顶、底的元素

栈: 栈顶

 为什么会-1?

栈: 栈底

可理解栈顶、栈底  分别是数组的末元素 和首元素 。

队列:

通过,队头 、队尾的指针很容易 找到队列的首尾数据~。

⑥栈、队列是否为空

栈: 

 这里会牵涉到新的类型(布尔类型) ----->用于判断 true 与  false

借此

我们可以把这个用到上面Pop的函数里面>

队列:

⑦ 栈、队列元素个数:

栈:

计算队列的长度 就是遍历链表 也就不做过多分析了~。

总结: 

理解栈、队列的实现,是为数据结构打基础。

加油! 祝你好运~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值