建立头文件LinkQueue.h
#ifndef LinkQueue_h
#define LinkQueue_h
template <class DataType>
//使用结构体定义结点
struct Node{
DataType data;
Node<DataType> *next; //指向下一个结点的指针
};
template <class DataType>
class LinkQueue{
public:
LinkQueue(); //构造函数
~LinkQueue(); //析构函数
void EnQueue(DataType x); //入队函数
DataType DeQueue(); //出队函数
DataType GetQueue(); //得到队头元素
int Empty(); //判断链队列是否为空
private:
Node<DataType> *front, *rear;
};
#endif /* LinkQueue_h */
建立源文件LinkQueue.cpp实现头文件中的成员函数
#include <stdio.h>
#include "LinkQueue.h"
template <class DataType>
LinkQueue<DataType>::LinkQueue(){
Node<DataType> *s = NULL;
s = new Node<DataType>;
s -> next = NULL;
front = rear = s;
}
template <class DataType>
LinkQueue<DataType>::~LinkQueue(){
Node<DataType> *p = NULL;
while(front != NULL){
p = front ->next;
delete front;
front = p;
}
}
template <class 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 <class DataType>
DataType LinkQueue<DataType>:: DeQueue(){
Node<DataType> *p = NULL;
int x;
if (rear == front) throw "underflow";
p = front->next;
x = p->data;
front->next = p->next;
if (p->next == NULL) rear = front;
delete p;
return x;
}
template <class DataType>
DataType LinkQueue<DataType>::GetQueue(){
return front -> next -> data;
}
template <class DataType>
int LinkQueue<DataType>::Empty(){
if (front == rear) return 1;
else return 0;
}
编写主程序
#include <stdio.h>
#include <iostream>
#include "LinkQueue.cpp"
using namespace std;
int main(){
LinkQueue<int> Q;
if(Q.Empty()){
cout << "Queue is empty!" << endl;
}
else {
cout << "Queue is not empty!" << endl;
}
try{
Q.EnQueue(5);
Q.EnQueue(10);
}
catch(char *wrong){
cout << wrong << endl;
}
Q.EnQueue(5);
Q.EnQueue(10);
cout << Q.GetQueue() << endl;
try{
Q.DeQueue();
}
catch(char *wrong){
cout << wrong << endl;
}
cout << Q.GetQueue() << endl;
return 0;
}