链表队列的实现

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

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

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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值