C++_队列的两种实现方法

来源:互联网 发布:sunday算法 编辑:程序博客网 时间:2024/06/05 16:28

通过数组表示

#include <iostream>#define NULL 0using namespace std;class MyQueue{private:    int *q;    int front_, rear_,maxsize;public:    MyQueue(int s) : maxsize(s+1)    {        q=new int(maxsize);        front_=rear_=0;    }    ~MyQueue()    {        delete q;    }    bool AddQ(int t);    bool DelQ(int &t);    bool QFull();    bool QEmpty();};bool MyQueue::AddQ(int t){    rear_=(++rear_)%maxsize;    if(rear_==front_)    {        cout << "The Queue is full" << endl;        if(!front_) rear_=maxsize-1;        else        --rear_;        return false;    }    else    {        q[rear_] = t;        return true;    }}bool MyQueue::DelQ(int &t){    if(front_==rear_)    {        cout << "The Queue is empty";        return false;    }    else    {        front_=(++front_)%maxsize;        t=q[front_];        return true;    }}bool MyQueue::QEmpty(){    if(front_==rear_)        return true;    else        return false;}bool MyQueue::QFull(){    if((rear_+1)==front_)        return true;    else        return false;}int main(){    MyQueue q(3);    for(int i=0;i<3;i++){        int a;        cin >> a;        q.AddQ(a);    }    while(!q.QEmpty())    {        int b;        q.DelQ(b);        cout << b << endl;    }    return 0;}

通过链表表示

#include <iostream>#define NULL 0using namespace std;class MyQueue{private:    struct node    {        int data;        node *link;    };    node *front;    node *rear;public:    MyQueue()    {        front=NULL;        rear=NULL;    }    ~MyQueue()    {    }public:    bool QEmpty();    bool QAdd(int t);    bool QDel(int &t);};bool MyQueue::QEmpty(){    if(front)        return false;    else        return true;}bool MyQueue::QAdd(int t){    node *temp=new node;    temp->data=t;    //cout << t<<"#####";    if(!front)    {        front=temp;        rear=temp;    }    else    {        temp->link=NULL;        rear->link=temp;        rear=temp;    }    //temp->link=rear;    //rear=temp;    return true;}bool MyQueue::QDel(int &t){    node *temp;    if(QEmpty())    {        cout << "The queue is empty" << endl;        return false;    }    else    {        temp=front;        front=front->link;        t=temp->data;        delete temp;        return true;    }}int main(){    MyQueue q;    int a,b;    for(int i=0;i<5;i++)    {        cin >> a;        q.QAdd(a);    }    while(!q.QEmpty())    {        int b;        q.QDel(b);        cout << b << endl;    }    //cout << "Hello world!" << endl;    return 0;}
0 0