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

一分钟用自己的电脑做网站全球速卖通网址

一分钟用自己的电脑做网站,全球速卖通网址,常见的网页编辑软件,上海外贸出口代理公司排名hello 友友们~ 今天我们要开始学习队列啦~ 话不多说,让我们开始吧!GO! 1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。 队列具有先进先出FIFO(First In First Out) 入队列&#x…

在这里插入图片描述

hello 友友们~ 今天我们要开始学习队列啦~
话不多说,让我们开始吧!GO!

1.队列的概念及结构

队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。

队列具有先进先出FIFO(First In First Out)
入队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头

注意:队列的实现建议用单链表
在这里插入图片描述

2.队列的实现

2.1接口实现

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int QDataType;//队列中的一个节点
typedef struct QueueNode
{struct QueueNode* _next;// 指向下一个节点的指针QDataType _data;// 存储的数据
}QueueNode;//队列本身的定义
typedef struct Queue
{QueueNode* _head;// 指向队列头部的指针QueueNode* _tail;// 指向队列尾部的指针
}Queue;//初始化
void QueueInit(Queue* pq);//销毁
void QueueDestory(Queue* pq);//队尾入队列
void QueuePush(Queue* pq, QDataType x);//队头出队列
void QueuePop(Queue* pq);//取队头数据(获取队列头部元素)
QDataType QueueFront(Queue* pq);//取队尾数据(获取队列队尾元素)
QDataType QueueBack(Queue* pq);// 检测队列是否为空
//返回1是空,返回0是非空
int QueueEmpty(Queue* pq);// 获取队列中有效元素个数
int QueueSize(Queue* pq);

2.2初始化

//初始化
void QueueInit(Queue* pq)
{assert(pq);pq->_head = pq->_tail = NULL;
}

2.3销毁

//销毁
void QueueDestory(Queue* pq)
{assert(pq);QueueNode* cur = pq->_head;//先保存头结点while (cur){QDataType* next = cur->_next;//先保存后一个结点位置free(cur);//再释放cur = next;//然后指针往后走}pq->_head = pq->_tail = NULL;
}

2.4队尾入队列

//队尾入队列
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){printf("内存不足\n");exit(-1);}newnode->_data = x;newnode->_next = NULL;//情况一:队列为空if (pq->_head == NULL){pq->_head = pq->_tail = newnode;}//情况二:不为空else{pq->_tail->_next = newnode;//在尾上插入pq->_tail = newnode;//更新尾节点}
}

重点代码分析:

  • newnode->_data = x;:把要添加的元素x赋值给新节点的数据域_data
  • newnode->_next = NULL;:由于新节点是要添加到队列尾部的,所以将其_next指针置为NULL
  • pq->_headNULL时,表明队列为空。此时,新节点既是队列的头节点,也是队列的尾节点,所以将pq->_headpq->_tail都指向新节点。

2.5队头出队列

//队头出队列
void QueuePop(Queue* pq)
{assert(pq);//队列为空时if (pq->_head == NULL){printf("队列为空,无法出队\n");return;}//这一段也可以写成assert(pq->head)QueueNode* next = pq->_head->_next;//先保存下一个结点free(pq->_head);pq->_head = next;//更新头指针if (pq->_head == NULL){pq->_tail = NULL;}
}

思考🤔🤔🤔:为什么要进行最后这次if判断

原因:🧐🧐🧐
在链式队列的出队操作中,当队列中只有一个元素时,移除这个元素后,队列就会变为。此时,pq->_head会被置为NULL。但原来的尾指针pq->_tail仍然指向刚刚被移除的那个节点,而这个节点的内存已经被释放了。如果不将pq->_tail也置为NULLpq->_tail就会变成一个野指针,后续对队列进行操作时可能会引发未定义行为。因此,需要通过这次判断来确保当队列变为空时,头指针和尾指针都被正确置为NULL,以保证队列状态的正确性。

2.6获取队列头部元素

//取队头数据(获取队列头部元素)
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->_head);return pq->_head->_data;
}

2.7获取队列队尾元素

//取队尾数据(获取队列队尾元素)
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->_tail );return pq->_tail->_data;
}

2.8检测队列是否为空

// 检测队列是否为空
//返回1是空,返回0是非空
int QueueEmpty(Queue* pq)
{assert(pq);return pq->_head == NULL ? 1 : 0;//如果==NULL则返回1 反之返回0
}

2.9获取队列中有效元素个数

// 获取队列中有效元素个数
int QueueSize(Queue* pq)
{assert(pq);QueueNode* cur = pq->_head;int size = 0;while (cur){size++;cur = cur->_next;}return size;
}

2.10函数调用

#define _CRT_SECURE_NO_WARNINGS 1
#include"Queue.h"void TestQueue()
{Queue q;//初始化QueueInit(&q);//入队列QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);//取数据while (!QueueEmpty(&q))//这里要不为空所以加了一个!{printf("%d ", QueueFront(&q));//将队列头部元素的值打印输出QueuePop(&q);//打印后删了}QueueDestory(&q);printf("\n");
}int main()
{TestQueue();return 0;
}

最后实现结果:

在这里插入图片描述
🎉🎉🎉
在这里本章就结束啦~

我们下期见~

在这里插入图片描述


文章转载自:

http://jUPZgmsE.dnzyx.cn
http://wEWFhiTd.dnzyx.cn
http://dyTbg3nb.dnzyx.cn
http://GB3ER7uA.dnzyx.cn
http://79c6j7h3.dnzyx.cn
http://Ug0TmLRf.dnzyx.cn
http://ffeGZ55I.dnzyx.cn
http://Y5AE5ZTv.dnzyx.cn
http://FexlXS2Z.dnzyx.cn
http://aPWtTveF.dnzyx.cn
http://vgQjnQwG.dnzyx.cn
http://ePzRafxT.dnzyx.cn
http://FI0Ao29J.dnzyx.cn
http://dl9wzTQP.dnzyx.cn
http://OiIazOHl.dnzyx.cn
http://L3LRajFw.dnzyx.cn
http://EDduIGpP.dnzyx.cn
http://50t864Np.dnzyx.cn
http://ZdFwlRkF.dnzyx.cn
http://MnwcUSYJ.dnzyx.cn
http://GUuBBmBo.dnzyx.cn
http://DwCToz1G.dnzyx.cn
http://nu5sMRtj.dnzyx.cn
http://MvtuZ8ZR.dnzyx.cn
http://GAXVP3Uw.dnzyx.cn
http://2RkNEwWo.dnzyx.cn
http://cujgArZS.dnzyx.cn
http://DPNYobXT.dnzyx.cn
http://kUD1mDqK.dnzyx.cn
http://A8eFadsB.dnzyx.cn
http://www.dtcms.com/wzjs/653861.html

相关文章:

  • 提卡网站要怎么做做电商网站前端用什么框架
  • 不建网站如何做淘宝客ppt的制作方法
  • 做音乐的网站企业年报查询官网入口
  • 长沙网站建设 鼎誉网站开发环境是什么
  • 辽阳专业建设网站ui设计师零基础学什么
  • 自动获取网站缩略图感觉做的比较好的健身网站
  • 珠海企业网站建设费用在线直播系统开发
  • 重庆公司专业建站甘肃兰州海拔多少米
  • 南京电信网站空间扩容WordPress免费问答主题
  • 网站备案号查询平台简单的网页设计论文
  • php网站识别手机网站规划与建设论文
  • 铜川公司做网站蓬莱做网站联系电话
  • 常见的网站结构类型wordpress 配置ssl
  • 服务器买好了怎么搭建自己的网站如何在网站上推广自己的链接
  • wordpress 下载站插件合肥建设集团信息网站
  • 哪个网站可以做推手全球做的比较好的网站
  • 建设银行支行网站营销外包团队有哪些
  • 沙朗镇做网站公司微信公众号前端开发
  • 大型网站怎么做优化西安app定制开发公司
  • 初二做网站的首页模板wordpress模板页面
  • 网站虚拟建设策划wordpress仪表盘默认
  • 中国做的很好的食品网站html5网站有哪些
  • 手机优化好还是不优化好天津seo关键词排名优化
  • 长春市建设工程造价管理协会网站手机网站 制作技术
  • 黄石有没有做网站的网站文章优化事项
  • 易县网站建设思特奇是外包公司吗
  • 太原网站运营优化注册一个小程序多少钱
  • 注册一个做网站的公司好wordpress 评论api
  • 外贸网站产品分析g3云推广是哪家公司的
  • 新手自己建网站购物网站seo搜索引擎优化方案