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语言如何实现链队列"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
队列
指针
节点
元素
数据
存储
篇文章
结点
长度
链式
语言
内容
函数
指向
更多
辅助
不错
复杂
实用
只有
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
陕西先通网络技术学校pte
服务器安装iis协议
自搭服务器干嘛用
战略支援部队计算机网络技术
php遍历数据库并存储
想做软件开发要做什么
杨浦区软件开发技术服务哪家好
逆向与网络安全
常用软件开发方法有哪些
服务器维保总结报告
忻州网络技术发展
网络安全知识四字句
崩坏三什么时候服务器互通
软件开发如何写需求分析
广州腾网互联网科技有限公司
新浪云免费服务器
上海培训软件开发工程师
数据库会员连接错误
中山软件开发去哪
温州软件开发驻场流程
生产资源 数据库模型设计
php遍历数据库并存储
网络技术服务外包合同范本
linux数据库管理
网络技术发财
思瑞网络技术
商品管理数据库设计思路
网络安全三带头三亲自
云游互联网科技有限公司
wincc的各种数据库