// LinkQueueMain.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>
struct Node
{
T data;
Node<T> *next;
};
template<class T>
class LinkQueue
{
public:
LinkQueue(); //构造函数,初始化一个空的链队列
~LinkQueue(); //析构函数,释放链队列中各结点的存储空间
void EnQueue(T x); //将元素 x 入队
T DeQueue(); //将队头元素出队
T GetQueue() { if (front != rear) return front->next->data; } //取链队列的队头元素
bool Empty() { front == rear ? return 1 : return 0; } //判断链队列是否为空
void PrintLinkQueue();
private:
Node<T> *front, *rear; //队头和队尾指针,分别指向头结点和终端结点
};
template<class T>
LinkQueue<T>::LinkQueue()
{
Node<T> *s;
s = new Node<T>; s->next = NULL; //创建一个头结点 s
front = rear = s; //将队头指针和队尾指针都指向头结点 s
}
template<class T>
T LinkQueue<T>::DeQueue()
{
Node<T> *p;
int x;
if (rear == front) throw "下溢";
p = front->next; x = p->data; //暂存队头元素
front->next = p->next; //将队头元素所在结点摘链
if (p->next == NULL) rear = front; //判断出队前队列长度是否为 1
delete p;
return x;
}
template<class T>
void LinkQueue<T>::EnQueue(T x)
{
Node<T> *s;
s = new Node<T>; s->data = x; //申请一个数据域为 x 的结点 s
s->next = NULL;
rear->next = s; //将结点 s 插入到队尾
rear = s;
}
template<class T>
LinkQueue<T>::~LinkQueue()
{
while (front)
{
Node<T> *p;
p = front->next;
delete front;
front = p;
}
}
template<class T>
void LinkQueue<T>::PrintLinkQueue()
{
Node<T> *p=front->next;
while (p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkQueue<int> q;
cout << "对1、2、3、4、5进行入队操作:" << endl;
q.EnQueue(1);
q.EnQueue(2);
q.EnQueue(3);
q.EnQueue(4);
q.EnQueue(5);
cout << "输出队列内元素:" << endl;
q.PrintLinkQueue();
cout << "进行出队操作:" << endl;
q.DeQueue();
cout << "输出队列内元素:" << endl;
q.PrintLinkQueue();
cout << "输出队列头元素:"<<q.GetQueue() << endl;
system("pause");
return 0;
}
队列+链式
最新推荐文章于 2020-04-18 23:51:53 发布