当前位置: 首页 > 后端技术 > Java

数据结构基础--栈与队列习题

时间:2023-04-01 16:34:07 Java

1.如何使用栈结构来实现队列结构首先,使用栈是肯定不行的。所以,考虑两个栈来实现。一个是入栈,一个是出栈。放入数据时,放入入栈。取数据时,先将数据全部倒入pop栈,再从pop栈取数据。注意:(1)在倒数据的时候,一定要一次性全部倒完(2)如果出栈没有完成,就不能倒数据。详细代码:packagebasic.stackqueue;importjava.util.Stack;/***使用栈结构实现队列结构的功能**@authorMonday*/publicclassTwoStacksImplementQueue{/***使用两个栈实现队列结构*/publicstaticclassTwoStackQueue{//用于存储添加数据的堆栈publicStackstackPush;//用于存储获取数据的堆栈publicStackstackPop;publicTwoStackQueue(){stackPush=newStack<>();stackPop=新堆栈<>();}/***pourdata*/privatevoidpushToPop(){//只有当pop为空时才会倒数据if(stackPop.empty()){//push有数据要倒,马上倒while(!stackPush.empty()){stackPop.push(stackPush.pop());}}}/***向stackPush栈中添加数据*/publicvoidadd(Tdata){stackPush.push(data);}publicTpoll(){如果(stackPush.empty()&&stackPop.empty()){thrownewRuntimeException("队列为空");}//在获取数据之前执行pushToPop()方法;//从stackPop栈中获取数据returnstackPop.pop();}publicTpeek(){if(stackPush.empty()&&stackPop.empty()){thrownewRuntimeException("队列为空");}pushToPop();返回stackPop.peek();}}publicstaticvoidmain(String[]args){TwoStackQueuetest=newTwoStackQueue<>();测试。添加(1);测试。添加(4);测试。添加(3);测试。添加(2);System.out.println(test.peek());System.out.println(test.poll());System.out.println(test.peek());System.out.println(test.poll());System.out.println(test.peek());System.out.println(test.poll());System.out.println(test.peek());System.out.println(test.poll());}}2.如何用队列结构实现栈结构同理,用一个队列是不可能实现的。因此,考虑两个队列来实现。注意:(1)添加数据时,添加到当前有数据的队列中;(2)获取数据时,将所有数据移动到空队列中,留一个数返回。详细代码:packagebasic.stackqueue;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Stack;/***使用队列结构实现栈结构**@authorMonday*/publicclassTwoQueuesImplementStack{/***两个队列实现栈结构*/publicstaticclassTwoQueueStack{publicQueuequeue;公共队列帮助;publicTwoQueueStack(){queue=newLinkedList<>();帮助=新链表<>();}publicvoidpush(Tdata){queue.offer(data);}publicTpoll(){while(queue.size()>1){//将队列中的数据倒入help,留一个help.offer(queue.poll());}//取出队列中剩余的数据并返回Tres=queue.poll();//交换queue和help的引用//这样就不需要判断当前哪个队列有数据,每次从队列中倒出help,取数据,交换引用,取完后,queue队列存储数据//下次取时直接从队列中取即可,大大降低了代码的复杂度Queuetmp=queue;队列=help;帮助=tmp;返回资源;}publicTpeek(){while(queue.size()>1){//将队列中的数据倒入help,留下一个help.offer(queue.poll());}//取出队列中剩余的数据并返回Tres=queue.poll();//因为是peek,所以将最后一个数字放入求助队列help.offer(res);//交换对队列和帮助的引用Queuetmp=queue;队列=帮助;帮助=tmp;返回资源;}publicbooleanisEmpty(){returnqueue.isEmpty();}}publicstaticvoidmain(String[]args){System.out.println("测试开始");TwoQueueStack<整数>myStack=newTwoQueueStack<>();堆栈<整数>堆栈=新堆栈<>();int测试时间=100000;int最大值=100000;for(inti=0;i