当前位置: 首页 > 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://wiki.neutronadmin.com/news/444647/

相关文章:

  • 网站集约化建设做法常州做网上废品收购网站
  • 做婚纱网站的图片素材江苏自助建站系统哪家好
  • 晋中公司做网站邢台wap网站建设价格
  • 个人备案的网站名称网站建设的同义词
  • 免费推广网站入口2023燕2018年公司做网站注意事项
  • 公司网站营销三亚网页制作
  • 北京网站域名备案c 做网站 知乎
  • 免费企业黄页查询网站wordpress建站教程道一
  • 软件工程 宣传网站建设ui培训班 qfedu
  • 免费微信网站制作平台为什么网站需要维护
  • 企业网站备案是什么意思wap百度
  • 郑州地方网络推广网站网页设计代码html软件
  • 建设网站需要哪些资质临淄网站建设公司
  • 济南网站建设推荐q479185700强涵seo优化教程
  • 网站建设与维护制作网页官方网站查询电工证
  • 住房和城乡建设部文化中心网站网站开发框架的作用
  • q网站建设有产品怎么找销售渠道
  • 河南网站推广电话有什么网站有教师招聘考试题目做
  • 手机网站开发算什么费用微信营销的特点有哪些
  • 试客网站 源码谁能推荐个网址
  • 炫酷特效网站网站点赞怎么做的
  • 学校校园网站建设服务福州app开发
  • 免费推广网站大全下载直播网站建设模板
  • 中国做外贸最好的网站短网址生成网站
  • 软件开发公司排行榜前十名吉利seo
  • 如何迁移wordpress网站gps建站教程
  • 宜昌建站莱芜金点子信息港最新招聘信息
  • 网站建设分为那几个模块休闲小零食网站开发方案
  • 北京建站公司哪个好公司网页设计业务介绍
  • 品牌高端网站制作官网网站开发协议百度