栈的定义及基本运算
一、栈的定义
栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
【示例】元素是以a1,a2,…,an的顺序进栈,退栈的次序却是an,an-1,…,a1。
二、栈的特点
根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。
三、栈的运算
1.初始化栈:INISTACK(&S)
将栈S置为一个空栈(不含任何元素)。
2.进栈:PUSH(&S,X)
将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。
3.出栈: POP(&S)
删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。
4.取栈顶元素: GETTOP(S)
取栈S中栈顶元素。
5.判栈空: EMPTY(S)
判断栈S是否为空,若为空,返回值为1,否则返回值为0。
java代码
package com.data.tree;
import java.util.ArrayList;
import java.util.List;
public class Stack<E> {
public int max = 100;
Object[] objs = new Object[max];
int top = 0;
public Stack() {
top = 0;
}
public Stack(int max) {
top = 0;
this.max = max;
}
public void push(E e) throws Exception {
if (top > max)
throw new Exception("栈以满");
objs[top++] = e;
}
public void removeTop() throws Exception {
if (top == 0) {
throw new Exception("栈里没有数据");
}
objs[top--] = null;
}
public void removeAll() throws Exception {
if (top == 0) {
throw new Exception("栈里没有数据");
}
while (top >= 0)
objs[top--] = null;
top = 0;
}
public Object getTop() throws Exception {
if (top == 0)
throw new Exception("栈里没有数据");
else
return objs[top - 1];
}
public boolean isEmpty() {
if (top == 0)
return true;
return false;
}
}
比喻 一桶水