标签:
两个栈实现队列的入队列/出队列操作
#include<iostream> #include<vector> using namespace std; struct node { int data; node *next; }; struct stack { node *bootom; node *top; }; //push stack *push_stack(stack *my_stack,int num) { node *p=new node; 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; } return my_stack; } //pop stack *pop_stack(stack *my_stack) { node *p=new node; node *p2=my_stack->bootom; if(my_stack->bootom==my_stack->top) { p=my_stack->bootom; my_stack->bootom=NULL; my_stack->top=NULL; delete p; } else { while(p2->next!=my_stack->top) { p2=p2->next; } p=my_stack->top; p2->next=NULL; my_stack->top=p2; delete p; } return my_stack; } // stack_one to stack_two stack *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(int i=temp.size()-1;i>=0;i--) { stack_two=push_stack(stack_two,temp[i]); } return stack_two; } //print void print_stack(stack *my_stack) { vector<int> temp; node *p=my_stack->bootom; while(p!=NULL) { temp.push_back(p->data); p=p->next; } for(int i=0;i<temp.size();i++) { cout<<temp[i]<<" "; } cout<<endl; } int main() { cout<<"入队:"<<endl; int x; char c; stack *stack_one=new stack; stack *stack_two=new stack; stack_one->bootom=NULL; stack_one->top=NULL; stack_two->bootom=NULL; stack_two->top=NULL; int sum=0; while(cin>>x) { stack_one=push_stack(stack_one,x); sum++; cin.get(c); if(c==‘\n‘) break; } node *one=stack_one->bootom; int f=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<<"出队"<<f<<"次后,队列数据:"<<endl; print_stack(stack_two); f++; sum--; } return 0; }
标签:
原文地址:http://www.cnblogs.com/riden/p/4564455.html