当前位置: 首页 > news >正文

新丰县建设局网站广州制作网站公司简介

新丰县建设局网站,广州制作网站公司简介,免费做调查问卷的网站,免费学生网页制作成品代码目录 一、什么是队列#xff1f; 二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化队列 2.2入队 2.3队列元素个数和判空 2.4取队头元素和队尾元素 2.5出队 2.6摧毁队列 2.7测试接口 三、所有代码 1.…目录 一、什么是队列 二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化队列 2.2入队 2.3队列元素个数和判空 2.4取队头元素和队尾元素 2.5出队 2.6摧毁队列 2.7测试接口 三、所有代码 1.接口实现 2.队列的头文件 3.测试代码 一、什么是队列 队列是一种特殊的线性表特殊之处在于它只允许在表的前端front进行删除操作而在表的后端rear进行插入操作和栈一样队列是一种操作受限制的线性表。进行插入操作的端称为队尾进行删除操作的端称为队头。可以形象地将队列想象成生活中的挤地铁在挤地铁的时候我们只能够从后面进入队伍出也只能够从队头出到地铁。总结队列是只支持尾插头删的线性表。  二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 在开始之前我们最好创建三个文件一个放栈函数的实现一个用来测试栈函数最后一个放栈函数的引用和头文件的引用这样到时侯想要使用栈函数直接包这一个头文件即可。创建完之后呈现出来的效果与下图差不多即可。 1.2结构体的创建和头文件的引用 由于队列需要头删使用数组实现的话最终呈现出来的效率十分低下我们这里使用链表的方式实现使用链表来实现线性表头和尾是经常要用到的同样队列的长度也很重要。因此我们创建两个结构体变量一个结构体变量为链表的节点一个结构体变量存放链表的头和尾以及队列的长度。 最终呈现出来的结果是这样的  #pragma once #includestdio.h #includestdlib.h #includeassert.h typedef int QueDateType; //到时修改类型时只用改这里的一个就可以不需要一个个修改 //同样这也是为了和单一的int作区分 typedef struct QueueListNode {struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据 }Quenode; typedef struct QueueInformation {Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数 }Que; 2.接口的实现 2.1初始化队列 没什么好说的将队列的两个指针变为空存放个数的变量变为0即可 void init_queue(Que* q1) {assert(q1);//q1存放的是结构体的指针不应为空为空操作不了q1-head NULL;q1-tail NULL;q1-sz 0; } 2.2入队 void push_queue(Que* q1, QueDateType x) {assert(q1);//创建一个新节点并初始化Quenode* newnode (Quenode*)malloc(sizeof(Quenode)); if (newnode NULL){perror(push_queue);exit(-1);}newnode-next NULL;newnode-data x;if (q1-head NULL)//如果头为空意味着还没有节点单独处理{q1-head q1-tail newnode;}else{q1-tail-next newnode;//原来的尾链接上新的尾q1-tail newnode;//将尾更新}q1-sz; } 2.3队列元素个数和判空 可能有小伙伴不明白为什么又要设计这两个接口因为这两个信息都可以直接通过队列的结构体获得好像没什么作用啊。设计这两个接口并使用它们而不是直接通过结构体的内容来判断是因为当我们的需求发生改变了所创建的结构体可能也会跟着修改可能提取的方式会发生一些改变   如果我们在使用队列的时候已经直接通过结构体的内容进行了多次的判断那么我们要修改起来要修改多次很不方便这样做的好处就是只用修改一次即可 队列元素个数 int size_queue(Que* q1) {assert(q1);return q1-sz; } 判空 int empty_queue(Que* q1) {assert(q1);return q1-sz 0;//相等即为空返回1(真)//不相等即为非空返回0(假) } 2.4取队头元素和队尾元素 这两个操作很相似唯一要注意的就是为空的时候不能取 取队头元素 QueDateType queue_front(Que* q1) {assert(q1);assert(!empty_queue(q1));//队列不能是空return q1-head-data; } 取队尾元素  QueDateType queue_back(Que* q1) {assert(q1);assert(!empty_queue(q1));//队列不能是空return q1-tail-data; } 2.5出队 需要注意的是不能够删除空队列其次我们删除到最后一个节点时要单独处理 void pop_queue(Que* q1) {assert(q1);assert(!empty_queue(q1));if (q1-head-next NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1-head);q1-head NULL;q1-tail NULL;}else{Quenode* next q1-head-next;free(q1-head);q1-head next;}q1-sz--; } 2.6摧毁队列 void destroy_queue(Que* q1) {assert(q1);Quenode* cur q1-head;while (cur){Quenode* next cur-next;free(cur);cur next;} } 2.7测试接口 测试代码 #includequeue.h void test1() {Que q1;init_queue(q1);push_queue(q1, 1);push_queue(q1, 2);push_queue(q1, 3);push_queue(q1, 4);push_queue(q1, 5);printf(%d\n, queue_back(q1));while (!empty_queue(q1)){printf(%d , queue_front(q1));pop_queue(q1);}destroy_queue(q1); } int main() {test1(); } 测试结果 三、所有代码 1.接口实现 #includequeue.h void init_queue(Que* q1) {assert(q1);//q1存放的是结构体的指针不应为空为空操作不了q1-head NULL;q1-tail NULL;q1-sz 0; } void push_queue(Que* q1, QueDateType x) {assert(q1);//创建一个新节点并初始化Quenode* newnode (Quenode*)malloc(sizeof(Quenode)); if (newnode NULL){perror(push_queue);exit(-1);}newnode-next NULL;newnode-data x;if (q1-head NULL)//如果头为空意味着还没有节点单独处理{q1-head q1-tail newnode;}else{q1-tail-next newnode;//原来的尾链接上新的尾q1-tail newnode;//将尾更新}q1-sz; } int size_queue(Que* q1) {assert(q1);return q1-sz; } int empty_queue(Que* q1) {assert(q1);return q1-sz 0;//相等即为空返回1(真)//不相等即为非空返回0(假) } QueDateType queue_front(Que* q1) {assert(q1);assert(!empty_queue(q1));//队列不能是空return q1-head-data; } QueDateType queue_back(Que* q1) {assert(q1);assert(!empty_queue(q1));//队列不能是空return q1-tail-data; } void pop_queue(Que* q1) {assert(q1);assert(!empty_queue(q1));if (q1-head-next NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1-head);q1-head NULL;q1-tail NULL;}else{Quenode* next q1-head-next;free(q1-head);q1-head next;}q1-sz--; } void destroy_queue(Que* q1) {assert(q1);Quenode* cur q1-head;while (cur){Quenode* next cur-next;free(cur);cur next;} } 2.队列的头文件 #pragma once #includestdio.h #includestdlib.h #includeassert.h typedef int QueDateType; //到时修改类型时只用改这里的一个就可以不需要一个个修改 //同样这也是为了和单一的int作区分 typedef struct QueueListNode {struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据 }Quenode; typedef struct QueueInformation {Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数 }Que; void init_queue(Que* q1); void push_queue(Que* q1, QueDateType x); void pop_queue(Que* q1); int size_queue(Que* q1); int empty_queue(Que* q1); QueDateType queue_front(Que* q1); QueDateType queue_back(Que* q1); void destroy_queue(Que* q1); 3.测试代码 #includequeue.h void test1() {Que q1;init_queue(q1);push_queue(q1, 1);push_queue(q1, 2);push_queue(q1, 3);push_queue(q1, 4);push_queue(q1, 5);printf(%d\n, queue_back(q1));while (!empty_queue(q1)){printf(%d , queue_front(q1));pop_queue(q1);}destroy_queue(q1); } int main() {test1(); } 好了今天的分享到这里就结束了感谢各位友友的来访祝各位友友前程似锦O(∩_∩)O
http://www.dnsts.com.cn/news/55891.html

相关文章:

  • 北京网站软件制作教手工做衣服的网站
  • 免费网站根目录会计培训网站
  • 深圳网站关键词优化公司哪家企业网页制作好
  • 做薪酬调查有哪些网站网站解析记录值
  • 带紫色箭头做网站软件做网站用啥语言
  • 成都百度网站制作妙趣网 通辽网站建设
  • seo的网站特征做网站需学什么
  • 建网站公司专业如何做网站子页
  • 海外网站建设网站建设英文参考文献
  • 视频直播app开发网站seo搜索引擎优化工作内容
  • 微盟网站模板个人做企业网站
  • 网站建设对企业的作用东营城镇建设规划网站
  • 刷链接浏览量网站网站开发现在主要用什么语言
  • 互联网网站建设企业采购平台
  • WordPress离线编写企业seo顾问公司
  • 简述网络营销推广的方式都有哪些冯耀宗seo
  • 网站推广方法汇总哪家公司建网站好
  • 台州网站建设技术支持做模具的网站
  • 潇湘书院网站建设的目标建立个人网站的目的
  • .net做的大型网站吗长春建筑网站
  • 网站建设 目的2023年网络推广方法
  • 湖北seo排名诊断合肥网站排名优化公司
  • 建设小说网站小说源网站开发语言用什么好
  • 亿客搜网站建设网站建设报价单表格
  • dw网站建设流程做网站要学c语言
  • 服务公司理念wordpress优化图片
  • 基础展示型网站和cms如何搭建电子商务平台
  • 向客户介绍网站建设的话本网站广告的图片怎么做
  • 网站地图怎么做的网站设计制作服务好态度好
  • 商城网站 搭建国内酒店网站建设