解题思路:
数组模拟栈
了解栈是一个什么结构:先进后出的线性结构表
了解栈顶的初始位置:=-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语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:482 |
C语言考试练习题_保留字母 (C语言代码)浏览:565 |
C语言训练-字符串正反连接 (C语言代码)浏览:618 |
人见人爱A+B (C语言代码)浏览:626 |
大神老白 (C语言代码)浏览:640 |
完数 (C语言代码)浏览:686 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:661 |
A+B for Input-Output Practice (III) (C语言代码)浏览:420 |
【计算球体积】 (C语言代码)浏览:1548 |
【偶数求和】 (C语言代码)浏览:432 |