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

东莞浩智网站建设公司免费制作图文的软件

东莞浩智网站建设公司,免费制作图文的软件,做平面设计必知的网站,济南市病疾情最新信息数据结构(队列) 什么是队列? 队列和栈类似,也是一类特殊的线性表。特殊之处也是在于操作上。队列:只允许在一端进行插入数据操作(入队),在另一端进行删除数据操作(出队&…

数据结构(队列)

什么是队列?

  • 队列和栈类似,也是一类特殊的线性表。特殊之处也是在于操作上。
  • 队列:只允许在一端进行插入数据操作(入队),在另一端进行删除数据操作(出队)的特殊的线性表。
  • 具有先进先出,后进后出的特点。
  • 进行插入操作(入队)的一端称为队尾。进行删除操作(出队)的一端称为队头。

在这里插入图片描述

队列的意义(作用)

  • 在这里插入图片描述

队列的实现

  • 和栈类似,也有两种实现方式。一种是数组,也就是顺序表,一种是链表。

  • 两种方式都是可以的,不过相比之下,链表更优一些。

  • 因为队列是在队头出数据,也就是头部删除数据,那么顺序表要删除头部数据需要一个个的移动数据进行覆盖。所以我们优先选择链表实现。

  • 链表类型的选择

  • 在这里插入图片描述

实现代码

  • 头文件.h
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>typedef int QDateType;
typedef struct QueueNode
{struct QueueNode* next;QDateType date;
}QNode;typedef struct Queue
{QNode * head;QNode * tail;int size;
}Que;//队列初始化
void QueueInit(Que* pq);
//队列销毁
void QueueDestroy(Que* pq);//入队(尾部插入数据)
void QueuePush(Que* pq,QDateType x);
//出队(头部删除数据)
void QueuePop(Que* pq);//获得队头节点的值
QDateType QueueFront(Que* pq);
//获得队尾节点的值
QDateType QueueBack(Que* pq);//判断队列是否为空
bool QueueEmpty(Que* pq);
//获得队列的长度(有效元素个数)
int QueueSize(Que* pq);
  • 函数实现文件.c
#include "Queue.h"//队列初始化
void QueueInit(Que* pq)
{assert(pq);pq->head=pq->tail=NULL;pq->size=0;
}
//队列销毁
void QueueDestroy(Que* pq)
{assert(pq);QNode* cur=pq->head;while(cur){QNode *next=cur->next;free(cur);cur=next;}pq->head=pq->tail=NULL;pq->size=0;
}//入队(尾部插入数据)
void QueuePush(Que* pq,QDateType x)
{assert(pq);QNode *newnode=(QNode*) malloc(sizeof (QNode));if(newnode==NULL){perror("malloc failed");exit(-1);}newnode->next=NULL;newnode->date=x;if(pq->tail==NULL){pq->head=pq->tail=newnode;}else{pq->tail->next=newnode;pq->tail=newnode;}pq->size++;
}
//出队(头部删除数据)
void QueuePop(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));if(pq->head->next==NULL){free(pq->head);pq->head=pq->tail=NULL;}else{QNode *next=pq->head->next;free(pq->head);pq->head=next;}pq->size--;}//获得队头节点的值
QDateType QueueFront(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->date;
}
//获得队尾节点的值
QDateType QueueBack(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->date;
}//判断队列是否为空
bool QueueEmpty(Que* pq)
{assert(pq);return pq->head==NULL;
}
//获得队列的长度(有效元素个数)
int QueueSize(Que* pq)
{assert(pq);return pq->size;
}

函数解析

  • 队列结构
typedef int QDateType;
typedef struct QueueNode
{struct QueueNode* next;QDateType date;
}QNode;typedef struct Queue
{QNode * head;QNode * tail;int size;
}Que;

在这里插入图片描述

  • 队列初始化
//队列初始化
void QueueInit(Que* pq)
{assert(pq);pq->head=pq->tail=NULL;pq->size=0;
}

在这里插入图片描述

  • 队列销毁
//队列销毁
void QueueDestroy(Que* pq)
{assert(pq);QNode* cur=pq->head;while(cur){QNode *next=cur->next;free(cur);cur=next;}pq->head=pq->tail=NULL;pq->size=0;
}

在这里插入图片描述

  • 入队(尾部插入数据)
//入队(尾部插入数据)
void QueuePush(Que* pq,QDateType x)
{assert(pq);QNode *newnode=(QNode*) malloc(sizeof (QNode));if(newnode==NULL){perror("malloc failed");exit(-1);}newnode->next=NULL;newnode->date=x;if(pq->tail==NULL){pq->head=pq->tail=newnode;}else{pq->tail->next=newnode;pq->tail=newnode;}pq->size++;
}

在这里插入图片描述

  • 出队(头部删除数据)
//出队(头部删除数据)
void QueuePop(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));if(pq->head->next==NULL){free(pq->head);pq->head=pq->tail=NULL;}else{QNode *next=pq->head->next;free(pq->head);pq->head=next;}pq->size--;}

在这里插入图片描述

  • 获得队头节点的值
//获得队头节点的值
QDateType QueueFront(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->date;
}
  • 这个不多说。

  • 获得队尾节点的值

//获得队尾节点的值
QDateType QueueBack(Que* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->date;
}
  • 不多说了。

  • 判断队列是否为空

//判断队列是否为空
bool QueueEmpty(Que* pq)
{assert(pq);return pq->head==NULL;
}
  • 连头都没有,那是不是空的?或者pq->tail==NULL。也可以判空。

  • 获得队列的长度(有效元素的个数)

//获得队列的长度(有效元素个数)
int QueueSize(Que* pq)
{assert(pq);return pq->size;
}
  • 不多说,每次插入删除数据,都会带上它变化的。它就是用来记录元素个数的。
  • 那么队列的基本知识就基本完成了。
http://www.dtcms.com/a/526090.html

相关文章:

  • 效率革命:蓝光三维扫描仪如何赋能汽车零部件装配孔位与全尺寸检测
  • 做设计有必要买素材网站会员中国建设报官网
  • 宗亲网站开发6网站制作成功后怎么使用
  • 网站建设明细价单网页设计与制作精品课程网站
  • 在线编程网站开发交互式网站开发技术有哪些
  • 解构全球经营复杂性:业财一体化是出海企业的财务底盘
  • std::cout打印不同颜色的字符到终端
  • 做网站杭州傲视信息网站备案 名称 不一致吗
  • 网站名查询网址如何给自己的网站做外链
  • 网站右边跳出的广告怎么做17网一起做网店普宁站
  • Vite 工作原理
  • 在vue-next-admin开源项目增加定义布局配置:页面缓存接口数据
  • 网站建设教学视频百度云盘wordpress 标签云 插件
  • 网站产品使用说明书怎么做wordpress站外连接
  • 网站资料如何做参考文献时尚网站模板
  • 欧美在线网站设计教程企业所得税税率2022
  • 【零基础学MySQL】第一章:MySQL介绍与安装
  • 邯郸有学做搭建网站的吗为客户创建网站必须
  • 网站加入wordpress免费网站app下载汅api
  • ftp链接网站空间苏州营销型网站开发公司
  • 2025妈妈杯大数据竞赛A题mathorcup大数据:集装箱智能破损检测问题手把手思路代码文章教学大学生数学建模
  • 网站备案资料申请平面设计与广告设计
  • 企业类网站模板免费下载dedecms网站乱码
  • 爱思唯尔期刊投稿经验
  • 山东城市建设职业学院图书馆网站抖音怎么推广
  • Hive 加载文件数据到表
  • C++中函数重载解析:从原理到应用
  • Toolhub — 一个干净实用的在线工具集合
  • 深圳网站优化运营安卓手机网页视频怎么下载
  • 做网站自动赚钱珠海网站建设策略