栈
定义与实例
定义
栈是一种特殊的线性表 ,其插入和删除操作都在表的同一端进行。这一端成为栈顶,另一端被称为栈底。
栈是后进先出表
现实世界中的栈
- 餐厅中取盘子时总是先拿取最上面的盘子,当补充新的盘子时总是将盘子放在最上面
- 打印机进行打印时,总是先打印位于最上方的纸
抽象数据类型
abstract class stack {
empty();//栈为空时返回 true,否则返回false
size();//返回栈中元素个数
top();//返回栈顶元素
pop();//删除栈顶元素
push(x);//将元素压入栈顶
}
数组描述
私有数据变量
private int theSize;
private T[ ]stack;
top()操作
public T top(){
if(empty())throw new EmptyStackException();
return stack[theSize-1];
}
pop()操作
public void pop(){
if(empty())throw new EmptyStackException();
theSize--;
}
push操作
public void push(T theElement){
if(theSize==stack.length)ensureCapacity(2*theSize+1);
stack[theSize++]=theElement;
}
itreator操作
@Override
public Iterator<T> iterator() {
return new stackIterator();
}
private class stackIterator implements java.util.Iterator<T>{
private int current=theSize;
@Override
public boolean hasNext(){
return current>0;
}
@Override
public T next(){
if(!hasNext())throw new NoSuchElementException();
return stack[--current];
}
}