循环队列的实现(Queue, C++版)[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 yangjq 的 blog

/* queue.h */
#ifndef __queue_h__
#define __queue_h__

#include <iostream.h>

extern "c" { void exit(int); }

const int ndefaultqueuesize = 50;

template <class t>
class queue {
private:
    t   *qlist; //存放队列元素的指针(数组)
    int size; //队列大小(容量)
    int front; //队首位置
    int rear; //队尾位置(最后一个元素的下一位置)
    int count; //队列中元素的个数
public:
    //构造函数
    queue(int initsize=ndefaultqueuesize) {
        if (initsize < 1)
            initsize = ndefaultqueuesize;
        qlist = new t[initsize];
        if (!qlist) {
            cerr << "存储空间分配失败,应用程序将终止!"
                 << endl;
            exit(1);
        }
        front = 0;
        rear = 0;
        count = 0;
        size = initsize;
    }
    //析构函数
    ~queue() {
        if (qlist) delete [] qlist;
        front = 0;
        rear = 0;
        count = 0;
        size = 0;
    }
    //判断队列是否为空
    int qempty() {
        return front == rear;
        //return count == 0;
    }
    //判断队列是否已满
    int qfull() {
        return (rear+1) % size == front;
        //return count == size;
    }
    //队列长度
    int qlength() {
        return count;
        //return (rear - front + size) % size;
    }
    //队尾插入(追加)元素
    void qinsert(const t &item) {
        if (count == size) {
            cerr << "队列已满,无法再追加元素。"
                 << endl;
            return;
        }
        count ++;
        qlist[rear] = item;
        rear = (rear + 1) % size; //rear始终指向最后一个元素的下一个位置
    }
    //队首删除元素
    t qdelete(t &data) {
        if (count > 0) {
            data = qlist[front];
            count --;
            front = (front + 1) % size; //front移向下一位置
        }
        else
            cerr << "队列已空,无法继续删除。" << endl;
        return data;
    }
    //读取队首元素
    t qfront(t &data) {
        if (count > 0)
            data = qlist[front];
        else
            cerr << "队列为空,无法读取队首元素的值。" << endl;
        return data;
    }
    //清空队列
    void clearqueue() {
        front = 0;
        rear = 0;
        count = 0;
    }
};

#endif /* !__queue_h__ */

////////////////////////////////////////////////////////////
// queuetest.cpp
#include "queue.h"
void main()
{

本文关键:循环队列的实现(Queue, C++版)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top