栈的定义: 作为一种限定性线性表,是将线性表的插入和删除运算限制为仅在表的一段进行。(一般在表尾进行) 如下表: 表中允许插入、删除擦欧总的一端称为栈顶(Top); 表的另一端被称为栈底(Bottom)。 当栈中没有元素时称为空栈。 栈的插入操作称为进栈或入栈。 栈的删除操作称为出栈或退栈。
栈的特点:后进先出(LIFO) 栈的存储结构;顺序存储和链式存储 顺序栈的C原因呢描述: 栈的基本操作:
双端栈 双端栈就是栈的两边各有自己的栈顶和栈尾。分别可以在两端进行进栈和出战操作。 注意: 双端栈的两端是它的栈底,它是不变的!!!
双端栈的特点: 后进先出(LIFO) 先进后出(FILO) 注意: 当程序里边有多个栈时,首先讨论两个栈的共享空间问题。
不确定哪个栈已经达到最大空间,有可能会出现其中的一个栈满,并且发生了溢出但是其余的栈都还是空闲的或只是使用了一部分存储空间的情况。
如果在空间有限的情况下,怎么样充分利用? 如下:
两栈共享技术——双端栈 主要利用了“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一维数组空间【M】,将两个栈的栈底分别放在一维数组的两端,分别是0 , M-1。 两个栈是相对的!!!
两栈共享数据结构的定义: 对双端栈操作应注意: 双端栈的初始化: 双端栈的进栈:
双端栈的出栈:
多个栈共享空间: 但是这种方法的不好之处在于,如果我们想往其中的一个栈中插入一个元素,则后面所有的栈都要往后移动来空出一个位置,这样一来,元素移动量较大,这样是比较浪费时间的!!
要避免栈上溢出更好的方法是使用链式存储结构,让多个栈共享所有可用存储空间——链栈。 明天继续!!!