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

wordpress 最新更新插件seo搜索引擎优化工资薪酬

wordpress 最新更新插件,seo搜索引擎优化工资薪酬,crm管理系统定制,成都旅游住哪里一.概念与结构 1.概念 只允许在⼀端进行插⼊数据操作#xff0c;在另⼀端进行删除数据操作的特殊线性表#xff0c;队列具有先进先出FIFO(First In First Out) ​ 入队列#xff1a;进⾏插⼊操作的⼀端称为队尾 ​ 出队列#xff1a;进⾏删除操作的⼀端称为队头 注意在另⼀端进行删除数据操作的特殊线性表队列具有先进先出FIFO(First In First Out) ​ 入队列进⾏插⼊操作的⼀端称为队尾 ​ 出队列进⾏删除操作的⼀端称为队头 注意与上文讲到的栈对比栈是先进后出队列是先进先出。 2.结构 队列也可以数组和链表的结构实现使⽤链表的结构实现更优⼀些因为如果使⽤数组的结构出队列在数组头上出数据效率会⽐较低。 数组头删时间复杂度O(N) ** 数组尾插时间复杂度O(1) 单链表头删时间复杂度O(1) 单链表尾插时间复杂度O(N) 因此下午队列的实现中我们采用链表的结构来进行。 二.队列的实现 queue.h 完整头文件如下。 #pragma once #include stdio.h #include stdlib.h #include assert.h #include stdbool.h typedef int QDataType; typedef struct QueueNode//队列节点的结构,即单链表节点的结构 {QDataType data;struct QueueNode* next; }QNode; typedef struct Queue//队列的结构,定义指向队列头尾的指针,以及队列节点的个数 {QNode* phead;QNode* ptail;QDataType size; }Q;void QueueInit(Q*);//入队列,队尾 void QueuePush(Q*, QDataType);//出队列,队头 void QueuePop(Q*);//队列判空 bool QueueEmpty(Q*);//取队头数据 QDataType QueueFront(Q*);//取队尾数据 QDataType QueueBack(Q*);//队列有效元素个数 int QueueSize(Q*);void QueueDestroy(Q*); 分析 1.此处我们定义了两个结构体一个是队列的基本结构QNode一个是用来表示队列的队头队尾和元素个数的Q。 2.Q存在的意义主要是为了便于后续表示队列的队头队尾时可以简化二级指针的个数且更加清晰。 test.c 相关测试代码如下。 #define _CRT_SECURE_NO_WARNINGS 1 #include Queue.h void QueueTest01() {Q q;//定义队列QueueInit(q);QueuePush(q, 1);QueuePush(q, 2);QueuePush(q, 3);QueuePush(q, 4);///printf(head:%d\n, QueueFront(q));printf(tail:%d\n, QueueBack(q));printf(size:%d\n, QueueSize(q));QueuePop(q);QueueDestroy(q); }int main() {QueueTest01();return 0; }队列的初始化 #define _CRT_SECURE_NO_WARNINGS 1 #include Queue.h void QueueInit(Q* pq) {assert(pq);pq-phead pq-ptail NULL;pq-size 0; }分析 1.需注意我们此处传入的是指针Q*而非QNode*。 2.其余置空断言操作如常。 队列的销毁 void QueueDestroy(Q* pq) {assert(pq);assert(!QueueEmpty(pq));QNode* pcur pq-phead;while (pcur){QNode* next pcur-next;free(pcur);pcur next;}pq-phead pq-ptail NULL;pq-size 0; }分析 1.由于每个节点与之前的链表类似都是动态开辟的因此我们通过Q*找到队列头phead之后逐个释放节点即可。 2.依次释放之后置空并将元素个数置为0即可。 节点的创建 首先创建一个专门用来生产节点的函数避免后续插入时代码的冗余。 QNode* BuyNode(QDataType x) {QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail!);exit(1);}newnode-data x;newnode-next NULL;return newnode; }注意在创建节点后记得把size。 队尾插入数据——入队列 void QueuePush(Q* pq, QDataType x) {assert(pq);if (pq-phead NULL)pq-phead pq-ptail BuyNode(x);else{pq-ptail-next BuyNode(x);pq-ptail pq-ptail-next;}pq-size; }分析与链表的尾插原理基本相同。 队列判空 在进入删除之前首先需要判断队列数据个数是否为空。 bool QueueEmpty(Q* pq) {assert(pq);return pq-phead NULL pq-ptail NULL; }此处通过使用size个数是否为0进行判空也可。 队头删除数据——出队列 void QueuePop(Q* pq) {assert(pq);assert(!QueueEmpty(pq));//只有一个节点的情况,避免ptail变成野指针if (pq-ptail pq-phead){free(pq-phead);pq-phead pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }分析 1.首先判断队列数据是否为空。 2.之后考虑两种情况如果队列只有一个节点那么直接删除之后需要将队头和队尾都置为空。 3如果队列不止存在一个节点同链表的删除原理类似。 返回队头数据 QDataType QueueFront(Q* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-phead-data; } 返回队尾数据 QDataType QueueBack(Q* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data; }输出队列数据个数 int QueueSize(Q* pq) {assert(pq);//不规范且时间复杂度O(n)//int size 0;//QNode* pcur pq-phead;//while (pcur)//{// size;// pcur pcur-next;//}//return size;return pq-size;}分析 1.如果我们不在最初引入变量size记录数据个数由于队列是链表结构无法直接通过下标访问元素个数需要逐个遍历记录时间复杂度为On。 2.直接返回size的话就可以减少时间消耗。 三.完整代码 #define _CRT_SECURE_NO_WARNINGS 1 #include Queue.h void QueueInit(Q* pq) {assert(pq);pq-phead pq-ptail NULL;pq-size 0; }QNode* BuyNode(QDataType x) {QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail!);exit(1);}newnode-data x;newnode-next NULL;return newnode; }void QueuePush(Q* pq, QDataType x) {assert(pq);if (pq-phead NULL)pq-phead pq-ptail BuyNode(x);else{pq-ptail-next BuyNode(x);pq-ptail pq-ptail-next;}pq-size; }bool QueueEmpty(Q* pq) {assert(pq);return pq-phead NULL pq-ptail NULL; } void QueuePop(Q* pq) {assert(pq);assert(!QueueEmpty(pq));//只有一个节点的情况,避免ptail变成野指针if (pq-ptail pq-phead){free(pq-phead);pq-phead pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }QDataType QueueFront(Q* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-phead-data; }QDataType QueueBack(Q* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data; }int QueueSize(Q* pq) {assert(pq);//不规范且时间复杂度O(n)//int size 0;//QNode* pcur pq-phead;//while (pcur)//{// size;// pcur pcur-next;//}//return size;return pq-size;}void QueueDestroy(Q* pq) {assert(pq);assert(!QueueEmpty(pq));QNode* pcur pq-phead;while (pcur){QNode* next pcur-next;free(pcur);pcur next;}pq-phead pq-ptail NULL;pq-size 0; }以上就是关于队列的概念结构和用链表方式实现队列的讲解欢迎各位大佬前来支持斧正
http://www.hkea.cn/news/14481651/

相关文章:

  • 企业微信网站怎么做的要对网页中各个元素
  • 浦东做网站公司百度大数据官网入口
  • 电子政务网站建设实践报告网站建设合同注意
  • 哪个网站做漫画可以有钱山西做网站推广
  • 品牌网站建设知名大蝌蚪交通网站建设
  • 长沙经开区建管站小说网站建设吧
  • 网站开发遇到的问题及解决方法免费标志在线设计
  • 顺义区专业网站制作网站建设完爆网站开发经典实例
  • Vs做的网站调试时如何适应网页请别人做网站注意事项
  • 网站流量分析方法游戏开发大亨破解版
  • 做化妆品的网站wordpress自学
  • 沈阳市城乡建设部官方网站游戏wordpress模板
  • 引流量的网站手机怎么网站建设
  • 网站开发软硬件配置网站建设的步骤教学
  • 学校网站建设情况采集wordpress整站数据
  • p2p网站开发软件开发工具的发展趋势是
  • 定制网站开发系统wordpress 语录小程序
  • 网站编辑信息怎么做出国劳务信息
  • 旅游网站建设的结论软文推广有哪些
  • 互联二维码生成器陕西关键词优化推荐
  • 九易建网站的建站流程黄骅市旅游景点有哪些
  • 消防做ccc去那个网站电子商务网页设计与网站建设
  • 国外营销型网站怎样做网站的优化工作
  • 卓业网站建设新浪博客怎样上传wordpress
  • 高端网站建设与制作wordpress 配置邮箱
  • 网站项目需求分析网站建设价格是多少
  • 上海网站建设上海广告外链购买平台
  • 建设银行在网站上开通短信提醒wordpress怎么编辑模板
  • 道路建设网站北京网站设计实力乐云践新
  • 电商网站开发报告网站建设需要在网络上如何实现