• 数据结构-队列(C++)


    数据结构--队列

    队列只可以在一端入队(/出队)在另一端出队(/入队),没有插队行为。

    普通队列:

    存在的缺点:出队时,如果指针一直指向对头,处理起来就会效率变低,如果指针一直后移,就会造成前面的位置浪费。

    环形队列:

    克服普通队列的缺点。环形队列,排队有方向的。

    队列用途:

    自动排号机

    C++实现队列设计

    image-20201123172440230

    ====================

    class MyQueue{
    	public:
    		MyQueue(int queueCapacity);
    		virtual ~MyQueue();
    		void ClearQueue();
    		bool QueueEmpty() const;
    		bool QueueFull() const;
    		int QueueLength() const;
    		bool EnQueue(int element);
    		bool DeQueue(int &element);
    		void QueueTraverse();
    private:
    	int *m_pQueue;
    	int m_iQueuelen;
    	int  m_iQueueCapacity;
    	int m_iHead;
    	int m_iTail;
    }; 
    

    ===================

    #include"MyQueue.h"
    #include<iostream>
    using namespace std;
    MyQueue:: MyQueue(int queueCapacity){
    m_iQueueCapacity=queueCapacity;
    m_iHead=0;
    m_iTail=0;
    m_pQueue=new int[m_iQueueCapacity];
    m_iQueuelen=0;
    }
    MyQueue::~MyQueue(){
    delete []m_pQueue;
    m_pQueue = NULL;
    }
    void MyQueue::ClearQueue(){
    m_iHead=0;
    m_iTail=0;
    m_iQueuelen=0;
    }
    bool MyQueue::QueueEmpty() const{
    if(m_iQueuelen==0){
    return true;
    }else{
    return false;
    }
    }
    int MyQueue::QueueLength()const{
    return m_iQueuelen;
    }
    bool MyQueue::QueueFull() const{
    if(m_iQueuelen==m_iQueueCapacity){
    return true;
    }else{
    return false;
    }
    }
    bool MyQueue::EnQueue(int element){
    if(QueueFull()){
    return false;
    }
    else{
    m_pQueue[m_iTail]=element;
    m_iTail++;
    m_iTail=m_iTail%m_iQueueCapacity;
    m_iQueuelen++;
    return true;
    }
    }
    bool MyQueue::DeQueue(int &element){
    if(QueueEmpty()){
    return false;
    }
    else{
    element=m_pQueue[m_iHead];
    m_iHead++;
    m_iTail=m_iTail%m_iQueueCapacity;
    m_iQueuelen--;
    return true;
    }
    }
    void MyQueue::QueueTraverse(){
    for(int i=m_iHead;i<m_iQueuelen+m_iHead;i++){
    cout<<m_pQueue[i%m_iQueueCapacity]<<endl;
    }
    }

    ========================`

    #include<iostream>
    #include"MyQueue.h"
    using namespace std;
    int main(){
    	MyQueue *p=new MyQueue(3);
    	cout<<"插入"<<endl;
    	p->EnQueue(1);
    	p->EnQueue(2);
    	p->EnQueue(3);
    	cout<<"遍历"<<endl;
    	p->QueueTraverse();
    	cout<<"移除"<<endl;
    	int e=0;
    	p->DeQueue(e);
    	cout<<e<<endl;
    	cout<<"遍历"<<endl;
    	p->QueueTraverse();
    	cout<<"清除"<<endl;
    	p->ClearQueue();
    	cout<<"清除以后"<<endl;
    	cout<<"遍历"<<endl;
    	p->QueueTraverse();
    	cout<<"重新入队列"<<endl;
    	p->EnQueue(20);
    	cout<<"遍历"<<endl;
    	p->QueueTraverse();	 
    	delete p;
    	p=NULL;
    	return 0;
    }
    

    练习:

    ==============================

    #include"Customer.h"
    class MyQueue{
    public:
    MyQueue(int queueCapacity);
    virtual ~MyQueue();
    void ClearQueue();
    bool QueueEmpty() const;
    bool QueueFull() const;
    int QueueLength() const;
    bool EnQueue(Customer element);
    bool DeQueue(Customer &element);
    void QueueTraverse();
    private:
    Customer *m_pQueue;
    int m_iQueuelen;
    int m_iQueueCapacity;
    int m_iHead;
    int m_iTail;
    };

    
    

    ================================

    #include"MyQueue.h"` `#include<iostream>` `using namespace std;` `MyQueue:: MyQueue(int queueCapacity){` `m_iQueueCapacity=queueCapacity;` `m_iHead=0;` `m_iTail=0;` `m_pQueue=new Customer[m_iQueueCapacity];` `m_iQueuelen=0;` `}` `MyQueue::~MyQueue(){` `delete []m_pQueue;` `m_pQueue = NULL;` `}` `void MyQueue::ClearQueue(){` `m_iHead=0;` `m_iTail=0;` `m_iQueuelen=0;` `}` `bool MyQueue::QueueEmpty() const{` `if(m_iQueuelen==0){` `return true;` `}else{` `return false;` `}` `}` `int MyQueue::QueueLength()const{` `return m_iQueuelen;` `}` `bool MyQueue::QueueFull() const{` `if(m_iQueuelen==m_iQueueCapacity){` `return true;` `}else{` `return false;` `}` `}` `bool MyQueue::EnQueue(Customer element){` `if(QueueFull()){` `return false;` `}` `else{` `m_pQueue[m_iTail]=element;` `m_iTail++;` `m_iTail=m_iTail%m_iQueueCapacity;` `m_iQueuelen++;` `return true;` `}` `}` `bool MyQueue::DeQueue(Customer &element){` `if(QueueEmpty()){` `return false;` `}` `else{` `element=m_pQueue[m_iHead];` `m_iHead++;` `m_iTail=m_iTail%m_iQueueCapacity;` `m_iQueuelen--;` `return true;` `}` `}` `void MyQueue::QueueTraverse(){` `for(int i=m_iHead;i<m_iQueuelen+m_iHead;i++){` `m_pQueue[i%m_iQueueCapacity].printInfo();` `}` `}

    =============================

    #include<string>
    using namespace std;
    class Customer{
    public:
    Customer(string name="",int age=0);
    void printInfo() const;
    private:
    string m_strName;
    int m_iAge;
    ``
    };

    ===============================

    #include<iostream>
    #include"Customer.h"
    using namespace std;
    Customer::Customer(string name,int age){
    m_strName=name;
    m_iAge=age;
    }
    void Customer::printInfo() const{
    cout<<m_strName<<endl;
    cout<<m_iAge<<endl;
    }

    ==========================

    #include<iostream>
    #include"MyQueue.h"
    using namespace std;
    int main(){
    	MyQueue *p=new MyQueue(3);
    	Customer c1("wangjiaer",26);
    	Customer c2("duanyien",27);
    	p->EnQueue(c1);
    	p->EnQueue(c2); 
        p->QueueTraverse();
    Customer c4("",0);
    p->DeQueue(c4);
    p->QueueTraverse();	
    return 0;
    }
  • 相关阅读:
    vue自定义svg图标无法显示
    生成海报图
    ICS 文件的生成及下载
    Apache中模块 mod_rewrite的使用示例
    小议数据框架的封装
    TianvCMS部分官方插件
    分享T4代码生成及源码(sqlite版),欢迎新手参考、修改(无版权)
    使用 SaToken 解决 WebSocket 握手身份认证
    Element Plus 正式版发布啦!🎉🎉
    mysql锁表问题
  • 原文地址:https://www.cnblogs.com/yunxiaoqian/p/14027040.html
Copyright © 2020-2023  润新知