栈
1、概念
是一种先入后出的有序列表
/*
1、是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端为变化的一端,称为栈顶,另一端为固定的一端,称为栈底
2、根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素恰好相反,最后放入的元素最先删除,最先放入的元素最后删除
*/
2、实现的思路
/*
1、使用数组来模拟栈
2、定义一个 top表示栈顶,初始化为 -1
3、入栈的操作,当有数据加入到栈时,top++,datastruct.stack[top] = data
4、出栈的操作,int value = datastruct.stack[top],top--,return value
*/
3、实现
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack array = new ArrayStack(5);
Scanner input = new Scanner(System.in);
char key = ' ';
boolean flag = true;
while (flag) {
System.out.println("s,为显示栈");
System.out.println("a,为添加栈");
System.out.println("g,为获取栈");
System.out.println("e,退出程序");
key = input.next().charAt(0);
switch (key) {
case 's':
array.list();
break;
case 'a':
System.out.println("请输入你要添加的值:");
int num = input.nextInt();
array.pop(num);
break;
case 'g':
try {
int number = array.push();
System.out.println("取出的数据是:" + number);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'e':
System.out.println("程序退出!");
input.close();
flag = false;
break;
default:
break;
}
}
}
}
//定义一个ArrayStack表示栈
class ArrayStack{
private int maxSize;
private int[] array;
private int top = -1;
public ArrayStack(int maxSize){
this.maxSize = maxSize;
array = new int[this.maxSize];
}
//栈空
public boolean isEmpty(){
return top == -1;
}
//栈满
public boolean isFull(){
return top == maxSize - 1;
}
//入栈
public void pop(int num){
if (isFull()){
System.out.println("栈已满,不能添加数据");
return;
}
top++;
array[top] = num;
}
//出栈
public int push(){
if (isEmpty()){
throw new RuntimeException("栈为空,不能获取数据");
}
int value = array[top];
top--;
return value;
}
//遍历,需要从栈顶开始显示数据
public void list(){
if (isEmpty()){
System.out.println("栈为空,没有数据!");
}
for (int i = top; i >= 0; i--) {
System.out.print(array[i]+" ");
}
System.out.println();
}
}