赞
踩
队列结点
- typedef struct LinkNode{
-
- int data;
- LinkNode* next;
-
- }*LinkNodePtr;
- typedef struct LinkQueue{
-
- LinkNodePtr front;
- LinkNodePtr rear;
-
- }*LinkQueuePtr;
初始化链队列和结点
- LinkQueuePtr initQueue(){
-
- LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(LinkQueue));
-
- //创建头结点
- LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(LinkNode));
-
- headerPtr->next = NULL;
- headerPtr->data = -1;
- 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(LinkNodePtr));
- tempNodePtr->data = paraElement;
- tempNodePtr->next = NULL;
-
- //在队尾添加结点
- paraQueuePtr->rear->next = tempNodePtr;
-
- //更新队尾
- paraQueuePtr->rear = tempNodePtr;
- }
删除队列结点并返回对应元素
- int dequeue(LinkQueuePtr paraQueuePtr){
-
- //判断队列是否为空
- if(paraQueuePtr->front == paraQueuePtr->rear){
- printf("The queue is empty.\r\n");
- return -1;
- }
-
- int resultValue;
- LinkNodePtr tempNodePtr;
-
- //删除队头元素
- tempNodePtr = paraQueuePtr->front->next;
- resultValue = tempNodePtr->data;
- paraQueuePtr->front->next = paraQueuePtr->front->next->next;
-
- //判断队列是否只有一个元素
- if(paraQueuePtr->rear == tempNodePtr){
- paraQueuePtr->rear = paraQueuePtr->front;
- }
-
- //释放删除结点的空间
- free(tempNodePtr);
- tempNodePtr = NULL;
-
- //返回对应元素
- return resultValue;
- }
tempQueuePtr = initQueue();
void enqueue(LinkQueuePtr paraQueuePtr, int paraElement)
enqueue(tempQueuePtr, 10);
enqueue(tempQueuePtr, 30);
enqueue(tempQueuePtr, 50);
printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
- //
- // main.c
- //
- // Created on 2022/5/16.
- //
-
-
- #include <stdio.h>
- #include <malloc.h>
-
- //队列结点
- typedef struct LinkNode{
-
- int data;
- LinkNode* next;
-
- }*LinkNodePtr;
-
- //链队列
- typedef struct LinkQueue{
-
- LinkNodePtr front;
- LinkNodePtr rear;
-
- }*LinkQueuePtr;
-
- //初始化链队列和结点
- LinkQueuePtr initQueue(){
-
- LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(LinkQueue));
-
- //创建头结点
- LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(LinkNode));
-
- headerPtr->next = NULL;
- headerPtr->data = -1;
- 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(LinkNodePtr));
- tempNodePtr->data = paraElement;
- tempNodePtr->next = NULL;
-
- //在队尾添加结点
- paraQueuePtr->rear->next = tempNodePtr;
-
- //更新队尾
- paraQueuePtr->rear = tempNodePtr;
- }
-
- //删除队列结点并返回对应元素
- int dequeue(LinkQueuePtr paraQueuePtr){
-
- //判断队列是否为空
- if(paraQueuePtr->front == paraQueuePtr->rear){
- printf("The queue is empty.\r\n");
- return -1;
- }
-
- int resultValue;
- LinkNodePtr tempNodePtr;
-
- //删除队头元素
- tempNodePtr = paraQueuePtr->front->next;
- resultValue = tempNodePtr->data;
- paraQueuePtr->front->next = paraQueuePtr->front->next->next;
-
- //判断队列是否只有一个元素
- if(paraQueuePtr->rear == tempNodePtr){
- paraQueuePtr->rear = paraQueuePtr->front;
- }
-
- //释放删除结点的空间
- free(tempNodePtr);
- tempNodePtr = NULL;
-
- //返回对应元素
- 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);
- }
-
- //main
- int main(){
- testLinkQueue();
- return 0;
- }
队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。