C语言如何实现一个链表队列
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,本篇内容主要讲解"C语言如何实现一个链表队列",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言如何实现一个链表队列"吧!C语言数据结构链表队列的实现1.
千家信息网最后更新 2024年11月18日C语言如何实现一个链表队列
本篇内容主要讲解"C语言如何实现一个链表队列",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言如何实现一个链表队列"吧!
C语言数据结构链表队列的实现
1.写在前面
队列是一种和栈相反的,遵循先进先出原则的线性表。
本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码。
分解代码没有包含在内的代码如下:
#include#include #define OK 1#define ERROR 0typedef int QElemtype;typedef int status;
2.代码分解
2.1对队列和节点的结构定义
typedef struct QNode //对节点的结构定义{ QElemtype data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ //对队列的结构定义 QueuePtr head; QueuePtr rear;}LinkQueue;
|说明:
1.队列的节点首先要保存元素,其次要指引下一个元素的位置,这是实现线性存储的基础也是关键。
2.队列中定义了两个节点指针,第一个 head 用来表示 队头,允许移除元素。与之相反的是 rear 用来表示 队尾,允许插入元素。
3.为什么这么定义?
2.2 初始化和回收队列
status initQueue(LinkQueue* que) //初始化队列{ que->head=que->rear=(QueuePtr)malloc(sizeof(QNode)); if(!que->head) //这段代码对队列里面的用户自定义数据类型进行了初始化 return ERROR; return OK;}status destoryQueue(LinkQueue* que) //回收队列{ while(que->head) { que->rear = que->head->next; free(que->head); que->head=que->rear; } return OK;}
|说明:
1.初始化很简单,就是为队列内的两个重要节点分配空间。
2.队列的回收,思路很巧妙
循环条件是 队列的队头节点 head 存在 { 此处rear起到临时变量的作用,不断指向head->next的同时,释放head。这样处理可以干净的把包含头节点在内的队列清理干净。 }
2.3 添加和删除元素
status enQueue(LinkQueue* que,QElemtype e){ QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); if(!p) //若未能申请到空间,便退出 return ERROR; p->data=e; p->next=NULL; que->rear->next = p; que->rear=p; return OK;}status delQueue(LinkQueue* que,QElemtype *t){ if(que->rear==que->head) return ERROR; //队列为空 QueuePtr p = que->head->next; *t=p->data; que->head->next=p->next; if(que->rear==p) //这个判断是 确保在清空队列的时候,让rear指针归位。 que->rear=que->head; free(p); return OK;}
|说明:
1.添加元素的思路:新建一个节点,并给其赋值(data,next)。让队列的尾部相接此节点,同时更新尾部节点。
2.删除元素的思路:首先判断节点是否为空?然后用临时节点从队头获取到第一个节点,即head->next,(我们的head节点并不保存元素),获取其地址后,更新队头节点所指的第一个节点获取值后释放该地址空间。
2.4 遍历队列和测试方法
status viewQueue(LinkQueue* que){ if(que->rear == que->head) return ERROR; QueuePtr p =que->head->next; while(p) { printf("val:%d",p->data); p=p->next; } return OK;}int main(int argc, char **argv){ LinkQueue myQueue; initQueue(&myQueue); for(int i=1;i<=5;i++) enQueue(&myQueue,i); viewQueue(&myQueue); QElemtype a; for(int i=0;i<5;i++) { delQueue(&myQueue,&a); printf("%d\n",a); } destoryQueue(&myQueue); printf("fuck !"); return 0;}
到此,相信大家对"C语言如何实现一个链表队列"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
队列
节点
元素
代码
语言
结构
思路
数据
空间
干净
两个
内容
同时
尾部
指针
数据结构
方法
线性
学习
更新
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
构建日志集中管理服务器
msde数据库剩一点不动
mc好玩的服务器游戏
惠普服务器g380电源启动方法
工业测试软件开发
浦东新区数据软件开发有哪些
软件开发构建机
一秒解读网络安全法
计算机网络技术要学ps吗
金仓安全数据库
互联网科技知识竞赛
各网络安全产品应用场景
公司软件开发需要哪些资质
罗源租房网络安全
7种网络安全误区
江西生鲜园区配送软件开发
四川web前端软件开发靠谱吗
漏损检测 数据库
网络安全咨询与管理
领接表数据库
网络技术保障考试
计算机网络技术意向就业岗位
提高领导干部网络安全保障能力
国家网络安全创新发展
ssh手机管理服务器
不同ip地址怎么共享服务器
工业园区电子网络技术哪个好
江苏省网络安全实践案例
什么是好的软件开发
网络安全清单平台