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

品牌网站建设专家医疗器械网上采购平台

品牌网站建设专家,医疗器械网上采购平台,wordpress火车头采集,如何在百度上推广自己白日去如箭#xff0c;达者惜今阳。 --朱敦儒目录 #x1f681;前言#xff1a;​ #x1f3dd;️一.队列的概念及结构 #x1f33b;二.队列各种功能的实现 #x1f34d;1.队列的初始化 #x1f3dd;️2.队列…白日去如箭达者惜今阳。                                                   --朱敦儒目录  前言​ ️一.队列的概念及结构  二.队列各种功能的实现 1.队列的初始化 ️2.队列的尾入 3.队列头的元素 4.队列的头出 5.判断是否为空 6.队列尾的元素 7.销毁队列 三.队列的全部代码  1.Queue.h 2.Queue.c 3.test.c 前言 前几天我们对栈进行了实现栈是数据先进后出而今天我们要是实现的队列是完全相反的队列是数据先进先出。而在栈中我们使用的顺序表(数组)来实现的。而队列却用单链表来实现是更加合适的。 在队列入数据的时候相当于是尾插而队列出数据的时候相当于是头删。 队列的顺序结构 入队不需要移动任何元素时间复杂度为O(1)。 出队所有元素需要往前移动时间复杂度为O(N)。队列的链式结构 首先我们定义两个指针队头指针指向第一个节点队尾指针指向尾节点。 入队尾插时间复杂度为O(1)。 出队头删时间复杂度为O(1)。结论所以我们使用单链表来实现队列。 ️一.队列的概念及结构  队列只允许在一端进行插入数据操作在另一端进行数据操作的特殊线性表队列具有先进先出FIFO(Frist in First out)。 入队列进行插入操作的一端称为队尾。出队列进行删除操作的一端称为对头。 队列的初始结构单链表实现 typedef int QDataType; typedef struct QueueNode {struct QueueNode* next;//单链表QDataType data; }QNode;typedef struct Queue {QNode* head;//队列头QNode* tail;//队列尾 }Queue; 二.队列各种功能的实现 1.队列的初始化 这里我们实现的单链表是无头不循环的单链表。所以我们把队列头和队列尾初始化为空指针。 //初始化 void QueueInit(Queue* ps) {assert(ps);ps-head ps-tail NULL; } ️2.队列的尾入 对于队列的尾入我们要分为两种情况第一种第一次尾入数据的时候队列头和队列尾都是指向的同一个位置并且都是空当我们要尾入的时候创建一个新的结点把新结点赋值给队列的头和队列的尾。 第二种队列已经有数据了我们把新的结点链接到尾后面然后再把新结点赋值为新的结点也就是更新队列的尾。总结队列头是一直不变的队列尾入一个数据就需要把队列尾往后面移动一位。  //队尾入 void QueuePush(Queue* ps,QDataType x) {assert(ps);QNode* newnode (QNode*)malloc(sizeof(QNode));//创建一个新的结点if (newnode NULL){perror(malloc\n);return;}newnode-data x;newnode-next NULL;if ( ps-tail NULL)//第一种情况{ps-headps-tail newnode;//新结点就是队列尾和队列头}else//第二种情况{ps-tail-next newnode;//队列尾链接新的结点ps-tail newnode;//更新队列尾} } 3.队列头的元素 需要知道队列头的元素是非常简单的只需要返回队列头的元素即可。 //头的元素 QDataType QueueFront(Queue* ps) {assert(ps);assert(ps-head);return ps-head-data; } 4.队列的头出 队列的头出也是分为两种情况第一种当队列只有一个结点的时候直接free掉第一个结点即可然后把队列头和对列尾赋值尾空即可。第二种当队列有两个及两个以上的结点的时候我们先保存队列头的下一个结点然后free掉队列头即可。 //对头出 void QueuePop(Queue* ps) {assert(ps);assert(ps-head);if (ps-head-next NULL)//当队列只有一个结点时{free(ps-head);ps-head ps-tail NULL;}else//当队列有两个或者两个以上的结点时{QNode* next ps-head-next;//free掉第一个结点时先保存下一个结点free(ps-head);ps-head next;} } 5.判断是否为空 在队列出的时候我们出一个数据就要判断一下队列是否为空如果为空我们就不能出数据了。 我们还是和栈的判断空一样使用bool值来判断。 //判断是否为空 bool QueueEmpty(Queue* ps) {assert(ps);return ps-head NULL; }有了上面的代码我们就可以把出队列的数据给打印一下。 很明显这和队列的结构时一致的即先进先出。  6.队列尾的元素 //尾的元素 QDataType QueueBack(Queue* ps) {assert(ps);assert(ps-head);return ps-tail-data; }7.销毁队列 最后退出程序我们再把队列给销毁一下。 //销毁队列 void QueueDestroy(Queue* ps) {assert(ps);QNode* cur ps-head;while (cur){QNode* next ps-head-next;free(ps-head);ps-head next;cur next;}ps-head ps-tail NULL; } 最后我们再把队列的功能给实现一下   三.队列的全部代码  1.Queue.h #pragma once #includestdio.h #includestdlib.h #includeassert.h #includestdbool.htypedef int QDataType; typedef struct QueueNode {struct QueueNode* next;QDataType data; }QNode;typedef struct Queue {QNode* head;QNode* tail; }Queue;//初始化 void QueueInit(Queue* ps);//队尾插 void QueuePush(Queue* ps,QDataType x);//队头出 void QueuePop(Queue* ps);//头的元素 QDataType QueueFront(Queue* ps);//尾的元素 QDataType QueueBack(Queue* ps);//队列的元素个数 int QueueSize(Queue* ps);//判断是否为空 bool QueueEmpty(Queue* ps);//销毁队列 void QueueDestroy(Queue* ps); 2.Queue.c   #define _CRT_SECURE_NO_WARNINGS 1 #includeQueue.h//初始化 void QueueInit(Queue* ps) {assert(ps);ps-head ps-tail NULL; }//队尾入 void QueuePush(Queue* ps,QDataType x) {assert(ps);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc\n);return;}newnode-data x;newnode-next NULL;if ( ps-tail NULL){ps-headps-tail newnode;}else{ps-tail-next newnode;ps-tail newnode;} }//对头出 void QueuePop(Queue* ps) {assert(ps);assert(ps-head);if (ps-head-next NULL)//当队列只有一个结点时{free(ps-head);ps-head ps-tail NULL;}else//当队列有两个或者两个以上的结点时{QNode* next ps-head-next;//free掉第一个结点时先保存下一个结点free(ps-head);ps-head next;} }//头的元素 QDataType QueueFront(Queue* ps) {assert(ps);assert(ps-head);return ps-head-data; }//尾的元素 QDataType QueueBack(Queue* ps) {assert(ps);assert(ps-head);return ps-tail-data; }//队列的元素个数 int QueueSize(Queue* ps) {int count 0;QNode* cur ps-head;while (cur){count;cur cur-next;}return count; }//销毁队列 void QueueDestroy(Queue* ps) {assert(ps);QNode* cur ps-head;while (cur){QNode* next ps-head-next;free(ps-head);ps-head next;cur next;}ps-head ps-tail NULL; }//判断是否为空 bool QueueEmpty(Queue* ps) {assert(ps);return ps-head NULL; }3.test.c #define _CRT_SECURE_NO_WARNINGS 1 #includeQueue.h int main() {QNode q;QueueInit(q);QueuePush(q, 1);QueuePush(q, 2);QueuePush(q, 3);QueuePush(q, 4);printf(对于队列 1 2 3 4 出的数据为\n);while (!QueueEmpty(q)){printf(%d , QueueFront(q));QueuePop(q);}QueuePush(q, 5);QueuePush(q, 6);QueuePush(q, 7);QueuePush(q, 8);printf(\n);printf(队列的元素为 5 6 7 8\n);printf(队列头的元素为\n);int first QueueFront(q);printf(%d\n, first);printf(队列尾的元素为:\n);int tail QueueBack(q);printf(%d\n, tail);printf(队列的元素的个数为\n);int count QueueSize(q);printf(%d\n, count);QueueDestroy(q);printf(退出程序\n);printf(队列已经被销毁……\n);return 0; }
http://www.hkea.cn/news/14373069/

相关文章:

  • 网站下拉菜单重叠如何用群晖nas做网站
  • 哪个网站可以做高数题如何模仿一个网站
  • 大庆最新消息今天重庆网站seo多少钱
  • 株洲市哪里有做公司官方网站百度人工服务24小时
  • 建立网站图书馆第一代网站建设
  • 农村建设自己的网站金融品牌网站设计
  • 网站是用什么做的农业行业网站模板
  • 巴中哪里可以做公司网站安徽淮北做网站的公司有哪些
  • php网站程序怎么安装杭州响应式网站建设
  • 南宁手机模板建站wordpress手机短信插件
  • 在线音乐网站开发数据库商标图案自动生成
  • 做代还的人都聚集在哪些网站网站需求分析文档
  • 模块化网站建设做企业网站多
  • 网站管理员权限设置权限设置asp网站的缺点
  • 农家乐网站 建设专业旅游网站建设
  • 专业网站建设市场分析wordpress iis内存高
  • 装修网站官网怎么建立一个网站好
  • 广州建设高端网站手机网站大全网站
  • 扬州网站建设文章wordpress 代码质量
  • 哪里买到纯净网站模板网页编辑器哪个好
  • vue做网站cms集团网站风格
  • 网站建设案例行业现状网站建设四川推来客网站系统
  • 做分类信息网站html5手机网站开发实例
  • 响应式网站是怎么做的淄博网站推广价格
  • 麓谷网站建设企业网站未来发展趋势
  • 建设银行官网站查询课件模板
  • 网站建站开发平台设计方案
  • 网站建设包含以下哪些建设阶段大连投诉网站
  • 手机网站底部漂浮代码电子商务网站建设首要问题是
  • 原则网站设计版式建筑安全员c证查询官网