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

深圳商城网站制作公司seo排名查询工具

深圳商城网站制作公司,seo排名查询工具,wordpress删主题,那些门户网站的官网做的好目录 前言 一、队列的概念及其结构 二、实现 2.1结构体定义 2.2初始化 2.3销毁链表 2.4尾插入(入队) 2.5头删(出队) 2.6个数 2.7检验是否为空 2.8取队头数据 2.9取队尾数据 三、检验 总结 前言 本文介绍队列&#x…

目录

前言

一、队列的概念及其结构

二、实现

 2.1结构体定义

2.2初始化

2.3销毁链表

2.4尾插入(入队)

2.5头删(出队)

2.6个数

2.7检验是否为空

2.8取队头数据

2.9取队尾数据

三、检验

总结


前言

本文介绍队列,以及实现的代码。


一、队列的概念及其结构

相对于栈来说,队列跟栈就是相反的。

队列只允许在一端插入数据,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。(First In First Out,FIFO),队列常用于实现缓冲区、任务调度等场景。

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头

下面是一个简单的图形,方便理解:

这里如果实现链表的话,使用一个单链表就可以,使用数组的话不方便。

二、实现

这里要实现的功能有:

void QueueInit(Queue* pq);//初始化
void QueueDestroy(Queue* pq);//删除销毁
void QueuePush(Queue* pq, QDatatype x);//尾插入
void QueuePop(Queue* pq);//头删
void QueueSize(Queue* pq);//个数
bool QueueEmpty(Queue* pq);//检验是否为空
QDatatype QueueFront(Queue* pq);//队头数据
QDatatype QueueBack(Queue* pq);//队尾数据

 2.1结构体定义

结构体定义,因为使用的是单链表,所以也就是定义一个单链表的结构体节点:

typedef int QDatatype;//数据类型typedef struct QueueNode
{struct QueueNode* Next;//节点QDatatype data;//数据
}QNode;

因为队列的定义是先进先出,队尾进,队头出,所以我们要实现这个功能,需要链表的头和尾,这里为了传入参数的方便,用另一个结构体封装一下头尾指针,传参只需要传这个结构体就可以获取头尾指针了。

typedef struct Queue
{QNode* head;//头指针QNode* tail;//尾指针
}Queue;

2.2初始化

初始化只需要初始化这个结构体就可以,因为我们后期需要节点结构体往这里创建连接节点,从而实现head和tail的移动,方便后期的使用。

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

此时,pq这个实例头尾指针因为没有指向,所以初始化给NULL(当然也避免野指针的问题),然后里面的节点数量给0,这样就实现了一个带头尾指针单链表的初始化。

2.3销毁链表

销毁链表,需要把链表中每一个节点都销毁掉,否则出现了内存泄漏。

void QueueDestroy(Queue* 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;
}

首先可以检查一下链表中是否有数据,这里通过一个遍历,把链表中的每一个节点free掉,最后回到初始化状态。当循环结束,也就是把里面的节点全部free了。

2.4尾插入(入队)

尾插就是链表的尾插,只不过这里加入了头尾指针的问题。

依旧是首先要malloc一个空间用来存放节点,检验一下节点是否创建成功,如果没成功就输出错误信息并结束,如果成功了,就把x传入data。

void QueuePush(Queue* pq, QDatatype x)//尾插入
{QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->data = x;//newnode->next=NULL;if (pq->head == NULL){assert(pq->tail == NULL);pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->tail->next = NULL;pq->size++;
}

然后判断head和tail是否都为null,如果都为null,就代表里面没有节点,就直接把newnode赋给tail和head就可以,接下来,如果里面有节点了,就把新newnode赋给tail(尾节点)的下一个,然后更新tail的指针,最后把tail的下一个赋为空,防止内存泄漏(避免next为野指针),这里需要留意,然后把size++,更新一下里面数据节点的数量。

2.5头删(出队)

这里了进行分开判断,首先对节点和实例进行了检验,然后通过判断是否是一个节点还是多个节点进行分开判断,如果多个节点就按照else里的处理,如果只有一个节点就可以直接删除此节点,最后size--,把数量更新一下。

void QueuePop(Queue* pq)//头删
{assert(pq);assert(pq->head!=NULL);if (pq->head == pq->tail){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* cur = pq->head->next;free(pq->head);pq->head = cur;}pq->size--;
}

2.6个数

这里之前定义的size就有用了,我们可以直接返回size就可以了。

void QueueSize(Queue* pq)//个数
{assert(pq);printf("个数:%d\n", pq->size);
}

2.7检验是否为空

检验是否为空也就是检验size是否为0。

bool QueueEmpty(Queue* pq)//检验是否为空
{assert(pq);return pq->size == 0;
}

2.8取队头数据

QDatatype QueueFront(Queue* pq)//队头数据
{assert(pq);assert(!QueueEmpty(pq));return pq->head->data;
}

2.9取队尾数据

QDatatype QueueBack(Queue* pq)//队尾数据
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->data;
}

三、检验

我们可以通过一个test.c文件来验证一下刚才写的函数,也可以帮助理解。

#include"Queue.h"
int main()
{Queue st;QueueInit(&st);QueuePush(&st, 1);QueuePush(&st, 2);QueuePush(&st, 3);QueuePush(&st, 4);QueuePush(&st, 5);QueueSize(&st);QueuePop(&st);QueuePop(&st);QueueSize(&st);//打印输出while(!QueueEmpty(&st)){printf("%d ", QueueFront(&st));QueuePop(&st);}printf("\n");QueueDestroy(&st);//销毁return 0;
}

道爷我成了!

当然这里只是基本的东西,有很多地方可以改善和添加功能,这里只对简单的队列进行原理的学习。


总结

队列是一种先进先出(FIFO)的数据结构,常用于实现缓冲区、任务调度等场景。队列的基本操作包括初始化、销毁、入队、出队、获取队列大小、检验队列是否为空以及获取队头和队尾元素。

队列的实现可以通过链表或数组来完成,本文介绍了使用单链表实现队列的基本操作。在实现过程中,需要定义队列节点结构体以及队列结构体,同时实现各种操作函数来对队列进行操作。

通过编写测试代码,可以验证队列的各项功能是否正常运行,帮助加深对队列数据结构的理解。

http://www.dtcms.com/wzjs/401698.html

相关文章:

  • 网站制作价格和流程网站优化推广外包
  • 百度收录不了网站网络营销做得好的公司
  • 小伙做网色网站seo一个关键词多少钱
  • wordpress 总数 函数甘肃搜索引擎网络优化
  • 漳州做网站优化推客平台
  • 高端网站建设信息核心关键词举例
  • 网站建设平台分析免费网页制作模板
  • 网站后台管理页面模板影响seo排名的因素有哪些
  • 怎样360网站做推广教师遭网课入侵直播录屏曝光广场舞
  • 天河网站建设信科网络网络推广是啥
  • 怎么制作网站编辑页面seo外包
  • 东城响应式网站建设百度seo关键词优化工具
  • 中国建设银行个人账户查询南宁seo规则
  • 标志设计软件seo网站快速整站优化技术
  • 深圳做装修网站费用多少抖音关键词排名系统
  • 湛江的网站建设公司企业网站推广方案设计毕业设计
  • 贵阳手机网站建设福州关键词排名优化
  • php门户网站模板下载平台推广方式方法是什么
  • 网站开发报价表的文档江苏网站开发
  • 青海城乡建设厅网站商城系统开发
  • 售卖网站建设实验报告福州网站排名提升
  • 找加工厂上什么网站企业邮箱注册
  • 山东家居行业网站开发如何推广普通话
  • 做标签网站百度搜索的优势
  • 网站制作需要多少费用广告优化师适合女生吗
  • Sketch 开发 wordpress搜狗seo培训
  • 网站怎么换空间新闻内容摘抄
  • 郑州那家做网站便宜百度指数如何提升
  • 广昌网站建设网络推广方案的基本思路
  • 当牛做吗网站源代码分享危机公关处理