千家信息网

C语言如何实现链队列

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章将为大家详细讲解有关C语言如何实现链队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限
千家信息网最后更新 2025年02月07日C语言如何实现链队列

这篇文章将为大家详细讲解有关C语言如何实现链队列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制。

头文件声明

#include #include /** * 队列的链式存储实现 * [带头结点的单链表] * [-类似于链栈,队列的链式存储实现也不会出现队满的情况] *///数据类型typedef int ElemType;//定义节点typedef struct SqQueueNode{ ElemType data;//数据域 struct SqQueueNode* next; //指针域}SqQueueNode;//定义队列typedef struct SqQueueLink{ SqQueueNode* front;//队头指针 SqQueueNode* rear;//队尾指针}SqQueueLink;//初始化队列void InitQueueLink(SqQueueLink* q);//判断队空int EmptyQueueLink(SqQueueLink q);//入队操作void EnQueueLink(SqQueueLink *q,ElemType e);//出队操作void DeQueueLink(SqQueueLink q,ElemType *e);//获取队列长度int LengthQueueLink(SqQueueLink q);//打印队列void printSqQueueLink(SqQueueLink q);//获取队头元素void GetHeadLink(SqQueueLink q,ElemType* e);

函数实现

#include "SqQueueLink.h"//初始化队列void InitQueueLink(SqQueueLink* q){ //创建头结点 SqQueueNode* pNode=(SqQueueNode*)malloc(sizeof(SqQueueNode)); pNode->next=NULL;//指针域置空[数据域不存储任何内容] //初始化队列-[使队头指针和队尾指针指向头结点] q->front=pNode; q->rear=pNode;}//判断队空int EmptyQueueLink(SqQueueLink q){ return q.front==q.rear;}//入队操作void EnQueueLink(SqQueueLink *q,ElemType e){ //创建新的数据元素节点 SqQueueNode* newNode=(SqQueueNode*)malloc(sizeof(SqQueueNode)); newNode->data=e;//指定数据域 newNode->next=NULL;//指针域置空 //入队操作[从队尾入队] q->rear->next=newNode; q->rear=newNode;}//出队操作void DeQueueLink(SqQueueLink q,ElemType *e){ //[从队头出队] SqQueueNode* p=NULL; //是否队空 if (q.front==q.rear)  return; p=q.front->next;//获取首节点 *e=p->data; //使队头指针指向下一节点 q.front->next=p->next; //如果原队列中只有一个节点,要将队尾指针和队头指针均指向同一节点-置空 if (q.rear==p)  q.rear=q.front; //释放原首节点 free(p);}//获取队列长度int LengthQueueLink(SqQueueLink q){ //辅助指针 SqQueueNode* pNode=q.front->next; int count=0; //获取队列长度 while (pNode!=q.rear) {  count++;  pNode=pNode->next; } return count;}//打印队列void printSqQueueLink(SqQueueLink q){ //辅助指针 SqQueueNode* p=q.front->next; while (p!=q.rear) {  printf("%4d",p->data);  p=p->next; } printf("\n");}//获取队头元素void GetHeadLink(SqQueueLink q,ElemType* e){ //判断队列是否为空 if (q.front==q.rear)  return; //获取队头元素的值 *e=q.front->next->data;}

函数测试

#include "SqQueueLink.h"int main(int argc,char** argv){ //声明队列 SqQueueLink sqLink; int i; ElemType data; //初始化队列 InitQueueLink(&sqLink); //判断队列是否为空 printf("is Empty?%d\n",EmptyQueueLink(sqLink)); //入队操作 for (i=0;i<=20;i++) {  EnQueueLink(&sqLink,i+1); } //判断队列是否为空 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink)); //打印队列 printSqQueueLink(sqLink); //出队列操作 DeQueueLink(sqLink,&data); //判断队列是否为空 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink)); //打印队列 printSqQueueLink(sqLink); //获取队头元素的值 GetHeadLink(sqLink,&data); printf("the first node value is %d\n",data); return 0;}

关于"C语言如何实现链队列"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0