关于栈的一些理解
Posted xiaoboxueit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于栈的一些理解相关的知识,希望对你有一定的参考价值。
栈(Stack):先入后出的有序列表
栈的插入和删除只能在同一端进行,为变化的一端,叫做栈顶,另外一端叫做栈底。
以下为栈的数组实现(Java JDK1.8)
//数组实现栈
public class stack {
public static void main(String[] args) {
//创建一个ArrayStack对象
ArrayStack stack = new ArrayStack(4);
String key = "";
boolean loop = true;//控制是否退出菜单
Scanner scanner = 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 = scanner.next();
switch (key){
case "show":
stack.list();
break;
case "exit":
scanner.close();
loop = false;
break;
case "push":
System.out.println("请输入一个数字");
int value = scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res = stack.pop();
System.out.println("出栈的数据"+res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
}
}
System.out.println("程序退出了-----------------------------------------");
}
}
//定义一个表示栈的类
class ArrayStack{
private int maxSize;//定义栈的容量
private int[] stack;//定义存储栈数据的数组
private int top = -1;//定义栈顶,初始为-1
//定义构造函数
public ArrayStack(int maxSize){
this.maxSize = maxSize;
stack = new int[this.maxSize];//初始化数组
}
//判断栈是否满了
public boolean isFull(){
return top == maxSize - 1;//如果栈顶等于容量减一的时候,栈就满了
}
//判断栈是否空
public boolean isEmpty(){
return top == -1;
}
//入栈 push
public void push(int value){
//先判断栈是否满了,满了无法入栈
if(isFull()){
System.out.println("栈已满,无法入栈");
return;
}
top++;
stack[top] = value;//将新入栈的数据放入数组
}
//出栈 pop
public int pop(){
//先判断是否为空栈
if(isEmpty()){
//抛出异常
throw new RuntimeException("栈已空");
}
int value = stack[top];//获取弹栈的值
top--;
return value;//返回弹栈的值
}
//显示栈的情况,遍历时需要从栈顶往下走
public void list(){
if(isEmpty()){ //判空
System.out.println("栈空,无数据");
return;
}
for(int i = top;i>=0;i--){
System.out.printf("stack[%d]=%d ",i,stack[i]);
}
}
}
以上是关于关于栈的一些理解的主要内容,如果未能解决你的问题,请参考以下文章