首页 > 代码库 > 链表队列的实现

链表队列的实现

队列也是数据结构中比较重要的一种,和栈相反的是,队列是先进先出的,先进队列的可以先出队,跟平时我们排队是一样的。在允许多通道程序运行的计算机系统中,同时几个作业运行。凡是申请输出的作业都从队尾进入队列。

现在用链表实现队列,先定义一个链表结点:

typedef struct QNode
{
	int data;
	QNode *next;
}QNode,*QueuePtr;
给队列定义一个头结点结构体,结构体中包含着两个链表结点指针,第一个指针指向对象的头结点,第二个指针指向对象的尾结点:

typedef struct  
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;
下面编写初始化队列:

bool InitQueue(LinkQueue &Q)
{
	Q.front=Q.rear=NULL;
	return true;
}
下面是压入数据的代码,数据被从队尾压入:

bool EnQueue(LinkQueue &Q,int e)
{
	if(Q.front==NULL)
	{
		Q.front=new QNode;
		Q.front->data=http://www.mamicode.com/e;>然后给出从对头出队的代码,数据从对头取出:

bool DeQueue(LinkQueue &Q,int &e)
{
	if(Q.front==NULL) return false;
	if(Q.front==Q.rear) 
	{
		e=Q.front->data;
		delete Q.front;
		Q.front=NULL;
		Q.rear=NULL;
		return true;
	}
	QueuePtr p=Q.front;
	e=p->data;
	Q.front=p->next;
	delete p;
	return true;
}
下面编写测试代码:

void main()
{
	LinkQueue L;
	InitQueue(L);
	cout<<"please input 5 integers: ";
	int x=0;
	for(int i=0;i<5;i++)
	{
		cin>>x;
		EnQueue(L,x);
	}
	cout<<"out of queue: ";
	while(L.front!=NULL)
	{
		DeQueue(L,x);cout<<x<<" ";
	}
}
测试结果为:









链表队列的实现