C++实现队列之链式存储结构

原创 2015年07月06日 17:09:19
#include <iostream>
#include <string>

using namespace std;

template<typename T>
struct LinkNode{
	T data;
	LinkNode<T> *next;
};

template<typename T>
class LinkQueue{
public:
	LinkQueue();
	LinkQueue(T a[], int n);
	~LinkQueue(){ Clear(); cout << "hehe" << endl; };
	void InputQue(T x);
	void OutQue();
	void Gethead();
	void Empty();
	void Clear();
	void Print();
private:
	LinkNode<T> *front, *rear;
};

template<typename T>
LinkQueue<T>::LinkQueue()         //构造函数初始化一个空链队
{
	front = new LinkNode <T>;
	front->next = NULL; 
	rear = front;
}

template<typename T>
LinkQueue<T>::LinkQueue(T a[], int n)
{
	front = new LinkNode <T>;           //分配一个头结点
	rear = front;
	front->next = NULL;
	for (int i = 0; i < n; ++i)
	{
		LinkNode<T> *newNode = new LinkNode <T>;
		newNode->data = a[i];
		newNode->next = rear->next;                 //队尾入队操作
		rear->next = newNode;
		rear = newNode;
	}
}

template<typename T>
void LinkQueue<T>::InputQue(T x)          //入队
{
	LinkNode<T> *newNode = new LinkNode < T > ;
	newNode->data = x;
	newNode->next = rear->next;
	rear->next = newNode;
	rear = newNode;
}

template<typename T>
void LinkQueue<T>::OutQue()              //出队,返回队列首元素
{
	LinkNode<T> *p = front;
	if (p != rear)
	{
		p = p->next;
		T x = p->data;
		front->next = p->next;
		delete p;
		cout<< x<<endl;
	}
}

template<typename T>
void LinkQueue<T>::Gethead()            //取队首元素
{
	LinkNode<T> *p = front;
	if (p != rear)
	{
		p = p->next;
		T x = p->data;
		cout << x << endl;
	}
}

template<typename T>
void LinkQueue<T>::Print()             //队头到队尾 遍历队列
{
	LinkNode<T> *p = front;
	while (p->next != rear)
	{
		p = p->next;
		cout << p->data << " ";
	}
	cout << rear->data << endl;
}

template<typename T>
void LinkQueue<T>::Empty()                //判断空否?
{
	if (front == rear)
		cout << "队列为空!" << endl;
	else
		cout << "队列非空!" << endl;
}

template<typename T>
void LinkQueue <T>::Clear()        //清空链队
{
	while (front != rear)
	{
		LinkNode<T> *p = front;
		p = p->next;
		front->next = p->next;
		if (p->next == NULL)
			rear = front;         //这一步必不可少
		delete p;
	}
	delete front;
	cout << "已清空" << endl;
}


int _tmain(int argc, _TCHAR* argv[])
{
	int a[] = {1,2,3,4,5,6};
	LinkQueue<int> A(a, 6);
	A.Print();
	A.InputQue(7);
	A.Print();
	A.OutQue();
	A.Print();
	A.Gethead();
	A.Empty();
	//A.Clear();

	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

队列的链式存储结构C++实现

采用单链表实现队列,实质上为单链表的一种简化。只需要在链表的头部删除和尾部加入元素即可 /******************************************************...

队列链式存储结构的C++模板类头文件源代码实现

队列的链式存储结构与链表的区别除了成员函数的不同以外,还有队列的成员变量增加了尾指针,这是因为增加变量需要从链表的尾部添加,若每次从头结点开始遍历的话太费时间,头指针是一个空数据的节点指针,它是一个一...

数据结构学习之队列的链式存储的C++实现

最近在中国大学MOOC上选修了浙大的《数据结构》这门课,这周学习了线性表、堆栈和队列这三种抽象数据类型。下面就队列这种抽象数据类型的链式存储进行总结并贴出代码和注释。 一、队列的抽象数据类型描述 任何...

队列的顺序与链式存储结构

  • 2014年11月04日 22:05
  • 3KB
  • 下载

循环队列-链式存储结构-c语言实现

/* 循环队列-线性表-链式结构 */ #include #include #define OK 1 #define ERROR 0typedef int Status; typedef i...

队列的链式存储结构的实现2 —— 出队查看队首尾元素计算元素个数

// Filename : list_queue.c // Authot : LupingChen // Data : 2015.05.30// Content : pop...

队列的链式存储结构及实现

//队列的链式存储结构及实现 typedef int QElemType; //链队列的结构 typedef struct QNode { QElemType data; struct QNod...
  • hacke2
  • hacke2
  • 2012年02月23日 10:09
  • 1184

队列的链式存储结构及实现

队列的链式存储结构其实就是线性表的单链表,只不过它只能尾进头出,也称为链队列。为了操作方便讲队头指针指向链队列的头结点,而队尾指针指向终端节点。 空队列是这样 下面使用代码演示: 这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实现队列之链式存储结构
举报原因:
原因补充:

(最多只允许输入30个字)