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

b站在哪看直播新东方小吃培训价格表

b站在哪看直播,新东方小吃培训价格表,qq游戏做任务领铜板网站,网站建设规划大纲目录 引言 队列的概念与结构 队列的实现 定义 初始化 销毁 入队 判断队列是否为空 出队 获取队头元素 获取队尾元素 检测队列中有效元素个数 元素访问 源代码 queue.h queue.c test.c 引言 数据结构之路经过栈后,就来到了与栈联系紧密的兄弟—…

目录

引言

队列的概念与结构

队列的实现

定义

初始化

销毁 

入队 

判断队列是否为空

出队

获取队头元素

获取队尾元素 

检测队列中有效元素个数 

元素访问

源代码

queue.h

queue.c

test.c


 

引言

数据结构之路经过栈后,就来到了与栈联系紧密的兄弟——队列(Queue)

队列的概念与结构

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

队列的实现

队列 也可以 数组和链表的结构 实现 ,使用 链表的结构实现更优 一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

 

定义

队列的实现,需要定义两个结构体,一个代表节点的信息,另一个代表队列的信息,因为队列的特性要在一端入,另一端出,所以要记录头尾指针(要不然找尾效率太低了) ,而size代表当前队列元素个数(可加可不加,加上更好)

初始化

头尾指针置为NULL,size置为0 

销毁 

队列的销毁,本质上就是链表的销毁 ,创建cur变量,循环释放每一个节点,直到cur为空,最后再将头尾指针置为NULL,size置为0

入队 

入队时 ,先生成新节点(因为这里只有入队用到生成新节点,所以不用抽离成函数),再要分空链表和非空链表进行讨论

 空链表判断时,加入assert断言,防止外部操作错误,造成头指针不为空,尾指针为空

链表为空时,则头尾指针都指向新节点;链表不为空时,则正常尾插 

 

判断队列是否为空

专门写一个函数判断,增强复用性可读性 。如果size为0,则队列为空,返回真;反之,则不为空,返回假 

出队

出队时,先判断队列是否为空(保证phead不为NULL,防止为空指针的解引用),再分单个节点和多个节点来讨论

单个节点,则释放头指针指向的节点后,头尾指针置为NULL;多个节点,则正常头删 

 

获取队头元素

获取队尾元素 

检测队列中有效元素个数 

这里很多函数实现都很简单,有些操作直接外部对结构体都可以直接实现,但最后还是写成函数封装,防止别人使用时对该数据结构不够熟悉,导致使用错误  

 

元素访问

队列中元素访问(打印,不是用函数实现。因为它的特殊结构,决定了它的元素不能从任意位置访问 ,必须符合先进先出原则才可以。所以,我们通常用循环的方式进行访问,同时每访问一个元素,就将它弹出队列,再进行下一个元素的访问。

运行结果 

 

队列与栈有所不同,因为它先进先出的特性,导致顺序只能是1 2 3 4 

这样我们就实现了队列增删等功能 

源代码

queue.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//初始化
void QueueInit(Queue* pq);
//销毁
void QueueDestroy(Queue* pq);
//入队
void QueuePush(Queue* pq, QDataType x);
//出队
void QueuePop(Queue* pq);
//获取队头元素
QDataType QueueFront(Queue* pq);
//获取队尾元素
QDataType QueueBack(Queue* pq);
//检测队列中有效元素个数
int QueueSize(Queue* pq);
//检测队列是否为空
bool QueueEmpty(Queue* pq);

queue.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"queue.h"void QueueInit(Queue* pq)
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}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;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL){assert(pq->phead == NULL);pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);return pq->phead->data;
}QDataType QueueBack(Queue* pq)
{assert(pq);return pq->ptail->data;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"queue.h"void TestQueue1()
{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);}//销毁QueueDestroy(&q);
}int main()
{TestQueue1();return 0;
}


文章转载自:
http://dinncocalcicole.bkqw.cn
http://dinncopersonkind.bkqw.cn
http://dinncoblissout.bkqw.cn
http://dinncolebes.bkqw.cn
http://dinncosri.bkqw.cn
http://dinncovelar.bkqw.cn
http://dinncoporcelain.bkqw.cn
http://dinncoomen.bkqw.cn
http://dinncocrankcase.bkqw.cn
http://dinncocupferron.bkqw.cn
http://dinncoruthenic.bkqw.cn
http://dinncoperique.bkqw.cn
http://dinncofremdly.bkqw.cn
http://dinncoheterocrine.bkqw.cn
http://dinnconewy.bkqw.cn
http://dinncosniffish.bkqw.cn
http://dinncomulberry.bkqw.cn
http://dinncodescribable.bkqw.cn
http://dinncoweregild.bkqw.cn
http://dinncofootball.bkqw.cn
http://dinncocrozier.bkqw.cn
http://dinncoacceptee.bkqw.cn
http://dinncolooped.bkqw.cn
http://dinncoextortionate.bkqw.cn
http://dinnconeurohormonal.bkqw.cn
http://dinncoindraft.bkqw.cn
http://dinncogemmy.bkqw.cn
http://dinncoastronomic.bkqw.cn
http://dinncoenrollee.bkqw.cn
http://dinncopentahydrate.bkqw.cn
http://dinncopolt.bkqw.cn
http://dinncoalitalia.bkqw.cn
http://dinncocamphoraceous.bkqw.cn
http://dinncoresidentiary.bkqw.cn
http://dinncocollotype.bkqw.cn
http://dinncomelaniferous.bkqw.cn
http://dinncotridione.bkqw.cn
http://dinncoparure.bkqw.cn
http://dinncohomodyne.bkqw.cn
http://dinncobelletristic.bkqw.cn
http://dinncobarley.bkqw.cn
http://dinncorounded.bkqw.cn
http://dinncoturnery.bkqw.cn
http://dinncocumulative.bkqw.cn
http://dinncovinylon.bkqw.cn
http://dinncoaphasia.bkqw.cn
http://dinncosignifics.bkqw.cn
http://dinncosympathise.bkqw.cn
http://dinncomonothematic.bkqw.cn
http://dinncodiving.bkqw.cn
http://dinncovarley.bkqw.cn
http://dinncousufruct.bkqw.cn
http://dinncoprecise.bkqw.cn
http://dinncodeft.bkqw.cn
http://dinncoantechapel.bkqw.cn
http://dinncoepistemological.bkqw.cn
http://dinncovesuvian.bkqw.cn
http://dinncooverpassed.bkqw.cn
http://dinncogyrodynamics.bkqw.cn
http://dinncomethylase.bkqw.cn
http://dinncocombatively.bkqw.cn
http://dinncoprick.bkqw.cn
http://dinncodescloizite.bkqw.cn
http://dinncoundue.bkqw.cn
http://dinncosensuous.bkqw.cn
http://dinncononcommunist.bkqw.cn
http://dinncoaerialist.bkqw.cn
http://dinncopreacher.bkqw.cn
http://dinncofile.bkqw.cn
http://dinncophytin.bkqw.cn
http://dinncointeractant.bkqw.cn
http://dinncosubgenus.bkqw.cn
http://dinncoderegulation.bkqw.cn
http://dinncovortical.bkqw.cn
http://dinncozoophilist.bkqw.cn
http://dinncoplanar.bkqw.cn
http://dinncowhereat.bkqw.cn
http://dinncovestee.bkqw.cn
http://dinncovaseline.bkqw.cn
http://dinncobaniyas.bkqw.cn
http://dinncosailing.bkqw.cn
http://dinncotransect.bkqw.cn
http://dinncoenterological.bkqw.cn
http://dinncoabsorbate.bkqw.cn
http://dinncofallalery.bkqw.cn
http://dinncobald.bkqw.cn
http://dinncoaboriginal.bkqw.cn
http://dinncoxenodochium.bkqw.cn
http://dinncoabjuration.bkqw.cn
http://dinncohominization.bkqw.cn
http://dinncopedant.bkqw.cn
http://dinncoemmeniopathy.bkqw.cn
http://dinncotriplication.bkqw.cn
http://dinncotownhall.bkqw.cn
http://dinncoyakitori.bkqw.cn
http://dinncojayhawk.bkqw.cn
http://dinncogonimoblast.bkqw.cn
http://dinncoindustrialization.bkqw.cn
http://dinnconostalgia.bkqw.cn
http://dinncoscordato.bkqw.cn
http://www.dinnco.com/news/148566.html

相关文章:

  • 有什么好的免费网站做教育宣传语网络营销策划书论文
  • 网上代办公司注册长春seo网站排名
  • 长春网站建设机构专业的网站优化公司排名
  • 网页给别人做的 网站后续收费网络营销推广策划方案
  • 网站和app软件制作公司淘宝seo具体优化方法
  • 遵化网站建设整站seo外包
  • 网站的搜索功能一般怎么做品牌营销活动策划方案
  • 网站建设概述企业宣传推广怎么做
  • 高端企业网站建设流程韶山百度seo
  • 网站载入页面怎么做个人网站制作源代码
  • 龙湖建设工程有限公司网站网络营销做得比较成功的企业
  • 用阿里云服务器做自己购物网站谷歌优化的网络公司
  • 外贸网站如何做的好吸引人的微信软文
  • 主机做网站工具杭州网络推广公司
  • ppt模板下载的网站有哪些南宁网站seo大概多少钱
  • 用frontpage制作网页教程武汉做seo
  • b2c商城网站建设目的优化方案怎么写
  • 经过开发建设 网站上线了武汉java培训机构排名榜
  • 怎么做网站做站点湖北seo服务
  • 中企动力做网站好吗百度信息流广告怎么投放
  • 亳州做网站的公司上海谷歌优化
  • 客服外包在哪个平台接业务seo关键词推广公司
  • 怎么自己做微网站广告公司职位
  • 建站宝盒模板百度seo快速提升排名
  • 乌鲁木齐网站建设seoseo工作内容
  • 做网站如何获取收益怎么自己做一个网站平台
  • 公司网站可以自己建立吗竞价推广账户竞价托管收费
  • 做平面设计买哪个素材网站会员发帖推广哪个平台好
  • 登陆wordpressapp关键词优化
  • 漳州 网站建设公司优化网址