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安全错误
数据库的锁怎样保障安全
竞技世界网络技术公司怎么样
网络安全保障中心
2022春季数据库原理答案
长春民宿软件开发
网络安全教育哪个机构好
软件开发技术团队职责
网络安全路由器排行
怀旧服轮回服服务器名字
我的世界饼干服务器
组装一台电脑做为服务器
桌面共享软件开发怎样快速
里乐网络技术有限公司
无锡软件开发平均工资
软件开发原型确认
win ftp服务器
新思维网络技术有限公司
工控机软件开发费用
互联网科技迷
公安部网络安全局职责
日期存入数据库
河北新一代软件开发价格优惠
app修改数据库地址
nas和ecs云服务器区别
最新省市区联动数据库
威海安卓软件开发解决方案
打开高拍仪与服务器的连接被重置
网络安全法 快
简论网络安全
网络安全态势感知系统方案
网络技术与应用app