原文参考:
(1)http://www.cnblogs.com/skywang12345/p/3562239.html
(2)http://c.biancheng.net/view/3351.html
(3)http://c.biancheng.net/view/3350.html
什么是栈(stack)
栈(stack )又称堆栈,它是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。 表中进行插入、删除操作的一端称为 栈顶(top),栈顶保存的元素称为 栈顶元素。相对的,表的另一端称为栈底(bottom)。
栈的示意图:
栈中的数据依次是 30 --> 20 --> 10
当栈中没有数据元素时称为空栈;向一个栈插入元素又称为 进栈或 入栈;从一个栈中删除元素又称为 出栈或 退栈。由于栈的插入和删除操作仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为 后进先出表(Last In First Out,简称 LIFO)。
出栈示意图:
出栈前:栈顶元素是30。此时,栈中的元素依次是 30 --> 20 --> 10
出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 --> 10
入栈示意图:
入栈前:栈顶元素是20。此时,栈中的元素依次是 20 --> 10
入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 --> 20 --> 10
栈的基本操作
堆栈的基本操作除了进栈、出栈操作外,还有判空、取栈顶元素等操作。下面给出堆栈的抽象数据类型定义:
序号 | 方法 | 功能描述 |
---|---|---|
⑴ | getSzie () | 输入参数:无 返回参数:非负整数 功能:返回堆栈的大小,即数据元素的个数。 |
⑵ | isEmpty () | 输入参数:无 返回参数:boolean 功能:如果堆栈为空返回 true,否则返回 false。 |
⑶ | push(e) | 输入参数:Object 对象 e 返回参数:无 功能:数据元素 e 入栈。 |
⑷ | pop() | 输入参数:无 返回参数:Object 对象 功能:栈顶元素出栈。 |
⑸ | peek() | 输入参数:无 返回参数:Object 对象 功能:获取栈顶元素,但不出栈 |
java 中栈的接口:
public interface Stack {
//返回堆栈的大小
public int getSize();
//判断堆栈是否为空
public boolean isEmpty();
//数据元素 e 入栈
public void push(Object e);
//栈顶元素出栈
public Object pop() throws StackEmptyException;
//取栈顶元素
public Object peek() throws StackEmptyException;
}
栈的存储实现
堆栈有两种基本的存储结构:顺序存储结构和链式存储结构。