程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 鏈隊列的C++實現

鏈隊列的C++實現

編輯:C++入門知識

#include
using namespace std;
//節點類
template
struct QNode
{
	T data;
	QNode *next;
};
//隊列類
template
struct LinkList
{
	QNode * front;
	QNode * rear;
	size_t size;
};

//構造一個空隊列
template
void InitQueue(LinkList & que)
{
	que.front = (QNode *)malloc(sizeof(QNode));
	if(!que.front) exit(0);
	que.size = 0;
	que.rear = que.front;
	que.rear->next = 0;
}
//銷毀隊列
template
void DestroyQueue(LinkList& que)
{
	QNode * p = que.front->next;
	free(que.front);
	while(p != 0)
	{
		que.front = p->next;
		free(p);
		p = que.front;
	}
}
//清空隊列
template
void ClearQueue(LinkList& que)
{
	QNode * p = que.front->next;
	while(p != 0)
	{
		que.rear = p->next;
		free(p);
		p = que.rear;
	}
	que.rear = que.front;
	que.front->next = 0;
	que.size = 0;
}
//返回隊列的長度
template
int QueueLength(LinkList& que)
{
	return que.size;
}
//返回隊列的隊首元素
template
T GetHead(LinkList& que)
{
	return que.front->next->data;
}
//元素入隊
template
void EnQueue(LinkList& que,T t)
{
	QNode *p = (QNode*)malloc(sizeof(QNode));
	if(!p) exit(0);
	p->data = t;
	p->next = 0;
	que.rear->next = p;
	que.rear = p;
	que.size++;
}
//元素出隊
template
bool DeQueue(LinkList& que,T & t)
{
	if(que.size==0)
		return false;
	QNode *p = que.front->next;
	que.front->next = p->next;
	que.size--;
	t = p->data;
	free(p);
	return true;
}
//從對頭到隊尾元素遍歷調用visit函數
template
void VisitQueue(LinkList& que,void (*visit)(T &t))
{
	QNode *p = que.front->next;
	while(p != 0)
	{
		(*visit)(p->data);
		p = p->next;
	}
}
//測試函數
template
void Print(T &t)
{
	cout<
void AddOne(T &t)
{
	t++;
}

int main()
{
//創建一個空的隊列
	LinkList queue;
//初始化隊列
	InitQueue(queue);
//元素入隊
	EnQueue(queue,1);
	EnQueue(queue,2);
	EnQueue(queue,3);
	EnQueue(queue,4);
//返回隊列的長度
	cout<<"隊列的長度:  "<);

//返回隊列的隊首元素
	cout<<"隊列的隊首元素:  "<);
//輸出所有元素
	VisitQueue(queue,Print);

//清空隊列
	ClearQueue(queue);
//銷毀隊列
	DestroyQueue(queue);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved