zoukankan      html  css  js  c++  java
  • 两个栈实现队列的功能

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

    #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;
    }
  • 相关阅读:
    VB中String的用法及原理
    SQL中的left outer join,inner join,right outer join用法详解
    SqlServer,Oracle 常用函数比较
    sql 使用视图的好处
    修改数据库的兼容级别
    sql server2008修改登录名下的默认架构名
    SQL事务回滚 ADO BeginTrans, CommitTran 以及 RollbackTrans 方法
    sql事务(Transaction)用法介绍及回滚实例
    SQL Server更新表(用一张表的数据更新另一张表的数据)
    VB如何连接SQL Server数据库
  • 原文地址:https://www.cnblogs.com/riden/p/4564455.html
Copyright © 2011-2022 走看看