栈的定义:
栈(又名堆栈):栈是一种运算受限的线性表,只能从栈顶进行插入和删除(先进后出)。
代码实现(java)
import java.util.Scanner;
public class StackDemo {
public static void main(String[] args) {
Stack stack = new Stack(4);
Boolean loop = true;
int express;
while (loop) {
System.out.println("1.入栈 2.出栈 3.遍历 4.退出");
System.out.print("请输入你的选择:");
Scanner scanner = new Scanner(System.in);
express = scanner.nextInt();
switch (express) {
case 1:
System.out.print("请输入入栈元素的值:");
int value = scanner.nextInt();
try {
stack.push(value);
System.out.println("入栈成功!");
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 2:
try {
int res = stack.pop();
System.out.printf("出栈成功值为%d\n",res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 3:
try {
stack.check();
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 4:
loop = false;
break;
}
}
}
}
// 数组模拟栈
class Stack {
private int maxSize;
private int top = -1;
private int [] stack;
Stack (int maxSize) {
this.maxSize = maxSize;
this.stack = new int[maxSize];
}
// 判断栈为满
public Boolean isFull () {
return top == maxSize -1;
}
// 判断栈为空
public Boolean isEmpty () {
return top == -1;
}
// 入栈
public void push (int value) {
if (!isFull()) {
stack[++top] = value;
} else {
throw new RuntimeException("栈已满!");
}
}
// 出栈
public int pop () {
if (!isEmpty()) {
int value = stack[top--];
return value;
} else {
throw new RuntimeException("栈为空!");
}
}
// 获取栈顶元素
public int getTop() {
if (!isEmpty()) {
return stack[top];
} else {
throw new RuntimeException("栈为空!");
}
}
// 遍历栈
public void check () {
int index = 0;
if (!isEmpty()) {
System.out.println("从栈底到栈顶的元素依次为:");
while (index <= top){
System.out.printf("arr[%d] = %d\n",index,stack[index]);
index++;
}
} else {
throw new RuntimeException("栈中没有元素!");
}
}
}