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

广州营销网站建设设计东营seo网站推广

广州营销网站建设设计,东营seo网站推广,wordpress新建页面添加导航,江苏建设工程造价管理网站目录 一、什么是队列#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.yutouwan.com/news/444647/

相关文章:

  • 网站建设方案 前台 后台seo新手快速入门
  • 域名过期网站还有用吗网站访问量js
  • 网站推广方案注意事项?软件工程好找工作吗
  • 合肥市建设厅官方网站浙江华企 做网站怎么样
  • 广元市建设局官方网站长沙百度推广开户
  • 北京免费建站公益广告
  • 网站科技感颜色在线识图
  • 网站建设大作业成品免费观看网站
  • asp 网站建设教程免费网站建设方案
  • 长沙网站制作公司推荐政务网站风格
  • 湖南网站建设网络公司wordpress绑定手机版
  • 自己做彩票网站合法吗贵州省房屋和城市建设厅官方网站
  • 企业网站设计与实现网站建设 电子商务 品牌首选IDC
  • 手机网站和电脑网站的区别一级造价工程师注册管理系统
  • 做网站第三方外贸企业邮箱哪家好
  • 外贸网站建设推广方案企业网络规划与设计方案
  • 2017年免费建网站翰诺网站建设
  • c 网站开发环境谷歌绘制的网站
  • 杭州正晖建设工程有限公司网站百度关键词优化软件如何
  • 网站是什么时候开始的下载网站后怎么做
  • 网站建设战略规划的方法福州微信网站
  • 住房城乡建设厅网站iis2008如何做网站
  • 商城网站网站开发常州小程序开发公司
  • 网络工程师中级职称报考条件单页站好做seo吗
  • 2021好心人给个开车的网站找阿里巴巴购买做网站的软件
  • 如何开个公司网站秦皇岛黄金海岸收费吗
  • 网站规划建设与管理维护课后答案网站建设综合推荐
  • 什么样的网站利于百度优化自适应全屏网站
  • 泰兴市淘宝网站建设可以直接用php做网站吗
  • 深圳模板网站建设案例wordpress 多服务器