目录
一、栈的概念
栈Stack:
是只允许在一端进行插入或删除的性表线。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作(类似于一个只有开口的瓶子)。(遵循LIFO原则)——后进先出(Last In First Out)
栈顶 Top:
进行插入或者删除的那一端
栈底 Bottom:
栈顶的另一端
空栈:
不含任何元素的空表
压栈 Push:
栈的插入操作(还可以叫入栈,进栈)
出栈 Pop:
栈的删除操作
图例说明:
如图,将数据一个一个压进去,相当瓶子,你倒水进去,就是先流入底部,一直到填满
你喝水,先喝的是上面的水,最后才喝底部的水,所以就是 先进后出

你想想弹夹,装子弹是不是也是先放的子弹,最后才打出来的

既然如此:像子弹一样,想用下一个就会Pop(出栈)掉这颗子弹
二、栈的实现:
涉及以下:
1、栈的初始化
2、压栈
3、出栈
4、判断是否为空
5、销毁
6、数据个数(可以写可以不写,我觉得写一下也行,能够知道压栈数据有几个)
7、取栈顶数据
以下三个数据结构都可以来创建栈

相比于双链表和单链表,更会倾向于单链表,因为栈是只有栈顶进行删除和增加,而双链表会比单链表每一个节点多一个指针
对于单链表:使用头插和尾删(尾插和头删)来实现压栈和出栈
但是更倾向于选择顺序表,因为它的缺点虽然是扩容,但是也不是每次都要扩容,而且cpu的缓存利用率也高
三、改写顺序表实现:
1、创建栈
如下:和顺序表相同,但是,第二个参数由size(有效数据个数改成了栈顶top)

2、初始化栈:
有个讲究了,对于top有2种取值,Top栈顶用来获取元素
若是栈顶是从0开始的话,那么,你放入第一个数据,此时Top=1,但是你的数据位于的下

最低0.47元/天 解锁文章
1816





