用两个栈实现队列
关键想法:
插入时: 只向栈1顶部插入
删除时:
如果栈2内有元素,就优先弹出栈2的栈顶元素;
否则将栈1内元素依次出栈压入栈2,然后再弹出栈2的栈顶元素
实例代码:
public class Test9
{
Stack<Character> stack1;
Stack<Character> stack2;
public Test9() {
// TODO Auto-generated constructor stub
stack1=new Stack<>();
stack2 = new Stack<>();
}
public void insert(char a)
{
stack1.push(a);
System.out.println("插入了"+a);
}
public void deleteFromTop()
{
if (stack2.isEmpty())
{
while (!stack1.isEmpty())
{
char temp = stack1.pop();
stack2.push(temp);
}
}
System.out.println("删除了"+stack2.pop());
}
main函数中测试:
public static void main(String[] args)
{
Test9 t9 = new Test9();
t9.insert('a');
t9.insert('b');
t9.insert('c');
t9.insert('d');
t9.insert('e');
t9.insert('f');
t9.insert('g');
t9.deleteAtTop();
}
测试结果:
归还给# 用两个队列实现栈
关键想法:
把插入放在一个对队列内,删除放在另外一个队列内,这样就不用在此判断哪个队列是有元素的哪个队列是没元素的。插入时,我们只往队列1中插入,删除时,我们将队列1中的元素依次放入队列2中只留下最后一个,然后删除它。删除结束时,再将所有元素归还给队列1.
实例代码:
public class Test9_1
{
Queue<Character> queue1;
Queue<Character> queue2;
public Test9_1()
{
// TODO Auto-generated constructor stub
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void insert(char a)
{
System.out.println("插入了"+a);
queue1.offer(a);
}
public void delete()
{
int length = queue1.size();
for(int i=0;i<length-1;i++)
{
char temp = queue1.poll();
queue2.offer(temp);
}
System.out.println("删除了"+queue1.poll());
for(int i=0;i<length-1;i++)
{
char temp = queue2.poll();
queue1.offer(temp);
}
}
}
main方法中测试:
public static void main(String[] args)
{
Test9_1 t9 = new Test9_1();
t9.insert('a');
t9.insert('b');
t9.insert('c');
t9.insert('d');
t9.insert('e');
t9.insert('f');
t9.delete();
t9.delete();
}
测试结果:
简单案例