一、栈
1.栈的定义
栈是一种特殊的线性表,只能在表的一端进行插入删除元素操作。允许操作的一端称为栈顶,另一端称为栈底。处在栈顶位置的元素称为栈顶元素,如果栈中没有元素称为空栈。
栈的操作原则是先进后出(First In Last Out,FILO)或者后进先出(Last In First Out,LIFO)。
可以将栈想象成一个死胡同(死胡同的入口就是栈顶,另一端就是栈底;第五户人家在胡同口,就是栈顶;五户人家都开车出去了,胡同里没有车,此时就是空栈)。里面住了五户人家,每户有一辆车,第三户人家要开车出去购物。
(1)打电话给第五家,我要出去了,把车挪一下
(2)打电话给第四家,我要出去了,把车挪一下
(3)第三辆车出去了
(4)第四辆车挪回去
(5)第五辆车挪回去
2.栈的基本操作
(1)初始化一个空栈
(2)判断是否为空栈
(3)入栈,在栈顶插入一个新的元素
(4)出栈,从栈顶删除一个元素
(5)取栈顶元素
(6)将非空栈清空
(7)求栈中元素个数
(8)销毁栈
3.栈的存储结构
如定义上说的,栈是一种特殊的线性表(可以看数据结构——线性表)。也就是说,栈也有两种存储结构,一种顺序表结构(简称为顺序栈),一种链表结构(简称为链表栈)。
(1)顺序栈
栈的顺序存储结构,利用一组连续的地址依次存放自栈底到栈顶的数据元素,同时设指针top指向栈顶元素的当前位置。通常用一维数组来实现栈,当top = 0时为空栈,当数据元素不断进栈,栈顶指针top不断加一,top达到数组最大下标时为栈满。
(2)链表栈
使用链表存储结构实现的栈称为链表栈,此时的栈顶指针top用于存放首节点的指针。栈顶指针top->next = NULL时为空栈。
4.栈的应用
上面的例子介绍栈的操作,这么麻烦,栈具体的使用场景是上面呢?