什么是栈呢?
栈就是一种数据结构,只能从表的一端进行插入和删除。
它的特点就是数据先进来的最后才能出去,(先进后出),如图所示:
Push(入栈) 和 Pop (出栈),这是栈的两个最重要的动作。
为了方便读取栈顶数据,通常还是会有一个Peek(查看)函数。
栈的容量通常很小,是保存临时数据的。
那如何用Java的数据结构来表示栈呢?-----用“数组”来进行栈的操作。
public class Stack {
private int [] arr ; //数组
private int maxSize ; //数组的最大长度
private int top;//类似于栈的指针
//对“栈”进行初始化
public Stack( int maxSize){
this.maxSize = maxSize ;
this.arr = new int [maxSize] ;
this.top = -1 ;
}
//判断栈是否为空
public boolean isEmpty(){
return ( top == -1 );
}
//判断栈是否已满
public boolean isFull(){
return ( top == maxSize );
}
//Push 入栈
public void push ( int number ) {
//需要先判断栈是否已满
if( !isFull() ){
arr[++top] = number ;
} else {
System.err.println("This Stack is Full!!");
}
}
//Pop 出栈
public int pop () {
//需要先判断栈是否为空
if( !isEmpty() ){
return arr[ top-- ];
} else {
System.err.println("The Stack is Empty , there is no value to pop!");
return -1;
}
}
//Peek查看栈顶元素
public int peek(){
//需要判断是否为空栈
if( top >= 0 ){
return arr[top];
}else {
System.err.println("The Stack is Empty , there is no value to peek!");
return -1;
}
}
public static void main(String [] args){
Stack stack = new Stack(5);
stack.push(22);
stack.push(33);
stack.push(44);
stack.push(55);
stack.push(66);
while ( stack.top != -1 ){
System.out.println(stack.pop());
}
}
}
结果如图所示,数据是 先进后出: