链队列work

本文详细介绍了链队列的数据结构、初始化、打印、节点增添和删除的操作,包括`initQueue`、`outputLinkQueue`、`enqueue`和`dequeue`函数。通过实例展示了如何使用C语言创建、维护并处理链队列。
摘要由CSDN通过智能技术生成

链队列

链队列的节点

typedef struct LinkNode {
	int data;
	LinkNode *next;
} *LinkNodePtr;

链队列

typedef struct LinkQueue {
	LinkNodePtr front;
	LinkNodePtr rear;
} *LinkQueuePtr;

生成链队列


LinkQueuePtr initQueue() {
	//定义链表的头指针 和 尾指针

	LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue));
 
	//定义链表 申请空间

	LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof( LinkNodePtr));
	//初始化
	headerPtr->next = NULL;
	//指向链表
	resultPtr->front = headerPtr;
	resultPtr->rear = headerPtr;
	return resultPtr;
} 

打印


void outputLinkQueue(LinkQueuePtr paraQueuePtr) {
	//申请临时变量  复制头指针 然后循环往后打印

	LinkNodePtr tempPtr = paraQueuePtr->front->next;

	while (tempPtr != NULL) {

		printf("%d ", tempPtr->data);
		tempPtr = tempPtr->next;
	} 

	printf("\r\n");
} 

增添节点

(尾巴添加)


void enqueue(LinkQueuePtr paraQueuePtr, int paraElement) {
	 
	//创建新节点

	LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
	//给值
	tempNodePtr->data = paraElement;
	//next == NULL;

	tempNodePtr->next = NULL;
	//这里是在尾巴加上一个节点

	//连上尾巴
	paraQueuePtr->rear->next = tempNodePtr;


	//尾指针重新指向尾巴
	paraQueuePtr->rear = tempNodePtr;
} 

删除节点


int dequeue(LinkQueuePtr paraQueuePtr) {
	int resultValue;
	LinkNodePtr tempNodePtr;

 
	//if 判断链表是否为空

	if (paraQueuePtr->front == paraQueuePtr->rear) {
		printf("The queue is empty.\r\n");
		return -1;
	} 

 
	//复制头节点

	tempNodePtr = paraQueuePtr->front->next;
	//保存其值以返回

	resultValue = tempNodePtr->data;

	//让头节点的next指向下一个节点的下一个节点
	//这样下一个节点就没了

	paraQueuePtr->front->next = paraQueuePtr->front->next->next;

	//如果只有一个节点  就没有上述操作的必要了
	//我觉得放上面好一点 但是都这样放了我也就表达表达
	if (paraQueuePtr->rear == tempNodePtr) {
		paraQueuePtr->rear = paraQueuePtr->front;
	} 

	//防止出现野指针

	tempNodePtr = NULL;


	//Return.
	return resultValue;
}

测试代码`

void testLinkQueue() {
	LinkQueuePtr tempQueuePtr;
	tempQueuePtr = initQueue();
	enqueue(tempQueuePtr, 10);
	enqueue(tempQueuePtr, 30);
	enqueue(tempQueuePtr, 50);

	outputLinkQueue(tempQueuePtr);

	printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
	printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
	printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
	printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));

	enqueue(tempQueuePtr, 8);
	outputLinkQueue(tempQueuePtr);
} 

 
int main() {
	testLinkQueue();
	return 1;
} 

运行截图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值