环境配置
codeblocks
windows10
项目结构
代码
LinkQueueClass.h
#ifndef _LINKQUEUECLASS_H_
#define _LINKQUEUECLASS_H_
#include <iostream>
template <typename T>
class LinkQueueNode
{
public:
T data;
LinkQueueNode<T> *next;
};
template <typename T>
class LinkQueueClass
{
public:
LinkQueueClass(void);
~LinkQueueClass(void);
bool QueueEmpty(void) const;
int QueueLength(void) const;
void EnQueue(const T &e);
bool DeQueue(T &e);
protected:
private:
LinkQueueNode<T> *front;
LinkQueueNode<T> *rear;
};
template <typename T>
LinkQueueClass<T>::LinkQueueClass(void)
{
front = rear = new LinkQueueNode<T>;
rear->next = nullptr;
}
template <typename T>
LinkQueueClass<T>::~LinkQueueClass(void)
{
LinkQueueNode<T> *p = front;
while (nullptr != front)
{
p = p->next;
delete front;
front = p;
}
}
template <typename T>
bool LinkQueueClass<T>::QueueEmpty(void) const
{
return (rear == front);
}
template <typename T>
int LinkQueueClass<T>::QueueLength() const
{
LinkQueueNode<T> *p = front->next;
int i = 0;
while (nullptr != p)
{
++i;
p = p->next;
}
return i;
}
template <typename T>
void LinkQueueClass<T>::EnQueue(const T &e)
{
LinkQueueNode<T> *p = new LinkQueueNode<T>;
p->data = e;
p->next = nullptr;
rear->next = p;
rear = p;
}
template <typename T>
bool LinkQueueClass<T>::DeQueue(T &e)
{
if (QueueEmpty())
{
return false;
}
LinkQueueNode<T> *p = front->next;
e = p->data;
front->next = p->next;
if (rear == p)
{
rear = front;
}
delete p;
return true;
}
#endif // _LINKQUEUECLASS_H_
main.cpp
#include <iostream>
#include "LinkQueueClass.h"
using namespace std;
int main(void)
{
LinkQueueClass<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;
}