頻道欄目
首頁 > 資訊 > C++ > 正文

C++下環形隊列的簡單實現

18-07-30        來源:[db:作者]  
收藏   我要投稿

C++下環形隊列的簡單實現

#include <iostream>
#include <string>
using namespace std;
 
class student
{
public:
    student(string name="o",int age=0)
    {
        sName=name;
        iAge=age;
    }
    void print()
    {
        cout<<"name:"<<sName<<endl;
        cout<<"age:"<<iAge<<endl;
        cout<<endl;
    }
private:
    string sName;
    int iAge;
};
class MyQueue
{
public:
    MyQueue(int c);
    ~MyQueue();
    void ClearQueue();
    int queuelen();
    bool full();
    bool empty();
    void enterqueue(student element);
    void deletequeue(student &element);
    void traverse();
private:
    int iCapacity;
    student *iQueue;//this pointer stands for the whole queue.
    int iLen;
    int head;
    int tail;
};
MyQueue::MyQueue(int c)
{
    iCapacity=c;
    iQueue=new student[iCapacity];
    iLen=0;
    head=0;
    tail=0;
    cout<<"this queue's capacity is "<<c<<endl;
}
MyQueue::~MyQueue()
{
    delete iQueue;
    iQueue=NULL;
}
void MyQueue::ClearQueue()
{
    iLen=0;
    head=0;
    tail=0;
}
int MyQueue::queuelen()
{
    return iLen;
}
bool MyQueue::full()
{
    return iLen == iCapacity ? true: false;
}
bool MyQueue::empty()
{
    return iLen == 0 ? true: false;
}
void MyQueue::enterqueue(student element)//入隊,從tail進
{
    if (full()==false)
    {
        iQueue[tail%iCapacity]=element;
        //iQueue[tail]=element;
        tail++;
        //tail=tail%iCapacity;
        iLen++;
    }
 
}
void MyQueue::deletequeue(student &element)//出隊,從head出,刪除元素就是刪除地址,該函數就是指刪除首元素。
{
    if(empty()==false)
    {
        element=iQueue[head%iCapacity];
        //element=iQueue[head];
        head++;
        //head=head%iCapacity;
        iLen--;
    }
}
void MyQueue::traverse()//遍歷
{
    //cout<<iQueue[0]<<" "<<iQueue[1]<<" "<<iQueue[2]<<" "<<iQueue[3]<<endl;檢驗的確是循環使用的。
    for(int i=head;i<head+iLen;i++)
    {
 
        iQueue[i%iCapacity].print();//iLen or iCapacity???
        cout<<endl;
    }
}
 
int main()
{
    /* MyQueue *p=new MyQueue(4);
    p->enterqueue(10);
    p->enterqueue(12);
    p->enterqueue(14);
    p->enterqueue(16);
    int e=0;//任意賦初值
    p->deletequeue(e);
    cout<<e<<endl;//返回刪除的元素的值
    cout<<endl;
    p->traverse();
    p->enterqueue(20);
    p->traverse();*/
    MyQueue *p=new MyQueue(4);
    student s1("a",1);
    student s2("b",2);
    student s3("c",3);
    student s4("d",4);
    p->enterqueue(s1);
    p->enterqueue(s2);
    p->enterqueue(s3);
    p->enterqueue(s4);
    p->traverse();
    delete []p;
    p=NULL;
    return 0;
}

隊列,FIFO;分為普通隊列和環形隊列。

它只允許在隊頭進行刪除操作,而在隊尾進行插入操作。

普通隊列效率低,速度慢,且容易造成內存空間浪費。

相較于普通隊列,環形隊列(循環隊列)則很好的解決了這些問題。

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片