如何制作自己的网站,推广怎么推广,贵州企业网站,可以做c语言任务的网站http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析#xff1a; 队列的主要操作有两个#xff1a;入队操作和出队操作#xff0c;出队时从队头出#xff0c;入队是从队尾插入#xff0c;入队的操作和入栈的操作类似#xff0…http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析 队列的主要操作有两个入队操作和出队操作出队时从队头出入队是从队尾插入入队的操作和入栈的操作类似而最关键的问题是出队操作要出队列的是队列的第一个元素而出栈的是栈的栈顶元素所以我们可以这样 假设两个栈A和栈BA主要用来处理入队操作B用于处理出队操作。入队操作和入栈操作类似直接将元素压入栈即可。出队的时候实现我们假设栈B为空则要把栈A的第一个元素即栈底元素弹出直接从A弹出这是不可能的但如果我们把栈A里面的元素的顺序逆过来这样直接用栈弹出栈顶元素即可所以我们可以把栈A的元素全部弹出来并俺顺序压入栈B中这样每次栈B弹出的栈顶元素就是栈A相对应的栈底元素就是出队操作。若B不为空则代表之前从A复制过来的元素还没有完全弹出要出栈的时候直接弹出即可。若栈B的元素都弹出来了就需要从A中补充。 2.总结操作就是 入队将元素进栈A 出队判断栈B是否为空如果为空则将栈A中所有元素pop并push进栈B栈B出栈如果不为空栈B直接出栈。 3.Java代码实现 import java.util.Stack; public class StacksToQueue { StackInteger stack1new StackInteger() ; StackInteger stack2new StackInteger(); public void addToTail(int x)//添加元素到队尾 --进队--- { stack1.push(x); } public int deleteHead()//删除对首 --出队--- 不需是队不为空才能删除呀~~~~ { if( pSize()!0)//队列不为空 { if(stack2.isEmpty())//若stack2为空则把stack1全部加入stack2 stack1ToStack2(); return stack2.pop(); } else { System.out.println(队列已经为空不能执行从队头出队); return -1; } } public void stack1ToStack2()//把stack1全部放入stack2 { while(!stack1.isEmpty()) stack2.push(stack1.pop()); } public int pSize()//队列size() { return stack1.size()stack2.size();//两个都为空队列才是空 } } 2两个队列实现一个栈
1.原理分析栈的主要操作有两个入栈操作和出栈操作出栈时从栈顶出入栈是从栈顶插入。入栈和入队类似都是从“所有元素后面插入”而最关键的问题是出栈操作要出栈的是的栈顶元素而队列每次出队的是队列的第一个元素。因此我们可以这样出队的时候若队列不止一个元素则进行出队 操作只保留最后一个元素这样出队的时候就符合出栈的要求了但其他的元素必须 保留而且顺序不能乱这时候另一个队列就起作用了这个队列可以在“出栈”操作之前按顺序保留所有的元素等到“出栈”之后把所有元素按顺序进入到“出栈”后的队列。因此两个队列总有一个为空。 2.总结操作就是入栈将元素进队列A 出栈判断队列A中元素的个数是否为1如果等于1则出队列否则将队列A中的元素 以此出队列并放入队列B直到队列A中的元素留下一个然后队列A出队列再把 队列B中的元素出队列以此放入队列A中。 3.Java代码实现import java.util.LinkedList; public class QueuesToStack { LinkedListInteger queue1new LinkedListInteger(); LinkedListInteger queue2new LinkedListInteger(); public void push(int value)//入栈 { queue1.addLast(value); } public int pop()//出栈 必须是非空的栈才能出栈啊 { if(sSize()!0)//栈不为空 { //移动一个队的n-1个到另一个中 if(!queue1.isEmpty())//q1 空 { putN_1ToAnthor(); return queue1.removeFirst(); } else //q2 空 { putN_1ToAnthor(); return queue2.removeFirst(); } } else { System.out.println(栈已经为空啦不能出栈); return -1; } } public int sSize() { return queue1.size()queue2.size(); } public void putN_1ToAnthor()//从非空中出队n-1个到另一个队列 因为队列总是一空一非空 { if(!queue1.isEmpty()) { while(queue1.size()1) { queue2.addLast(queue1.removeFirst()); } } else if(!queue2.isEmpty()) { while(queue2.size()1) { queue1.addLast(queue2.removeFirst()); } } } }