Two stacks for queue-in/out queue operations
#include <iostream>#include<vector>using namespacestd;structnode{intdata; Node*next;};structstack{Node*Bootom; Node*top;};//PushStack *push_stack (Stack *my_stack,intnum) {Node*p=Newnode; P->data=num; P->next=NULL; if(my_stack->bootom==NULL) {My_stack->bootom=p; My_stack->top=p; } Else{my_stack->top->next=p; My_stack->top=p; } returnMy_stack;}//PopStack *pop_stack (Stack *my_stack) {Node*p=Newnode; Node*p2=my_stack->Bootom; if(my_stack->bootom==my_stack->top) {P=my_stack->Bootom; My_stack->bootom=NULL; My_stack->top=NULL; Deletep; } Else { while(p2->next!=my_stack->top) {P2=p2->Next; } P=my_stack->top; P2->next=NULL; My_stack->top=P2; Deletep; } returnMy_stack;}//Stack_one to Stack_twoStack *stack_one2stack_two (Stack *stack_one,stack *stack_two) {Node*p=stack_one->Bootom; Vector<int>temp; while(p!=NULL) {Temp.push_back (P-data); P=p->Next; } for(intI=temp.size ()-1; i>=0; i--) {Stack_two=Push_stack (Stack_two,temp[i]); } returnStack_two;}//PrintvoidPrint_stack (Stack *my_stack) {Vector<int>temp; Node*p=my_stack->Bootom; while(p!=NULL) {Temp.push_back (P-data); P=p->Next; } for(intI=0; I<temp.size (); i++) {cout<<temp[i]<<" "; } cout<<Endl;}intMain () {cout<<"Queue:"<<Endl; intx; CharC; Stack*stack_one=NewStack; Stack*stack_two=NewStack; Stack_one->bootom=NULL; Stack_one->top=NULL; Stack_two->bootom=NULL; Stack_two->top=NULL; intsum=0; while(cin>>x) {Stack_one=Push_stack (stack_one,x); Sum++; Cin.Get(c); if(c=='\ n') Break; } node*one=stack_one->Bootom; intf=0; while(sum!=0) { if(stack_two->bootom!=NULL) {Stack_two=Pop_stack (Stack_two); } Else{stack_two=Stack_one2stack_two (Stack_one,stack_two); } cout<<"out Team"<<f<<"times, queue data:"<<Endl; Print_stack (Stack_two); F++; Sum--; } return 0;}
Two stacks to implement the functions of a queue