栈结构
栈结构是按照 “后进先出 ”(Last In First Out,LIFO)的原则处理数据的。在栈结构中,只有栈定的元素是可以访问的。
- 入栈(Push):将数据保存在栈顶的操作。
- 出栈(Pop):将栈顶的数据弹出的操作。
public class Stack {
//栈的大小
private int size;
//栈顶元素的的下标
private int top;
//栈的容器
private int [] stackArray;
//构造函数
public Stack(int size){
stackArray = new int[size];
//初始化栈的时候,栈为空,栈顶下标设为-1
top = -1;
this.size = size;
}
//入栈同时栈顶下标加1
public void push(int elem){
if (top<size){
stackArray[++top] = elem;
}else{
System.out.println("栈溢出!");
}
}
//出栈删除栈顶元素,同时栈顶元素下标减1
public int pop(){
if (top==-1){
System.out.println("栈为空!");
}
return stackArray[top--];
}
//查看栈顶元素,但不删除
public int peek(){
return stackArray[top];
}
//释放栈空间
public void freeStack(){
//使用top!=-1或者stackArray!=null
if (top!=-1){
stackArray = null;
}
}
//isEmpty
public boolean isEmpty(){
return (top==-1);
}
//isFull
public boolean isFull(){
return (top==size-1);
}
//测试
public static void main(String[] args) {
Stack stack = new Stack(5);
Scanner scanner = new Scanner(System.in);
System.out.println("入栈操作:");
System.out.println("输入数字进行入栈操作:");
int i;
do {
if((i=scanner.nextInt())!=0){
stack.push(i);
}else{
break;
}
}while(true);
System.out.println(stack.isFull());
System.out.println("按任意非0键进行出栈操作:");
String temp = "1";
temp = scanner.next();
while(!temp.equals("0")){
int s = stack.pop();
System.out.println(s);
temp = scanner.next();
}
System.out.println("测试结束");
stack.freeStack();
}
}