数据结构:链队列

📅 2026/8/11 18:14:20
数据结构:链队列
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-nextNULL; resultPtr-frontheaderPtr; resultPtr-rearheaderPtr; return resultPtr; } //创建头结点和尾结点并进行初始化 void outputLinkQueue(LinkQueuePtr paraQueuePtr) { LinkNodePtr tempPtrparaQueuePtr-front-next;//找到头结点 while(tempPtr!NULL)//判断是否为到尾结点或判断是否为空表 { printf(%d ,tempPtr-data); tempPtrtempPtr-next;//更新结点 } printf(\r\n); } //输出队列存储的数据 void enqueue(LinkQueuePtr paraQueuePtr,int paraElement) { LinkNodePtr tempNodePtr(LinkNodePtr)malloc(sizeof(struct LinkNode)); //创建新结点 tempNodePtr-dataparaElement; tempNodePtr-nextNULL; paraQueuePtr-rear-nexttempNodePtr; paraQueuePtr-reartempNodePtr; //更新尾指针 } // 插入新结点数据入队 int dequeue(LinkQueuePtr paraQueuePtr) { int resultValue; LinkNodePtr tempNodePtr; if(paraQueuePtr-frontparaQueuePtr-rear)//判断是否为空表 { printf(The queue is empty.\r\n); return -1; } tempNodePtrparaQueuePtr-front-next; resultValuetempNodePtr-data; paraQueuePtr-front-nextparaQueuePtr-front-next-next;//更新头指针 if(paraQueuePtr-reartempNodePtr)//判断是否到达尾结点 { paraQueuePtr-rearparaQueuePtr-front; } tempNodePtrNULL; return resultValue; } //数据出队 void testLinkQueue() { LinkQueuePtr tempQueuePtr; tempQueuePtrinitQueue(); 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 83.体会1相较于单链表链队列引入了一个存储指向头结点和指向为结点的结构体可通过判断头指针和尾指针是否相等来判断链表是否为空表。2链队列可通过改变头指针和尾指针的值来改变队列的长度数据的入队和出队也是通过这种方式实现。3链队列执行入队和出队时时间复杂度均为O1数据的插入和删除相当便捷提高了效率。