首先我们说一下栈
1.栈的特点是先进后出
2.变化的一端为栈顶
3.固定的一段为栈底
4.删除元素恰好相反,最先进入的后删除,后进入发先删除
像极了弹夹装弹
直接上代码
package cn.itjy.Stack;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;
/**
* 使用数组模拟栈
*
* @author dell
*/
public class ArrayStackDemo {
public static void main(String[] args) throws Exception {
ArrayStack stack = new ArrayStack(4);
String key = "";
boolean loop = true;
Scanner s = new Scanner(System.in);
while(loop) {
System.out.println("show(s):显示栈 \texit(e):退出程序\t push(p):表示添加数据到栈\tpop(op):表示从栈取出程序");
System.out.println("请输入你的选择");
key = s.next();
switch (key) {
case "s":
stack.list();
break;
case "push":
System.out.println("请输入一个数");
int value = s.nextInt();
stack.push(value);
break;
case "op":
try {
stack.pop();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case "e":
s.close();
loop = false;
break;
default:
break;
}
}
System.out.println("程序退出----");
}
}
// 定义一个arrayStack 表示栈
class ArrayStack {
// 栈的大小
private int maxSize;
// 数组模拟栈
private int[] stack;
// 栈顶初始化为-1
private int top = -1;
// 构造器
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
// 栈满
public boolean isFull() {
return top == maxSize - 1;
}
// 栈空
public boolean isEmpty() {
return top == -1;
}
// 入栈
public void push(int value) {
if (isFull()) {
System.out.printf("栈的数量为%d不能入栈\n", maxSize+1);
return;
}
top++;
stack[top] = value;
}
// 出栈
public void pop() {
if (isEmpty()) {
throw new RuntimeException("栈是空的,请先添加数据");
}
System.out.printf("出栈的数据%d\n",stack[top]);
top --;
}
// 显示栈的情况[遍历]
public void list() {
if (isEmpty()) {
System.out.println("栈是空的,请先添加数据");
return;
}
for (int i = top; i >= 0; i--) {
System.out.printf("stack[%d] = %d\n",i,stack[i]);
}
}
}
总结:这个总体来说比较简单。大致思路就是添加数据的时候,让指针后移,删除的数据的时候让指针前移。查看的时候使用for循环反向遍历。