#ifndef LinkQueue_H
#define LinkQueue_H
template <class DataType>
struct Node{
DataType data;
Node<DataType>*next;
};
template <typename DataType>
class LinkQueue
{
public:
LinkQueue();
~LinkQueue();
void EnQueue(DataType x);
DataType DeQueue();
DataType GetQueue();
int Empty();
private:
Node<DataType>*front, *rear;
};
#endif
#include "LinkQueue.h"
template <typename DataType>
LinkQueue<DataType>::LinkQueue()
{
Node<DataType>*s = NULL;
s = new Node<DataType>;
s->next = NULL;
front = rear = s;
}
template <typename DataType>
LinkQueue<DataType>::~LinkQueue()
{
Node<DataType>* p = NULL;
while (front != NULL)
{
p = front->next;
delete front;
front = p;
}
}
template <typename DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
Node<DataType> *s = NULL;
s = new Node<DataType>;
s->data = x;
s->next = NULL;
rear->next = s;
rear = s;
}
template <typename DataType>
DataType LinkQueue<DataType>::DeQueue()
{
Node<DataType>*p = NULL;
int x;
if (rear == front) throw "下溢";
p = front->next;
x = p->data;
front->next = p->next;
if (p->next == NULL)rear = front;
delete p;
return x;
}
template <typename DataType>
DataType LinkQueue<DataType>::GetQueue()
{
if (front != rear)
return front->next->data;
}
template <class DataType>
int LinkQueue<DataType>::Empty()
{
if (front == rear)
return 1;
else
return 0;
}
#include <iostream>
using namespace std;
#include "LinkQueue.cpp"
int main()
{
LinkQueue<int>Q;
if (Q.Empty())
cout << "队列为空" << endl;
else
cout << "队列非空" << endl;
cout << "元素10和15执行入队操作:" << endl;
try
{
Q.EnQueue(10);
Q.EnQueue(15);
}
catch (char* wrong)
{
cout << wrong << endl;
}
cout << "查看队头元素" << endl;
cout << Q.GetQueue() << endl;
cout << "执行出队操作:" << endl;
try
{
Q.DeQueue();
}
catch (char * wrong)
{
cout << wrong << endl;
}
cout << "查看队头元素:" << endl;
cout << Q.GetQueue() << endl;
system("pause");
return 0;
}