3.1
栈是一种操作受限的线性表 其插入和删除操作只允许在线性表的端进行。 允许进行操作的 端称为校项(op), 不允许操作的一瑞则称为视底(hottom)。 栈的插入操作动才常你为入栈 (push),我的朋陈保作则称为出栈(pop)。如果找中无数物元系,则你为空视。栈就像一个向上开口的箱子,刚开始放入的物体公放置在底部(栈底),继续放置物体时一层一层摞上去,当从箱子里取东西时,最上面(栈项)的会被最先拿走。因此,栈顶元素是最后入栈、最先出栈,校底元素则是最先入栈、最后出栈,印权具有后进
先出(LIFO, Last IN first Out)的特征。栈的结构如图
3.1.1栈的抽象数据类型
虽然找的操作受限降低了其灵活性,但也更有效和更容易实现。栈的基本操作主要有创建栈、入权、出栈、 取栈顶元素、判断栈是否为空等。
Java类库中的java.uil.Stack类就是栈结构的典型代表。
3.1.2 顺序栈
栈作为一种特殊的线性表,同样可以采用顺序存储结构和链式存储结构。采用顺序存储结构的栈称为顺序栈(Sequential Stack)。
1.顺序栈的存储结构
顺序找用一维数组来存储元素,约定数组下标为0的一端表示栈底, 则另一端是栈顶,用变量top表示栈顶元素在数组中的位置,通常也把top称为栈顶指针。当栈中有一个元素时,top 值为0,因此一般用 top=-1表示栈空:设数组的长度为length,当top=length- 1时,表示栈满。入栈时,top 加1,指向新的栈项位置,新元素放置到栈项:出栈时,先取出栈顶元素,然后top减1.顺序栈操作示意图如图3-2所示,这里数组的长度为4。
顺序栈的基本操作如下: