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

阿里巴巴上怎样做自己的网站2345手机浏览器

阿里巴巴上怎样做自己的网站,2345手机浏览器,软件开发文档管理工具,网页qq登录每一天乐在沟通文章目录 有关队列的概念队列的结点设计及初始化队列的销毁判空和计数入队操作出队操作 有关队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端…

文章目录

  • 有关队列的概念
  • 队列的结点设计及初始化
  • 队列的销毁判空和计数
  • 入队操作
  • 出队操作


有关队列的概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

联想一下链表,在单链表中,只能对表尾进行插入,对表头进行结点的删除,这样强限制性的链表,就是所说的队列。也就是说,队列是限定在表的一端进行插入,表的另一端进行删除的数据结构。

在这里插入图片描述

如图去买票排队,每一列队伍都有一个队尾和队首,先来的先买票,后来的后买,买好的就从队首出去,新来买票的就需要从队尾继续排队。

1.结构

队列由两部分组成——队头(front)和队尾(rear)。队头是队列中允许删除元素的一端,而队尾是允许添加元素的一端。

队列是一个线性的数据结构,并且这个数据结构只允许在一端进行插入,另一端进行删除,禁止直接访问除这两端以外的一切数据,且队列是一个先进先出的数据结构。
就比如下图

在这里插入图片描述

队列存储结构的实现有以下两种方式:
①顺序队列:在顺序表的基础上实现的队列结构。
②链队列:在链表的基础上实现的队列结构。

两者的区别仅是顺序表和链表的区别,即在实际的物理空间中,数据集中存储的队列是顺序队列,分散存储的队列是链队列。

队列的结点设计及初始化

队列只有链式的设计方法,其本身分为多种队列,如顺序队列和循环队列,还有衍生的优先队列等等,以顺序队列的设计为例。

结点设计
首先是队列的结点设计,可以设计出两个结构体,一个结构体 Node 表示结点,其中包含有 data 域和 next 指针,如图:
在这里插入图片描述

其中 data 表示数据,其可以是简单的类型,也可以是复杂的结构体。next 指针表示,下一个的指针,其指向下一个结点,通过 next 指针将各个结点链接。

结构体设计
然后再添加一个结构体,其包括了两个分别永远指向队列的队尾和队首的指针,看到这里是不是觉得和栈很像?

主要的操作只对这两个指针进行操作。为使后续操作更加方便,我们不妨再多设置一个用来计数的成员,如图所示:

在这里插入图片描述

其结构体设计的代码可以表示为:

typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType val;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;

队列的销毁判空和计数

这块区域较简单,仅销毁区域需要注意将每个节点依次释放,避免内存泄漏

这部分代码可以表示为

//销毁
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

入队操作

在这里插入图片描述
进行入队操作的时候,同样的,首先需要判断队列是否为空,如果队列为空的话,需要将头指针和尾指针一同指向第一个结点,代码如下:

void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc newnode fail");}newnode->val = x;newnode->next = NULL;if (pq->ptail == NULL){pq->phead = newnode;pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;	
}

出队操作

在这里插入图片描述
出队(pop)操作,是指在队列不为空的情况下进行的一个判断,当然在此也一定要进行队列判空的操。

如图,如果队列只有一个元素了,也就是说头尾指针均指向了同一个结点,那么直接将头尾两指针置空,并释放这一个结点即可,代码如下:

// 队头删除
void QueuePop(Queue* pq)
{assert(pq);assert(pq->size != 0);if (pq->size == 1){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}
http://www.yidumall.com/news/75708.html

相关文章:

  • 怎么在境外做网站链接点击量软件
  • 行业网站建设的开发方案微信群推广网站
  • 个人推广网站秦皇岛seo优化
  • 建立网站的风险小程序推广接单平台
  • 移动网站建设方案成都自然排名优化
  • 一站式装修平台长沙专业竞价优化首选
  • 网站怎么做才有收录新媒体运营哪个培训机构好
  • 哪个网站做图片外链黄山seo
  • 金坛网站建设价格大连seo按天付费
  • 南昌seo关键词排名跟我学seo从入门到精通
  • 做网站app要多少钱网络营销的方式与手段
  • 湖北平台网站建设哪家好app推广80元一单
  • 做英文简历的网站百度搜索 手机
  • 凯里网站设计公司淄博搜索引擎优化
  • 做网站推广怎么定位客户我为什么不建议年轻人做销售
  • 企业网站项目的流程如何开发微信小程序
  • 永久免费的网站推荐百度上怎么注册店铺地址
  • wordpress 批量注册培训机构优化
  • 展示类网站建设热搜榜上2023年热搜
  • 如何用github做网站重庆seo优化推广
  • 爱心代码html简单上海seo培训中心
  • web网站开发软件有哪些百度竞价推广什么意思
  • python基础教程人民邮电出版社seo外链怎么做
  • 做优惠网站多少钱域名ip查询入口
  • 简单电子商务网站开发百度官方电话号码
  • 简单公司网站模版青岛网站制作公司
  • 深圳代做网站免费拓客软件
  • 电子商务公司起名大全免费太原seo优化
  • 网站怎么做域名跳转响应式模版移动优化
  • 陆丰网页定制百度关键词优化首选667seo