查看文章
 
23. 数据结构 队 队列 Queue_CycLength 循环队列,Length实现判满 2005.05
2006-07-24 17:29


#include <iostream.h>
#include <assert.h>

template <class T>
class Queue
{     //循环队列的类定义
public:
 Queue (int=10);
 ~Queue () { delete [ ] elements; }
 void EnQueue( T & item );
 T DeQueue();
 T GetFront();
 void MakeEmpty() { length = 0; }     //置空队列
 int IsEmpty() const { return length == 0; }   //判队列空否
 int IsFull() const { return length == maxSize; } //判队列满否
private:
 int rear, length;     //队尾指针和队列长度
 T *elements;      //存放队列元素的数组
 int maxSize;      //队列最大可容纳元素个数
};

// 构造函数
template <class T>
Queue<T>:: Queue (int sz)
{
 //建立一个最大具有maxSize个元素的空队列。
 rear = maxSize - 1;
 length = 0;
 maxSize = sz;

 elements = new T[maxSize];   //创建队列空间
 assert (elements != 0);    //断言: 动态存储分配成功与否
}

// 插入函数
template<class T>
void Queue<T> :: EnQueue ( T &item)
{
 assert (!IsFull());     //判队列是否不满,满则出错处理
 length++;       //长度加1
 rear = ( rear +1) % maxSize;  //队尾位置进1
 elements[rear] = item;    //进队列
}

// 删除函数
template<class T>
T Queue<T> :: DeQueue ()
{
 assert (!IsEmpty());    //判断队列是否不空,空则出错处理
 length--;      //队列长度减1
 return elements[(rear-length+maxSize) % maxSize];  //返回原队头元素值
}

// 读取队头元素值函数
template<class T>
T Queue<T> :: GetFront ()
{
 assert (!IsEmpty ());
 return elements[(rear-length+1+maxSize) % maxSize];  //返回队头元素值
}

void main()
{
 Queue<int> aQueue;
 int i = 1;
 
 aQueue.EnQueue(i);
 i++;
 aQueue.EnQueue(i);
 i++;
 aQueue.EnQueue(i);
 
 aQueue.DeQueue();
 
 cout << aQueue.GetFront() << endl;
}


类别:数据结构||添加到搜藏 |分享到i贴吧|浏览(269)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu