链式队列

链式队列的一些操作
void enQueue(LinkQueue *q,DataType e);//入队
void initQueue(LinkQueue *q);//初始化
bool QueueEmpty(LinkQueue *q);//判断队列是否为空
void clearQueue(LinkQueue *q);//清除队列所有元素
int queueLength(LinkQueue *q);//求队列的长度
void getHead(LinkQueue *q,DataType *e);//获取队头元素
void deQueue(LinkQueue *q,DataType *e);//出队

链式队列的存储结构

typedef int DataType;
typedef struct QNode{ // 节点 
	DataType data;
	struct QNode *next;
}QNode;
typedef struct { // 队的结构体 
	QNode *front;//头指针 
	QNode *rear;//尾指针 
	int count;
}LinkQueue;

void enQueue(LinkQueue *q,DataType e);//入队

void enQueue(LinkQueue *q,DataType e)//入队
{
	QNode *p = (QNode *)malloc(sizeof(QNode));
	p->data = e;
	p->next = NULL;
	if(QueueEmpty(q)){
		q->front = q->rear = p;
	}else {
		q->rear->next = p;
		q->rear = p;	
	}
	q->count++;
}

void initQueue(LinkQueue *q);//初始化

void initQueue(LinkQueue *q)//初始化 
{
	if(!QueueEmpty(q)){
		clearQueue(q);
	}else {
		q->front = q->rear = NULL;
		q->count = 0;
	}       
}

bool QueueEmpty(LinkQueue *q);//判断队列是否为空

bool QueueEmpty(LinkQueue*q)//判断队列是否为空
{
	if(q->front == NULL) return true;
	else return false;
}

void clearQueue(LinkQueue *q);//清除队列所有元素

void clearQueue(LinkQueue *q)//清除队列所有元素 
{
	QNode *p = q->front;
	while(p){
		QNode *p1 = p;
		p = p->next;
		free(p1);
	}
	q->front = q->rear = NULL;
	q->count = 0;
}

int queueLength(LinkQueue *q);//求队列的长度

int queueLength(LinkQueue *q)//求队列的长度
{
	return q->count; 
}

void getHead(LinkQueue *q,DataType *e);//获取队头元素

void getHead(LinkQueue *q,DataType *e)//获取队头元素
{
	if(!QueueEmpty(q)){
		*e = q->front->data;
	}
}

void deQueue(LinkQueue *q,DataType *e);//出队

void deQueue(LinkQueue *q,DataType *e)//出队
{
	if(!QueueEmpty(q)){
		QNode *p = q->front;
		*e = p->data;
		q->front = q->front->next;
		free(p);
		q->count--;	
	}
}

完整代码

#include <bits/stdc++.h>
typedef int DataType;
typedef struct QNode{ // 节点 
	DataType data;
	struct QNode *next;
}QNode;
typedef struct { // 队的结构体 
	QNode *front;//头指针 
	QNode *rear;//尾指针 
	int count;
}LinkQueue;


void enQueue(LinkQueue *q,DataType e);//入队 
void initQueue(LinkQueue *q);//初始化 
bool QueueEmpty(LinkQueue *q);//判断队列是否为空 
void clearQueue(LinkQueue *q);//清除队列所有元素
int queueLength(LinkQueue *q);//求队列的长度 
void getHead(LinkQueue *q,DataType *e);//获取队头元素 
void deQueue(LinkQueue *q,DataType *e);//出队 

int main()
{
	LinkQueue lq;
	lq.front = NULL; //必须有 
	initQueue(&lq);
	if(QueueEmpty(&lq)){
		printf("空\n");
	}else printf("不空\n");
	enQueue(&lq,10);
	enQueue(&lq,3);
	enQueue(&lq,8);
	enQueue(&lq,5);
	printf("%d\n",queueLength(&lq)); //求队列的长度 
	for(int i = 0;i < 3;i++){
		int n;
		deQueue(&lq,&n);
		printf("%d\n",n);
	}
	clearQueue(&lq);
	if(QueueEmpty(&lq)){
		printf("空\n");
	}else printf("不空\n");	
	return 0;
}

void deQueue(LinkQueue *q,DataType *e)//出队
{
	if(!QueueEmpty(q)){
		QNode *p = q->front;
		*e = p->data;
		q->front = q->front->next;
		free(p);
		q->count--;	
	}
}
void getHead(LinkQueue *q,DataType *e)//获取队头元素
{
	if(!QueueEmpty(q)){
		*e = q->front->data;
	}
} 
int queueLength(LinkQueue *q)//求队列的长度
{
	return q->count; 
} 
void initQueue(LinkQueue *q)//初始化 
{
	if(!QueueEmpty(q)){
		clearQueue(q);
	}else {
		q->front = q->rear = NULL;
		q->count = 0;
	}       
}
void enQueue(LinkQueue *q,DataType e)//入队
{
	QNode *p = (QNode *)malloc(sizeof(QNode));
	p->data = e;
	p->next = NULL;
	if(QueueEmpty(q)){
		q->front = q->rear = p;
	}else {
		q->rear->next = p;
		q->rear = p;	
	}
	q->count++;
}
bool QueueEmpty(LinkQueue*q)//判断队列是否为空
{
	if(q->front == NULL) return true;
	else return false;
} 
void clearQueue(LinkQueue *q)//清除队列所有元素 
{
	QNode *p = q->front;
	while(p){
		QNode *p1 = p;
		p = p->next;
		free(p1);
	}
	q->front = q->rear = NULL;
	q->count = 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值