环境配置
codeblocks
windows10
项目结构
代码
CSqQueueClass.h
#ifndef _CSQQUEUECLASS_H_
#define _CSQQUEUECLASS_H_
#include <iostream>
template <typename T>
class CSqQueueClass
{
public:
static const int MAXSIZE;
CSqQueueClass(void);
~CSqQueueClass(void);
bool QueueEmpty(void) const;
bool QueueFull(void) const;
int QueueLength(void) const;
bool EnQueue(const T &e);
bool DeQueue(T &e);
protected:
private:
T *data;
int front;
int rear;
};
template <typename T>
const int CSqQueueClass<T>::MAXSIZE = 100;
template <typename T>
CSqQueueClass<T>::CSqQueueClass(void)
{
data = new T[MAXSIZE];
front = 0;
rear = 0;
}
template <typename T>
CSqQueueClass<T>::~CSqQueueClass(void)
{
delete []data;
}
template <typename T>
bool CSqQueueClass<T>::QueueEmpty(void) const
{
// 一开始rear == front为空
return (rear == front);
}
template <typename T>
bool CSqQueueClass<T>::QueueFull(void) const
{
// 实际rear指向的位置为空, 浪费了一个位置
return ((rear + 1) % MAXSIZE == front);
}
template <typename T>
int CSqQueueClass<T>::QueueLength(void) const
{
return ((rear - front + MAXSIZE) % MAXSIZE);
}
template <typename T>
bool CSqQueueClass<T>::EnQueue(const T &e)
{
if (QueueFull())
{
return false;
}
data[rear] = e;
rear = (rear + 1) % MAXSIZE;
return true;
}
template <typename T>
bool CSqQueueClass<T>::DeQueue(T &e)
{
if (QueueEmpty())
{
return false;
}
e = data[front];
front = (front + 1) % MAXSIZE;
return true;
}
#endif // _CSQQUEUECLASS_H_
main.cpp
#include <iostream>
#include "CSqQueueClass.h"
using namespace std;
int main(void)
{
CSqQueueClass<int> Q1;
const int n = 10;
int a[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int e;
for (int i = 0; i < n; ++i)
{
Q1.EnQueue(a[i]);
}
cout << "Q1.length = " << Q1.QueueLength() << endl;
cout << "Q1: " << endl;
while (!Q1.QueueEmpty())
{
Q1.DeQueue(e);
cout << e << " ";
}
cout << endl;
system("PAUSE");
return 0;
}