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;
    }
  • 相关阅读:
    Change the default MySQL data directory with SELinux enabled
    CentOS7使用firewalld打开关闭防火墙与端口
    常用screen参数
    Android手机上浏览器不支持带端口号wss解决方案
    How to Create Triggers in MySQL
    QT GUI @创建新的工程
    Linux内核源代码的结构(转)
    ARM体系的7种工作模式
    C语言中强制数据类型转换(转)
    Linux驱动设计—— 中断与时钟@request_irq参数详解
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/4690480.html
Copyright © 2011-2022 走看看