数据结构 | 链式队列

一、数据结构定义

typedef char QueueType;
typedef struct QueueNode{
	QueueType data;
	struct QueueNode* next;
}QueueNode;

typedef struct {
	QueueNode* front, * rear;
}LinkQueue;

二、方法概览

void InitQueue(LinkQueue* Q);//初始化队列
int IsQueueEmpty(LinkQueue* Q);//判断队列是否为空
void EnQueue(LinkQueue* Q, QueueType data);//入队
int DeQueue(LinkQueue* Q, QueueType* data);//出队

三、方法详解

//初始化队列
void InitQueue(LinkQueue* Q) {
	Q->front = Q->rear = (QueueNode*)malloc(sizeof(QueueNode)); // 分配头节点
	Q->front->next = NULL; //初始化为空
}
//判断队列是否为空
int IsQueueEmpty(LinkQueue* Q) {
	if (Q->front == Q->rear) return 1;
	else return 0;
}
//入队
void EnQueue(LinkQueue* Q, QueueType data) {
	QueueNode* news = (QueueNode*)malloc(sizeof(QueueNode));
	news->data = data; // 创建新节点,插入队列尾部 
	news->next = NULL;
	Q->rear->next = news;
	Q->rear = news;
}
//出队
int DeQueue(LinkQueue* Q, QueueType* data) {
	if (Q->front == Q->rear) return 0;
	QueueNode* del = Q->front->next;
	*data = del->data;
	Q->front->next = del->next;
	if (Q->rear == del)
		Q->rear = Q->front; // 若原队列只有一个节点,删除后变空 
	free(del);
	return 1;
}

四、运行结果

        main方法代码如下:

int main() {
	LinkQueue Q;
	InitQueue(&Q);
	EnQueue(&Q, 'a');
	EnQueue(&Q, 'b');
	EnQueue(&Q, 'c');

	char x;
	DeQueue(&Q, &x);
	printf("%c", x);
	DeQueue(&Q, &x);
	printf("%c", x);
	DeQueue(&Q, &x);
	printf("%c", x);
}

       运行结果如下:

 五、源代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef char QueueType;
typedef struct QueueNode{
	QueueType data;
	struct QueueNode* next;
}QueueNode;

typedef struct {
	QueueNode* front, * rear;
}LinkQueue;

void InitQueue(LinkQueue* Q);//初始化队列
int IsQueueEmpty(LinkQueue* Q);//判断队列是否为空
void EnQueue(LinkQueue* Q, QueueType data);//入队
int DeQueue(LinkQueue* Q, QueueType* data);//出队

//初始化队列
void InitQueue(LinkQueue* Q) {
	Q->front = Q->rear = (QueueNode*)malloc(sizeof(QueueNode)); // 分配头节点
	Q->front->next = NULL; //初始化为空
}
//判断队列是否为空
int IsQueueEmpty(LinkQueue* Q) {
	if (Q->front == Q->rear) return 1;
	else return 0;
}
//入队
void EnQueue(LinkQueue* Q, QueueType data) {
	QueueNode* news = (QueueNode*)malloc(sizeof(QueueNode));
	news->data = data; // 创建新节点,插入队列尾部 
	news->next = NULL;
	Q->rear->next = news;
	Q->rear = news;
}
//出队
int DeQueue(LinkQueue* Q, QueueType* data) {
	if (Q->front == Q->rear) return 0;
	QueueNode* del = Q->front->next;
	*data = del->data;
	Q->front->next = del->next;
	if (Q->rear == del)
		Q->rear = Q->front; // 若原队列只有一个节点,删除后变空 
	free(del);
	return 1;
}

int main() {
	LinkQueue Q;
	InitQueue(&Q);
	EnQueue(&Q, 'a');
	EnQueue(&Q, 'b');
	EnQueue(&Q, 'c');

	char x;
	DeQueue(&Q, &x);
	printf("%c", x);
	DeQueue(&Q, &x);
	printf("%c", x);
	DeQueue(&Q, &x);
	printf("%c", x);
}

猜你喜欢

转载自blog.csdn.net/sun80760/article/details/130850529