相关知识介绍
栈
栈是一种常见的数据结构,广泛应用于计算机领域(线程的存储调用)
- 特点:后进先出(进通常被形象地称为压入(push)、出称为弹出(pop)
队列
队列是和栈长得非常像的一种数据结构,不同的是,队列是“先进先出”
- 特点:先进先出
题目:用两个栈实现队列
- 用两个栈实现队列,请实现它的两个函数appendTail和deleteHead,完成在尾部插入节点和在头部删除节点的功能
Java实现
实现栈功能
/*
* 泛型实现
*/
class MyStack<O>{
//栈顶位置、数组模拟
private int top;
private ArrayList<O> arr;
//构造函数
public MyStack() {
top = -1;
arr = new ArrayList<O>();
}
//实现push功能
public void push(O o){
arr.add(++top,o);
}
public <O>O pop(){
if(top==-1){
return (O) "栈为空";
}else{
return (O) arr.get(top--);
}
}
public boolean isEmpty(){
if(top==-1){
return true;
}else{
return false;
}
}
}
解题:用两个栈实现队列功能
/*
* 实现队列
*/
class MyQueue<O>{
private MyStack<O> stack;
private MyStack<O> stack2;
public MyQueue(){
stack = new MyStack();
stack2 = new MyStack();
}
public void push(O o){
while(!stack2.isEmpty()){
stack.push(stack2.pop());
}
stack.push(o);
}
public <O>O pop(){
while (!stack.isEmpty()) {
stack2.push(stack.pop());
}
if(stack2.isEmpty()==true){
return (O) "队列为空";
}else{
return stack2.pop();
}
}
}
测试用例
/**
* 用两个栈实现一个队列
*
* 测试用例
* 1.正常:添加删除元素
* 2.特殊:连续删除到为空
* @author 林博弈
*
*/
public class Q9_StackAndQueue {
public static void main(String[] args) {
//栈测试
MyStack<Integer> intStack = new MyStack<Integer>();
intStack.push(11);
intStack.push(22);
intStack.push(55);
System.out.println(intStack.pop().toString());
System.out.println(intStack.pop().toString());
System.out.println(intStack.pop().toString());
System.out.println(intStack.pop().toString());
//队列测试
MyQueue<Integer> intQueue = new MyQueue<Integer>();
intQueue.push(11);
intQueue.push(22);
intQueue.push(55);
System.out.println(intQueue.pop().toString());
System.out.println(intQueue.pop().toString());
System.out.println(intQueue.pop().toString());
System.out.println(intQueue.pop().toString());
}
}