用两个栈来实现队列:*栈的结构是先进后出,队列的结构是先进先出,那么可以用两个栈来实现一个队列的结构,先将一组元素(abcdef)压入到一个栈1中,再出栈压入栈2中(fedcba),就实现了队列的:
代码如下:*
package t1;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Stack;
public class Stack_Queue {
//两个栈来实现一个队列
static Stack s1 = new Stack();
static Stack s2 = new Stack();
//先入s1
static void add(String str){
for(char c : str.toCharArray()) {
s1.push(c);
}
}
//在从s1中弹出,压入s2中
static void deleteHead() {
if(s2.empty()) {
while(!s1.empty()){
s2.push(s1.pop());
}
}
if(s2.empty()) System.out.println("Queue is empty");
else
while(!s2.empty())
System.out.print(s2.pop() + " ");
}
/连个队列实现一个栈**
先把第一个元素放入q1,第二个元素入q2,在把第一个元素取出入q2,
* 此时第一个队列为空,第三元素入q1,再把q2中元素取出放q1,此时q2为空
* 将下一个元素放入q2,把q1中全部元素移除放入q2,如此反复
* 第二种方法,把所有元素放入q1,删除一个元素,其在队尾的位置,所以先把待删除元素以上的
* 元素移到q2去,在删除下元素时,再从q2中把待删除元素以上元素移到q1,如此反复。
* */
static Queue q1 = new LinkedList();
static Queue q2 = new LinkedList();
static Queue queue(String str) {
if(str!=null) {
q1.add(str.charAt(0));
q2.add(str.charAt(1));
q2.add(q1.remove());
int i = 2;
while(i <= str.length()-1) {
if(q1.isEmpty()&& !q2.isEmpty()) {
q1.add(str.charAt(i));
while(!q2.isEmpty()) {
q1.add(q2.remove());
}
} else {
q2.add(str.charAt(i));
while(!q1.isEmpty()){
q2.add(q1.remove());
}
}
i++;
}
}
return q1.isEmpty() ? q2 : q1;
}
//测试
public static void main(String[] args) {
//add("abcdefg");
// deleteHead();
Queue q = queue("12345");
while(!q.isEmpty()){
System.out.print(q.remove());
}
}
}