实现顺序队列

来源:互联网 发布:多益网络找回 编辑:程序博客网 时间:2024/04/28 10:59

队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

队列可以采用顺序存储方式来实现(称为顺序队列),或者采用链式存储方式来实现(称为链式队列)。

实现顺序队列需要注意:
(1)采用顺序存储方式,需要预先分配空间,data[maxlen];
(2)采用循环结构克服“假溢出”问题,定义 rear + 1 = front为队列满状态;
(3)顺序队列的应用:输出杨辉三角形。

以下为实现顺序队列的代码,在vs2010上测试通过:

#include <iostream>using namespace std;#define  maxlen 30class myQueue{public:    myQueue();    bool empty();    bool full();    bool getFrontElement(int &x);//只能访问队列头部的元素    bool push(int x);//在队列尾部插入元素    bool pop();//删除队列头部元素    int size();private:    int front, rear;//头部尾部索引值    int count;//队列中元素个数    int data[maxlen];};int _tmain(int argc, _TCHAR* argv[]){    //运用队列输出杨辉三角形    int n = 8;//设定杨辉三角形阶数    int s1 = 0, s2 = 0;    myQueue que;    que.push(1);//第一个元素入栈    cout<<1<<endl;    for(int i = 2; i <= n; i++)    {       s1 = 0;//前一个出栈的元素        for(int j = 0; j < i - 1; j++)//对杨辉三角形中第i层,从左到右的元素依次入队列        {            que.getFrontElement(s2);//取队列头元素            que.pop();//列头元素出栈            cout<<s1 + s2<<" ";            que.push(s1 + s2);            s1 = s2;//前一个出栈的元素更新        }        que.push(1);//每行最后一个数值都为1        cout<<1<<endl;    }    return 0;}myQueue::myQueue()//初始化{    front = rear = 0;    count = 0;}bool myQueue::empty(){    if(count == 0)        return true;    else        return false;}//教材中对满队列的一种定义//留出一个元素空间不使用(与栈区分),头,尾索引相差1时,定义为满队列bool myQueue::full(){    if(count == maxlen - 1)        return true;    else        return false;}bool myQueue::getFrontElement(int &x){    if(empty())        return false;    else    {        //队列头索引值所在空间没有存储元素        //访问队列头元素时,front不能变化        //front = (front + 1) % maxlen; //error        x = data[(front + 1) % maxlen];        return true;    }}bool myQueue::push(int x){    if(full())        return false;    else    {        rear = (rear + 1) % maxlen;        data[rear] = x;        count++;        return true;    }}bool myQueue::pop(){    if(empty())        return false;    else    {        front = (front + 1) % maxlen;//取模运算,与循环队列相符合        count--;        return true;    }}int myQueue::size(){    return count;}
0 0