码迷,mamicode.com
首页 > 其他好文 > 详细

链表队列的实现

时间:2014-07-27 11:33:22      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:队列 c++ 链表

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

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

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=e;
		Q.front->next=NULL;
		Q.rear=Q.front;
		return true;
	}
	QueuePtr temp=new QNode;
	temp->data=e;
	temp->next=NULL;
	Q.rear->next=temp;
	Q.rear=temp;
	return true;
}
然后给出从对头出队的代码,数据从对头取出:

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<<" ";
	}
}
测试结果为:

bubuko.com,布布扣







链表队列的实现

标签:队列 c++ 链表

原文地址:http://blog.csdn.net/daida2008/article/details/38150773

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!