您的位置:首页 > 其它

队列——顺序存储结构及其基本运算(循环队列的另一种表达方式)

2017-06-13 15:31 453 查看
问题描述:对于循环队列来说,如果知道队头指针和队列中元素个数,则可以计算出队尾指针。也就是说,可以用队列中元素个数代替队尾指针。设计出这种循环队列的进队、出队、判队空和求队中元素个数的算法。

示例代码:

#include <iostream>
using namespace std;
const int MaxSize = 5;			//队大小
template <typename T>
class SqQueueClass2				//循环队列类模板
{
T *data;
int front;					//队头
int count;					//队中元素个数
public:
SqQueueClass2();			//构造函数,用于队列初始化
~SqQueueClass2();			//析构函数,用于释放空间
bool QueueEmpty();			//判断队列是否为空
bool enQueue(T e);			//进队列算法
bool deQueue(T &e);			//出队列算法
int GetCount();				//求队列中元素个数

};
template <typename T>
SqQueueClass2<T>::SqQueueClass2()	//构造函数,用于队列初始化
{
data = new T[MaxSize];
front = 0;
count = 0;
}
template <typename T>
SqQueueClass2<T>::~SqQueueClass2()	//析构函数,用于释放空间
{
delete[] data;
}
template <typename T>
bool SqQueueClass2<T>::QueueEmpty()	//判断队列是否为空
{
return (count == 0);
}
template <typename T>
bool SqQueueClass2<T>::enQueue(T e)	//进队列算法
{
int rear1;
rear1 = (front + count) % MaxSize;
if (count == MaxSize) return false;//队满上溢出
rear1 = (rear1 + 1) % MaxSize;
data[rear1] = e;
count++;
return true;
}
template <typename T>
bool SqQueueClass2<T>::deQueue(T &e)//出队列算法
{
if (count == 0) return false;		//队空下溢出
front = (front + 1) % MaxSize;
e = data[front];
count--;
return true;
}
template <typename T>
int SqQueueClass2<T>::GetCount()	//求队列中元素个数
{
return count;
}

void main()
{
SqQueueClass2<char> sq;			//定义一个字符顺序队sq
char e;
cout << "建立一个空队sq\n";
cout << "队sq" << (sq.QueueEmpty()?"空":"不空") << endl;
cout << "元素a进队\n"; sq.enQueue('a');
cout << "元素b进队\n"; sq.enQueue('b');
cout << "元素c进队\n"; sq.enQueue('c');
cout << "元素d进队\n"; sq.enQueue('d');
cout << "元素e进队\n"; sq.enQueue('e');
cout << "队sq" << (sq.QueueEmpty()?"空":"不空") << endl;
cout << "所有元素出队次序:";
while (!sq.QueueEmpty())		//队不空循环
{
sq.deQueue(e);				//出队元素e
cout << e << " ";			//输出元素e
}
cout << endl;
cout << "销毁队sq" << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: