首页 > 代码库 > 数据结构2-队列

数据结构2-队列

  队列是可以在它的两端可以进行操作,一端入队列,一端出队列。

  队列中用两个标志来表示队列头和队列尾,front和rear,front指向队列头元素的前一个位置,rear指向队列尾的那个元素。

  用C++实现如下: 

//定义一个队列#include<iostream>using namespace std;const int MAX=5;class queue{private:    int a[MAX];    int front,rear;public:    queue()    {        front=0;        rear=0;    }    ~queue(){}    bool empty()const;    bool full()const;    void InQueue(int);       //入队列    void OutOfQueue();    //出队列    void GetFront()const;  //得到队列头元素};bool queue::empty()const{    return front==rear;}bool queue::full()const{    return rear==MAX-1;}void queue::InQueue(int x){    if(full())    {        cout<<"full!"<<endl;    }    else    {        rear++;        a[rear]=x;    }}void queue::OutOfQueue(){    if(empty())    {        cout<<"empty!"<<endl;    }    else    {        front++;    }}void queue::GetFront()const{    if(empty())    {        cout<<"empty!"<<endl;    }    else    {        cout<<a[front+1];    }}int main(){    queue a;    a.GetFront();    a.InQueue(1);    a.InQueue(2);    a.InQueue(3);    a.InQueue(4);    a.InQueue(5);    a.GetFront();    a.OutOfQueue();    a.GetFront();    return 0;}

  这里只实现了queue最基本的几个功能。由于这种顺序队列,当插入的数据达到MAX-1时,队列就会溢出,为了防止溢出,我们可以用循环队列。

  循环队列,即尾元素的下一个元素为头元素。即rear=MAX-1时,当再有一个元素入队列的时候,rear=0。

  实现代码如下:

//实现一个循环队列#include<iostream>using namespace std;const int MAX=3;class xhqueue{private:    int a[MAX+1];    int front,rear;    int count;public:    xhqueue()    {        front=0;        rear=0;        count=0;    }    ~xhqueue(){}    bool empty()const;    bool full()const;    void inq(int);    void outq();    void getfront()const;};bool xhqueue::empty()const{    return count==0;}bool xhqueue::full()const{    return count==MAX+1;}void xhqueue::inq(int x){    if(full())    {        cout<<"full!"<<endl;    }    else    {        rear=(rear+1)%(MAX+1);        a[rear]=x;        count++;    }}void xhqueue::outq(){    if(empty())    {        cout<<"empty!"<<endl;    }    else    {        front=(front+1)%(MAX+1);        count--;    }}void xhqueue::getfront()const{    if(empty())    {        cout<<"empty!"<<endl;    }    else    {        int j=(front+1)%(MAX+1);        cout<<a[j];    }}int main(){    xhqueue a;    if(a.empty())    {        cout<<"empty!\n";    }    a.getfront();    a.inq(1);    a.getfront();    cout<<endl;    a.inq(2);    a.getfront();    cout<<endl;    a.inq(3);    a.inq(4);    a.getfront();    cout<<endl;    a.outq();    a.getfront();    cout<<endl;    a.inq(5);    a.inq(6);    cout<<endl;    return 0;}