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;
    }
  • 相关阅读:
    为https请求配置ssl(不用keystore,直接用证书,rsa私钥,java代码)
    http请求对于List类型参数的处理
    java中string转ByteBuffer
    lua for循环如何从第0位开始
    lua中的cjson简单使用
    mongodb返回方便读的数据
    markdown简单插入图片
    #问题#java报Annotation processing is not supported for module cycles
    #问题#java报can't create non-static inner class instance
    git commit+push的完整步骤
  • 原文地址:https://www.cnblogs.com/riden/p/4564455.html
Copyright © 2011-2022 走看看