c++ 链队列的实现

链队列它有两个指针操作,一个是队首指针,一个是队尾指针,节点删除移动队首指针,节点插入移动队尾指针,同时队列具有先进先出的特点。可用于模拟银行叫号系统

代码:

#include<iostream>
#include<cstdlib>
using namespace std;
//定义队列结点的数据结构
struct QNode
{
	QNode *next;//指针域,指向下一个结点
	double data;//数据域,存储队列信息
};
//定义队列的数据结构---链队列
struct LinkQueue
{
	QNode *front;//队首指针,指向QNode类型结点的指针
	QNode *rear;//队尾指针
};
//构造一个空的队列
void InitQueue(LinkQueue &Q)
{
	QNode *q;
	q = new QNode;//动态申请一个结点的空间
	q->next = NULL;//头结点
	//队首与队尾指针都指向这个结点,指针域为NULL
	Q.front = q;
	Q.rear = q;
}
//判断队列是否为空
int IsEmpty(LinkQueue &Q)
{
	if (Q.rear == Q.front)
		return 0;
	else
		return 1;
}
//队列尾巴插入元素
void EnQueue(LinkQueue &Q, double e)
{
	QNode *p;
	p = new QNode;
	p->next = NULL;
	p->data = e;
	Q.rear->next = p;
	Q.rear = p;
}
//从队列首部删除一个结点
void DeQueue(LinkQueue &Q)
{
	QNode *p;
	double e;
	p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	if (Q.rear == p)
		Q.rear = Q.front;
	delete p;
}
//销毁一个队列
void DestoryQueue(LinkQueue &Q)
{
	while (Q.front)
	{
		Q.rear = Q.front;//从头结点开始,一个一个删除队列结点来释放空间
		delete Q.front;
		Q.front = Q.rear;
	}
}
//输出队列元素
void Display(LinkQueue &Q)
{
	QNode *p;
	p = Q.front->next;
	if (p == NULL)
	{
		cout << "队列为空!" << endl;
	}
	cout << "队列数据:" << endl;
	while (p != NULL)
	{
		cout << p->data << " ";
		p = p->next;
	}
}
int main()
{
	LinkQueue *Q;
	Q = new LinkQueue;
	InitQueue(*Q);
	cout << "开始往链队列里输入数据,-1为结束符" << endl;
	cout << "请输入数据:" << endl;
	double a, x;
	cin >> a;
	while (a != -1)
	{
		EnQueue(*Q, a);
		cin >> a;
	}
	//输出队列元素
	Display(*Q);
	while (!IsEmpty(*Q))
	{
		DeQueue(*Q);
	}
	//释放空间
	delete Q->front;
	delete Q;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值