解题思路:
数组模拟栈
了解栈是一个什么结构:先进后出的线性结构表
了解栈顶的初始位置:=-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 人评分
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:796 |
简单的a+b (C语言代码)浏览:585 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:488 |
C二级辅导-计负均正 (C语言代码)浏览:698 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:689 |
小明A+B (C语言代码)浏览:1316 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:548 |
大神老白 (C语言代码)浏览:690 |
C语言训练-求PI* (C语言代码)浏览:637 |
WU-输出九九乘法表 (C++代码)浏览:1852 |