1.自定义栈(数组实现)
//使用数组模拟栈
class MyStack{
private int maxSize; //栈容量
private int top; //栈顶
private int[] arr;
//栈构造器
public MyStack(int maxSize) {
this.maxSize=maxSize;
arr=new int[maxSize];
top=-1; //指向队列头部,指向队列头的前一个位置
}
//判断栈是否为满
public boolean isFull(){
return top==maxSize;
}
//判断栈是否为空
public boolean isEmpty(){
return top==-1;
}
//入栈
public void push(int n){
if(isFull()){
System.out.println("栈已满,不能添加数据");
return;
}
arr[++top]=n;
}
//出栈
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈为空");
//System.out.println("队列为空");
}
return arr[top--];
}
//显示栈的所有数据
public void popAll(){
if(isEmpty()){
System.out.println("栈为空,无法打印数据");
}
while(!isEmpty()){
System.out.println(pop());
}
System.out.println();
}
//显示栈的栈顶元素
public int top(){
if(isEmpty()){
throw new RuntimeException("栈为空");
//System.out.println("队列为空");
}
return arr[top];
}
}
2.用两个栈来实现一个队列
思路:一个作为存储数据是s1,一个作为输出数据s2。当入栈时,数据放入s1,当出栈时,将s1的数据先出栈入栈到s2再出栈。出栈操作完成后,仍然需要将s2中的数据放回s1。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
while(stack2.size()>0){
stack1.push(stack2.pop());
}
stack1.push((Integer)node);
}
public int pop() {
while(stack1.size()>0){
stack2.push(stack1.pop());
}
return (int)stack2.pop();
}
}
3.栈的弹入,弹出序列
问题: