zoukankan      html  css  js  c++  java
  • 数据结构复习之用两个栈模拟队列操作

    #include<iostream> 
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define MAXSIZE 100
    using namespace std;
    
    struct Stack{
        int s[MAXSIZE];
        int top=0;
        bool stackOverFlow(){
            if(top >= MAXSIZE)
                return true;
            return false; 
        }
        bool push(int x){
            if(stackOverFlow())
                return false;
            s[top++] = x;
        } 
        bool isEmpty(){
            return top==0 ? true : false;
        }
        bool pop(int &x){
            if(isEmpty()) return false;
            x = s[--top];
            return true;
        }
        
        int size(){
            return top;
        } 
    };
    
    struct Queue{//这种实现方式也是最容易想到的 
        Stack s1, s2;//s1用于队列的push和pop, s2用于是的缓冲(将s1中的数据进行反转,就成了队列的顺序) 
        bool push(int x){
            if(s1.stackOverFlow()) return false;
            int e;
            while(!s1.isEmpty()){
                s1.pop(e);
                s2.push(e);
            } 
            s1.push(x);
            while(!s2.isEmpty()){
                s2.pop(e);
                s1.push(e);
            }
            return true;
        }
        bool pop(int &x){
            if(s1.isEmpty()) return false;
            s1.pop(x);
            return true;
        }
        
        bool isEmpty(){
            return s1.size() == 0 ? true : false;
        }
        
        int size(){
            return s1.size();
        }
    };
    
    struct Queue_x{//这种方式的空间利用率更大一些 
        Stack s1, s2;//s1用于队列的push, s2用于队列的pop 
        bool push(int x){
            if(!s1.stackOverFlow()) {
                s1.push(x);
                return true;
            }
            if(s1.stackOverFlow() && !s2.isEmpty()) return false;
            int e;
            while(!s1.isEmpty()){
                s1.pop(e);
                s2.push(e);
            }
            s1.push(x);
            return true;
        }
        bool pop(int &x){
            if(!s2.isEmpty()){
                s2.pop(x);
                return true;
            }
            if(s1.isEmpty()) return false;
            int e;
            while(!s1.isEmpty()){
                s1.pop(e);
                s2.push(e);
            }
            s2.pop(x);
            return true;
        }
        
        bool isEmpty(){
            return s1.size() == 0 && s2.size() == 0;
        }
        
        int size(){
            return s1.size() + s2.size();
        }
    };
    
    int main(){
        Queue q;
        for(int i=0; i<10; ++i)
            q.push(i);
        int x;
        for(int i=0; i<10; ++i){
            q.pop(x);
            cout<<x<<endl;
            q.push(100);
        }
        cout<<"队列的当前大小:"<<q.size()<<endl;
        while(!q.isEmpty()){
            q.pop(x);
            cout<<x<<endl;
        }
        
        cout<<"******************************************************"<<endl;
        Queue_x qx;
        for(int i=0; i<10; ++i)
            qx.push(i);
        for(int i=0; i<10; ++i){
            qx.pop(x);
            cout<<x<<endl;
            qx.push(100);
        }
        cout<<"队列的当前大小:"<<qx.size()<<endl;
        while(!qx.isEmpty()){
            qx.pop(x);
            cout<<x<<endl;
        }
        return 0;
    }
  • 相关阅读:
    网站添加微信支付功能(小白填坑)
    spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
    当时间一天天流逝,一个三十岁的屌丝程序员留下了了什么?
    解决使用canvas生成含有微信头像的邀请海报没有微信头像
    jQuery v1.10.2如何判断checkbox(复选框)是否被选中
    调用钉钉接口发送消息
    .net core ajax使用EPPlus上传excle导入总结
    Java企业级权限管理系统的开发总结
    RESTful学习小结
    JS实战(京东秒杀)
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/4690480.html
Copyright © 2011-2022 走看看