解题思路:
数组模拟栈
了解栈是一个什么结构:先进后出的线性结构表
了解栈顶的初始位置:=-1
当栈满时的条件是:栈顶等于数组容量减一
当栈空的条件是:栈顶位置为-1
处理好当空栈时的异常
栈和队列区别:一个是先进后出,一个是先进先出;栈对头指针具有很少的感知
注意事项:
参考代码:
import java.util.Scanner;
public class Stack {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String key="";
boolean loop=true;
int n=scanner.nextInt();
while (n!=0){
ArrayStack stack=new ArrayStack(n);
for (int i=1;i<=n;i++){
key=scanner.next();
switch (key){
//显示栈顶数
case "A":
try {
int data=stack.getPop();
System.out.printf("%d\n",data);
}catch (Exception e){
System.out.println( e.getMessage());
}
break;
//入栈
case "P":
int data1=scanner.nextInt();
stack.push(data1);
break;
//出栈
case"O":
try {
stack.pop();
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
}
}
System.out.println();
n=scanner.nextInt();
}
}
}
class ArrayStack{
private int maxSize;
private int [] stack;
private int pop=-1;
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack=new int [maxSize];
}
//判断空栈
public boolean isEmpty(){
return pop==-1;
}
//判断栈满
public boolean isFull(){
return pop==maxSize-1;
}
//入栈
public void push(int value){
//先判断是否满了
if (isFull()){
System.out.println("栈满,加不进去数据");
return;
}
pop++;
stack[pop]=value;
}
//弹栈
public int pop(){
//先判断是否空
if (isEmpty()){
throw new RuntimeException("");
}
int value=stack[pop];
pop--;
return value;
}
//查询栈顶数据
public int getPop(){
if (isEmpty()){
throw new RuntimeException("E");
}
return stack[pop];
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复