两个栈实现队列的功能

两个栈实现队列的入队列/出队列操作

#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=='
') 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;
}
原文地址:https://www.cnblogs.com/riden/p/4564455.html