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

建立网站 优帮云专门代写平台

建立网站 优帮云,专门代写平台,做网站签到挣钱吗,网站里做个子网页怎么做数据结构(队列) 什么是队列? 队列和栈类似,也是一类特殊的线性表。特殊之处也是在于操作上。队列:只允许在一端进行插入数据操作(入队),在另一端进行删除数据操作(出队&…

数据结构(队列)

什么是队列?

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

在这里插入图片描述

队列的意义(作用)

  • 在这里插入图片描述

队列的实现

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

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

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

  • 链表类型的选择

  • 在这里插入图片描述

实现代码

  • 头文件.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/wzjs/427776.html

相关文章:

  • 淘客做的领券网站营销型网站有哪些
  • 网摘网站推广法百度认证是什么
  • 洛阳便宜网站建设费用新手小白怎么学做运营
  • 网站建设如何提高转化率网站关键字优化
  • 黄冈网站推广软件ios个人网站设计图片
  • 大连建设网站便民服务重庆公司网站seo
  • 宁波网站推广营销公司百度推广开户需要多少钱
  • 做自媒体的有哪些素材网站百度一下搜索一下
  • 优惠券网站做淘客违规吗淘宝培训
  • 如何制作网络教程云优化
  • 汽车建设网站免费推广网站地址大全
  • 珠海婚恋网站建设市场分析今日新闻摘抄
  • 网业制作与网站建设太原seo外包平台
  • wordpress 图片被压缩百度seo按天计费
  • 成都计算机培训机构哪个最好免费seo关键词优化排名
  • 网站建设与管理用什么软件有哪些百度热搜词排行榜
  • 建站网站赚钱吗网站单向外链推广工具
  • 做阿里网站卖东西赚钱吗一份完整的市场调查方案
  • 网站开发人员属于什么seo网站优化建议
  • 星沙做淘宝店铺网站seo课程培训视频
  • 北京哪个网站制作公司中国十大搜索引擎网站
  • 淄博桓台学校网站建设哪家好安徽网络优化公司排名
  • 织梦做的网站快照被攻击百度信息流代理
  • 网络营销推广的特点有搜狗seo查询
  • 手机网站建设多少钱seo基础培训教程
  • 网站为什么要维护口碑营销的优势有哪些
  • 安徽省建设厅证件查询安全员c证seowhy培训
  • 山东胜越石化工程建设有限公司网站没广告的视频播放器app
  • 网站设计贵不贵十大免费无代码开发软件
  • h5自响应式网站模版白嫖永久服务器