• 4.19 手写简单循环队列与栈


    1、通过模板类写一个栈,实现Push和Pop操作。

    应用:将任一十进制数转换成十六进制数。

    #include <iostream>
    using namespace std;
    const int maxn=1e4+10;
    template <class T>
    class Stack
    {
        T stk[maxn];
        int top;
    public:
        Stack()
        {
            top=0;   //初始化栈顶指针
        }
        void Push(T x);
        T Pop();
        bool Stackfull();
        bool Stackempty();
    };
    template <class T>
    bool Stack<T>::Stackfull()  //判断栈是否已满
    {
        return top==maxn-1;       //若top==maxn-1 ,返回true,否则返回false
    }
    template <class T>
    bool Stack<T>::Stackempty() //判断栈是否为空
    {
        return top==0;   //若top==0,返回true,否则返回false
    }
    template <class T>
    void Stack<T>::Push(T x){
        if(Stackfull())
        {
            cout<<"Stack is full!"<<endl;
            return ;
        }
        stk[top++]=x;
    }
    template <class T>
    T Stack<T>::Pop()
    {
        if(Stackempty()){
            cout<<"Stack is empty!"<<endl;
            return 0;
        }
        return stk[--top];
    }
    int main()
    {
        Stack<int> st;
        int n;
        cin>>n;
        while(n)
        {
            st.Push(n%16);
            n/=16;
        }
        while(!st.Stackempty())
        {
            int x=st.Pop();
            if(x<9) cout<<x;
            else cout<<char(x-10+'A');
        }
        cout<<endl;
        return 0;
    }
    

    2、手写队列类模板 实现Push与Pop操作:

    通过head指针与tail指针的指向来判断队列是否为空或已满。

    ①当head==tail时,说明队列为空。

    ②当(tail+1)%(队列长度)==head时,说明队列已满。//因为运用循环队列思想,所以通过取模运算实现循环

    应用:

    模拟银行排队取号、叫号系统:

    #include <iostream>
    using namespace std;
    const int maxn=1e2+10;  
    template <class T>
    class Queue
    {
        T que[maxn];
        int head,tail;
    public:
        Queue()
        {
            head=tail=-1; //head 、tail指向队首元素的前一个位置
        }
        bool QueEmpty()
        {
            return head==tail;
        }
        bool QueFull()
        {
            return (tail+1)%maxn==head;
        }
        void Push(T x)
        {
            if(QueFull()){
                cout<<"等待队列已满"<<endl;
                return ;
            }
            tail++;
            tail%=maxn;   //tail指针后移 实现入队操作
            que[tail]=x;
        }
        T Pop()
        {
            if(QueEmpty())
            {
                cout<<"当前队列为空"<<endl;
                return 0;
            }
            head++;
            head%=maxn;
            return que[head];   //head 指针后移,实现出队操作
        }
    };
    int main()
    {
        Queue<int> q;
        int num=0,choice=0;  //num代表排队序号,choice 表示客户的选择
        do{
            cout<<"******** -1- 要号********"<<endl;
            cout<<"******** -2- 叫号********"<<endl;
            cout<<"******** -0- 退出********"<<endl;
            cout<<"Choose the serve"<<endl;
            cin>>choice;
            switch(choice)    //简单的switch选择结构
            {
            case 1:
                {
                    q.Push(++num);
                    cout<<"您的等待序号为"<<num<<endl;
                    break;
                }
            case 2:
                {
                    cout<<"请"<<q.Pop()<<"号客户到柜台办理业务"<<endl;
                    break;
                }
            case 0:
                {
                    cout<<"-quit-"<<endl;
                    break;
                }
            default:
                {
                    cout<<"-error-"<<endl;
                    break;
                }
            }
        }while(choice);
        return 0;
    }

    蒟蒻求神犇轻喷……


  • 相关阅读:
    SpringMVC学习笔记六:类型转换器及类型转换异常处理
    SpringMVC学习笔记五:HandlerExceptionResolver异常处理
    SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
    SpringMVC学习笔记三:Controller的返回值
    SpringMVC学习笔记二:参数接受
    SSH+Ajax实现用户名重复检查(二)
    SSH+Ajax实现用户名重复检查(一)
    Java添加事件的四种方式
    用Java开发一个本地服务管理软件
    Java Web开发中的名词解释
  • 原文地址:https://www.cnblogs.com/acerkoo/p/9490347.html
Copyright © 2020-2023  润新知