队列的实现——链队列,顺序队列

 链队列的实现

#include<stdio.h>
/*
	链队列
	q.front指向头结点
	q.front->next指向队头
	q.rear指向队尾
	队尾进,队头出
*/
typedef struct QElmeType {
	char elem[20];
}QElemType;
//链队列的结点类型
//Qnode结点类型 QueuePtr指向结点的指针的类型
typedef struct Qnode {
	QElemType data;
	struct Qnode* next;
}Qnode, * QueuePtr;
//链队列类型
typedef struct {
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

//初始化
/* 1申请头结点,尾指针和头指针都指向头结点
* 2.置头结点指针域为空
*/
int InitQueue(LinkQueue& lq)
{
	lq.front = lq.rear = new Qnode;
	if (!lq.front) return 0;
	lq.front->next = NULL;
	return 1;
}
/*
* 1申请新结点,给新结点赋值,将指针域置空
* 2.将新结点置为尾结点,尾指针指向新的尾结点
* lq.rear指向最后一个结点
* lq.front指向头结点
*/
int EnQueue(LinkQueue& lq, QElemType e)
{
	QueuePtr p = new Qnode;
	if (!p) return 0;
	p->data= e;
	p->next = NULL;
	lq.rear->next = p;//原来最后的结点的next
	lq.rear = p;
	return 1;
}
/*
* 1.判空
*2.p指向待删除的结点
* 3.判断队列中是否只有一个元素
* 4。删
*/
int DeQueue(LinkQueue &lq,QElemType &e)
{
	if (lq.front == lq.rear) return 0;
	QueuePtr p = lq.front->next;
	e = p->data;
	if (lq.rear == p)
		lq.rear = lq.front;
	lq.front->next = p->next;
	delete(p);
	return 1;
}
void DisplayLinkQueue(LinkQueue lq)
{
	QueuePtr p = lq.front->next;
	while (p!=lq.rear->next)
	{
		printf("%s ", p->data.elem);
		p = p->next;
	}
}
int main() {
	LinkQueue lq;
	InitQueue(lq);
	QElemType a = { "aaa" };
	QElemType b = { "bbb" };
	QElemType c = { "ccc" };
	QElemType f;
	EnQueue(lq, a);
	EnQueue(lq, b);
	DeQueue(lq, f);
	EnQueue(lq, c);
	//DeQueue(lq, f);
	DisplayLinkQueue(lq);
	return 0;
}

顺序队列的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值