基础概念
- 栈是一种有序列表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。数据元素遵守后进先出的原则。
- 定义一个top表示栈顶,初始化为-1。
- 栈满:top = maxSize - 1。其中maxSize为栈的最大容量。
- 入栈:当有数据data入栈,
stack[++top] = data
- 出栈:出栈操作:
value = stack[top--]
JAVA代码实现
用数组对栈进行实现,并写出测试的交互功能。
package com.wang.stack;
import java.util.Scanner;
/**
* @author wzy
* @ create 2020-02-05 21:54
*/
public class ArrayStackDemo {
public static void main(String[] args) {
//测试
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.show();
break;
case "push":
System.out.println("输入一个整数");
int value = scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res = stack.pop();
System.out.printf("出栈的数据时%d \n" ,res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop = false;
break;
}
}
System.out.println("程序退出");
}
}
class ArrayStack{
private int maxSize; //栈的大小
private int[] stack;
private int top = -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;
}
stack[++top] = value;
}
//出栈 pop
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈空");
}
int value = stack[top--];
return value;
}
//遍历,遍历时需要从栈顶开始显式数据
public void show(){
if(isEmpty()){
System.out.println("栈空");
return;
}
for (int i = top; i >= 0; i--) {
System.out.printf("stack[%d]=%d \n",i, stack[i]);
}
}
}