这里我们使用数组来实现数据结构堆栈
什么是堆栈?
堆栈是一种先入后出的有序列表,栈的删除和添加操作只能在同一端进行,最先压入栈中的元素在栈底,最后压入栈的元素再栈顶
栈地应用场景:
栈地应用场景还是很广泛的,子程序的调用,递归,表达式的转换与求值,二叉树的遍历,图的深度优先搜索......
思路:
1.使用数组来模拟栈;
2.定义一个top来表示栈顶,初始化为-1;
3.入栈和出栈的操作;
代码如下:
package DoubleLinkedListdmeo;
import java.util.Scanner;
public class Stackdemo {
public static void main(String[] args) {
ArrayStack arrayStack = new ArrayStack(10);
String key = "";
boolean loop = true;
Scanner scan = new Scanner(System.in);
while(loop){
System.out.println("show: 表示显示栈");
System.out.println("exit: 退出程序");
System.out.println("push: 表示添加数据到栈");
System.out.println("pop: 表示从栈取出元素");
System.out.println("请输入你的选择:");
key = scan.next();
switch(key){
case "show" :
arrayStack.list();
break;
case "exit" :
scan.close();
loop = false;
break;
case "push" :
System.out.println("请输入一个数");
int value = scan.nextInt();
arrayStack.push(value);
break;
case "pop" :
try{
int ret = arrayStack.pop();
System.out.printf("出栈的数据是:%d ",ret);
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
default:
break;
}
}
System.out.println("程序退出");
// ArrayStack arrayStack = new ArrayStack(10);
// arrayStack.push(1);
// arrayStack.push(2);
// arrayStack.push(3);
// arrayStack.push(4);
// arrayStack.push(5);
// arrayStack.push(6);
// arrayStack.push(7);
// System.out.println(arrayStack.stackIsEmpty());
// System.out.println(arrayStack.stackIsFull());
// arrayStack.list();
//
// arrayStack.pop();
// arrayStack.pop();
// arrayStack.pop();
// arrayStack.list();
}
}
//表示栈
class ArrayStack{
private int maxSize; //表示栈的大小
private int[] satck; //数组,用数组来模拟栈
private int top = -1; //表示栈顶
public ArrayStack(int maxSize){
this.maxSize = maxSize;
satck = new int[maxSize];
}
//判断栈是否已满
public boolean stackIsFull(){
return top == maxSize - 1;
}
//判断栈是否为空
public boolean stackIsEmpty(){
return top == -1;
}
//入栈
public void push(int element){
//先判断栈是否已满
if(stackIsFull()){
System.out.println("栈已满,添加失败");
return;
}
//如果栈不满,就可以添加数据
satck[++top] = element;
}
//出栈
public int pop(){
if(stackIsEmpty()){
throw new RuntimeException("栈空");
}
int temp = satck[top--];
return temp;
}
//遍历栈
public void list(){
if(stackIsEmpty()){
System.out.println(("栈空"));
return;
}
for(int i = top; i >= 0; i--){
System.out.printf("%d ",satck[i]);
}
}
}