数据结构:链队列
2026/9/12 4:18:53 网站建设 项目流程

1.代码:

#include <stdio.h> #include <malloc.h> typedef struct LinkNode { int data; struct 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(struct LinkNode)); 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; tempNodePtr->next=NULL; paraQueuePtr->rear->next=tempNodePtr; paraQueuePtr->rear=tempNodePtr; //更新尾指针 } // 插入新结点,数据入队 int dequeue(LinkQueuePtr paraQueuePtr) { int resultValue; LinkNodePtr tempNodePtr; if(paraQueuePtr->front==paraQueuePtr->rear)//判断是否为空表 { printf("The queue is empty.\r\n"); return -1; } tempNodePtr=paraQueuePtr->front->next; resultValue=tempNodePtr->data; paraQueuePtr->front->next=paraQueuePtr->front->next->next;//更新头指针 if(paraQueuePtr->rear==tempNodePtr)//判断是否到达尾结点 { paraQueuePtr->rear=paraQueuePtr->front; } 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); } //数据入队再出队 int main() { testLinkQueue(); return 1; }

2.运行结果:

10 30 50 dequeue gets 10 dequeue gets 30 dequeue gets 50 The queue is empty. dequeue gets -1 8

3.体会:

(1)相较于单链表,链队列引入了一个存储指向头结点和指向为结点的结构体,可通过判断头指针和尾指针是否相等来判断链表是否为空表。

(2)链队列可通过改变头指针和尾指针的值来改变队列的长度,数据的入队和出队也是通过这种方式实现。

(3)链队列执行入队和出队时时间复杂度均为O(1),数据的插入和删除相当便捷,提高了效率。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询