目录
一、栈
栈的概念及结构
栈
:一种特殊的线性表
,其只允许在固定的一端进行插入和删除元素操作
。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO
(Last In First Out)的原则。
压栈
:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶
出栈
:栈的删除操作叫做出栈。出数据也在栈顶
栈的实现
栈的实现
一般可以使用数组或者链表实现
,相对而言数组
的结构实现更优
一些。因为数组在尾上插入数据的代价比较小
。
顺序表可以把使用的空间写成固定值,也可以构建动态开辟内存;但是如果写成固定的数组形式当存的数据满了就不能再使用了,所以下面我们实现的是动态开辟内存
的形式。
所以我们先创建一个顺序表结构体类型,结构体类型中有指针,下标,容量。
指针: 用来维护在堆上连续的一段空间,
下标:表示数据存放到哪一个位置了,因为数据只能一个接着一个地存放,要有个下标来记录我数据放到哪一个位置了。
容量:与下标相比较,当下标与容量相等就表示空间存储满了,要进行扩容处理。
创建类型如下:
栈内存布局
栈的接口实现
1.栈的初始化和销毁
栈的初始化和销毁都与顺序表类似,这里就不再详细解释,只是顺序表中的size(有效元素个数),换成了这里的栈顶。
2.入栈
与顺序表一样,增加元素时必须先判断容量是否足够,容量不够时需扩容。
这里的入栈和顺序表的尾插一样。
3.栈销毁
4.出栈
出栈即尾删,删除元素需判断栈是否为空,空栈不能出栈。
判断栈是否为空在下面实现。
5.获取栈顶元素
栈顶元素即顺序表中最后一个元素,直接根据下标即可找到。
当然栈不能为空。