当前位置: 首页 > 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/66608.html

相关文章:

  • 无棣网站制作石家庄建设局网站
  • 做追星网站效果图手机ps网页版在线制作
  • 金华市住房和城乡建设局网站湖北百度推广公司
  • 营销型的网站vi设计师主要是做什么的呢
  • 网站建设新方式简单省时桂林象鼻山的传说
  • 驻马店市网站建设英迈寰球网站建设
  • 乐辰科技网站建设网站建设价格明细表
  • 网站建设的基本流程可分为织梦视频资讯网站源码
  • 完整个人网站开发案例微信如何做有趣的短视频网站
  • 怎么做单页网站wordpress文章页样式
  • 微擎pc网站开发福清福州网站建设
  • phpcms 下载网站模板广东深圳龙岗区区号
  • 织梦文章title怎么显示网站title棋牌小程序制作开发
  • 湖北优化网站建设蓝天下品牌运营业务展示
  • 烟台网站开发网站建设什么是开发实施实施
  • 为网站设计手机版织梦珠宝网站模板
  • wordpress 威联通上海抖音seo公司
  • 做准考证的网站报名网站开发多钱
  • 营销型科技网站建设西安网站建设开发查派
  • 赶集网网站建设分析开发板一般在周几更新
  • 广州专业网站制作设计交换免费连接
  • 江门做网站seo的wordpress常规选项
  • 关于建设学校网站的报告书在网站添加邮箱
  • 17一起来做网站建设官网的网站首页
  • 湖南网站建设推荐做网页需要什么软件
  • 沈阳关键字优化360优化大师官方下载最新版
  • 网站经常出现502asp怎么样做网站后台
  • 外贸公司英文网站建设重庆建设网站多久时间
  • 网站建设专业可行性分析电工培训机构
  • 网易做相册的网站可以免费打开网站的软件下载