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

做商业网站是否要备案网页设计学生作业模板

做商业网站是否要备案,网页设计学生作业模板,网站logo设计教程,长沙航科网页制作现在我们来掌握一下队列!如果有对往期知识有不足地方,可翻阅之前文章哦! 个人主页:小八哥向前冲~-CSDN博客 所属专栏:数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 栈和队列的实现其实都是对你顺序表和链表的检验…

现在我们来掌握一下队列!如果有对往期知识有不足地方,可翻阅之前文章哦!

个人主页:小八哥向前冲~-CSDN博客

所属专栏:数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客

栈和队列的实现其实都是对你顺序表和链表的检验,只有一些新的概念罢了!

哈哈!不信就往下看吧!!!

目录

什么是队列?

扩展--循环队列

队列的实现

初始化

队列的插入

队列的判空

队列的删除

队列的尾数据

队列的头数据

队列的销毁

总代码

Queue.h文件

Queue.c文件


什么是队列?

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

上图理解:

注意:遵循先进先出的原则!这个原则就是区分栈(后进先出)和队列(先进先出)方法!

我们来看看一个队列需要有的最基本要求:详情见--queue - C++ Reference

了解了队列的基本概念,我们来扩展一下!

扩展--循环队列

生活中队列很常用,而在实际的生活中,有时我们会用到循环队列。

循环队列它也有一些应用场景。如:在操作系统中的生产者消费者模型(这个我们后续提到!)

在这种问题中,环形队列可以使用数组实现,也可以使用循环链表实现

我们图上了解:

空的环形队列

满的环形队列:

注意:为了能区别Q.front=Q.rear为队满还是队空,我们通常认为Q.rear+1=Q.front为满!

ok!了解了队列的基本,我们来巩固一下:

3.循环队列的存储空间为 Q(1:100) ,初始状态为 front=rear=100 。经过一系列正常的入队与退队操作 后, front=rear=99 ,则循环队列中的元素个数为( )

A .1

B.2

C.99

D.0或者100

4.以下( )不是队列的基本运算?

A.从队尾插入一个新元素

B.从队列中删除第i个元素

C.判断一个队列是否为空

D.读取队头元素的值

5.现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为( )?(假设 队头不存放数据)

A.(rear - front + N) % N + 1

B.(rear - front + N) % N

C.ear - front) % (N + 1)

D.(rear - front + N) % (N - 1)

答案:3.D  4.B   5.B

参考:

3.我们肯定知道元素个数为空时,front=rear,可当front=rear时,也有元素为满的情况!

5.因为是循环队列,单纯尾指针和头指针相减并不能求出总长。

现在我们来实现一下队列(按照一个队列的基本要求)。

当然,队列像栈一样,都可以写成链表和顺序表的底层!这里主要了解链表!

队列的实现

还是老样子:我们创建Queue.h文件声明各种变量和函数,创建Queue.c文件来将函数实现。

思路:

 我们在实现一个函数时,要先弄清楚参数。

既然底层是链表,那么就得定义节点

typedef int QDataType;
//队列节点
typedef struct QueueNode
{struct QueueNode* next;QDataType val;
}QNode;

我们来看看我们的底层逻辑:需要头指针记录头,尾指针记录尾,一个计数变量

既然需要这几个变量时刻记录,不如我们直接定义一个结构体来管理这些参数。

作用:

这里将参数管理起来可以避免插入和删除函数参数二级指针的使用!(下面会有体现)

typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;

ok! 我们来将这些函数一一实现。

初始化

我们得先将记录的参数初始化一下,以便后续参数的更新!

//队列的初始化
void QInit(Queue* p)
{assert(p);p->phead = p->ptail = NULL;p->size = 0;
}

队列的插入

这里谨记:队列是先进先出,栈是后进先出,不要搞混了!

这里由于记录好了尾指针,我们直接在尾后面插入就行!这样看是不是觉得很方便?避免了二级指针的使用。

在插入之前,需要开辟一个节点,然后开始插入!

//队列的插入
void Qpush(Queue* p, QDataType x)
{assert(p);QNode* node = (QNode*)malloc(sizeof(QNode));if (node == NULL){perror("malloc failed!");return;}//初始化节点node->next = NULL;node->val = x;//开始插入if (p->phead == NULL){p->phead = p->ptail = node;}else{p->ptail->next = node;p->ptail = node;}
}

队列的判空

我们只需要在管理的数据变量中判断计数器的值是否为空就行!这也侧面体现了我们用一个结构体管理变量的好处!

//队列的判空
bool QEmpty(Queue* p)
{assert(p);return p->size==0;
}

队列的删除

  • 在删除之前,我们要先判断队列是否为空,如果为空的话,不能删除。
  • 因为队列是先进先出原则,既然尾部进数据,那么头部出数据。所以我们删除数据要在头部删除!

而在删除时要讨论队列中一个节点还是多个节点问题。本来不讨论我们也能删除数据,那么是为什么要讨论呢?

当队列中只有一个节点时,头指针等于尾指针一起指向这一个节点,当删除时,头指针移向空,然后将这个节点释放掉,但尾指针仍然指向那个节点,当我们访问尾指针指向的那个值时,程序出现错误!

我们上图理解:

于是我们能这样写代码:

//队列的删除
void Qpop(Queue* p)
{assert(p);//删除之前不能为空assert(!QEmpty(p));//讨论队列只有一个节点的情况!if (p->phead->next == NULL){free(p->phead);p->phead = p->ptail = NULL;}else{QNode* next = p->phead->next;free(p->phead);p->phead = next;}p->size--;
}

队列的尾数据

有了前面的基础,我们访问队列尾数据十分简单,但需要注意的是,判断队列是否为空。

//队列的尾数据
QDataType QBack(Queue* p)
{assert(p);assert(!QEmpty(p));return p->ptail->val;
}

队列的头数据

能十分访问尾数据,访问头数据也是如此,但是别忘了要判断队列是否为空。

//队列的头数据
QDataType QFront(Queue* p)
{assert(p);assert(!QEmpty(p));return p->phead->val;
}

队列的销毁

我们动态开辟了内存节点,那么当我们不用了这个队列时,不要忘了销毁它!

//队列的销毁
void QDestroy(Queue* p)
{assert(p);QNode* cur = p->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}
}

总代码

Queue.h文件

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>typedef int QDataType;
//队列节点
typedef struct QueueNode
{struct QueueNode* next;QDataType val;
}QNode;//队列相关变量
//先进先出
typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//队列的初始化
void QInit(Queue* p);
//队列的插入
void Qpush(Queue* p, QDataType x);
//队列的判空
bool QEmpty(Queue* p);
//队列的删除
void Qpop(Queue* p);
//队列的尾数据
QDataType QBack(Queue* p);
//队列的头数据
QDataType QFront(Queue* p);
//队列的销毁
void QDestroy(Queue* p);

Queue.c文件

#include"Queue.h"
//队列的初始化
void QInit(Queue* p)
{assert(p);p->phead = p->ptail = NULL;p->size = 0;
}
//队列的插入
void Qpush(Queue* p, QDataType x)
{assert(p);QNode* node = (QNode*)malloc(sizeof(QNode));if (node == NULL){perror("malloc failed!");return;}//初始化节点node->next = NULL;node->val = x;//开始插入if (p->phead == NULL){p->phead = p->ptail = node;}else{p->ptail->next = node;p->ptail = node;}
}
//队列的判空
bool QEmpty(Queue* p)
{assert(p);return p->phead == NULL;
}
//队列的删除
void Qpop(Queue* p)
{assert(p);//删除之前不能为空assert(!QEmpty(p));//讨论队列只有一个节点的情况!if (p->phead->next == NULL){free(p->phead);p->phead = p->ptail = NULL;}else{QNode* next = p->phead->next;free(p->phead);p->phead = next;}p->size--;
}
//队列的尾数据
QDataType QBack(Queue* p)
{assert(p);assert(!QEmpty(p));return p->ptail->val;
}
//队列的头数据
QDataType QFront(Queue* p)
{assert(p);assert(!QEmpty(p));return p->phead->val;
}
//队列的销毁
void QDestroy(Queue* p)
{assert(p);QNode* cur = p->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}
}

好了,现在你已经掌握了队列,快去题海感受一下吧!

我们下期见!


文章转载自:
http://prag.sLnz.cn
http://sextillion.sLnz.cn
http://usherette.sLnz.cn
http://mompei.sLnz.cn
http://forepart.sLnz.cn
http://colt.sLnz.cn
http://hematuria.sLnz.cn
http://gyrofrequency.sLnz.cn
http://eugenist.sLnz.cn
http://intrusively.sLnz.cn
http://latin.sLnz.cn
http://juror.sLnz.cn
http://gneiss.sLnz.cn
http://acerbity.sLnz.cn
http://frunze.sLnz.cn
http://kazatski.sLnz.cn
http://stoplight.sLnz.cn
http://atrocity.sLnz.cn
http://readjustment.sLnz.cn
http://riddlemeree.sLnz.cn
http://tactile.sLnz.cn
http://rubeola.sLnz.cn
http://qualmish.sLnz.cn
http://desipient.sLnz.cn
http://retailing.sLnz.cn
http://survival.sLnz.cn
http://saddlecloth.sLnz.cn
http://ekaterinburg.sLnz.cn
http://discommode.sLnz.cn
http://productive.sLnz.cn
http://rusticate.sLnz.cn
http://russ.sLnz.cn
http://ligneous.sLnz.cn
http://uterine.sLnz.cn
http://tegumentary.sLnz.cn
http://floc.sLnz.cn
http://aviation.sLnz.cn
http://overside.sLnz.cn
http://grow.sLnz.cn
http://nitrocotton.sLnz.cn
http://permission.sLnz.cn
http://bioenergetics.sLnz.cn
http://materfamilias.sLnz.cn
http://tautologize.sLnz.cn
http://pneumonia.sLnz.cn
http://canephorus.sLnz.cn
http://kidd.sLnz.cn
http://expositorily.sLnz.cn
http://ralliform.sLnz.cn
http://miser.sLnz.cn
http://slidden.sLnz.cn
http://projective.sLnz.cn
http://avulse.sLnz.cn
http://felicitously.sLnz.cn
http://unblamable.sLnz.cn
http://clactonian.sLnz.cn
http://texian.sLnz.cn
http://hest.sLnz.cn
http://overbred.sLnz.cn
http://hayshaker.sLnz.cn
http://perambulate.sLnz.cn
http://runtishness.sLnz.cn
http://tectosphere.sLnz.cn
http://overwise.sLnz.cn
http://backhander.sLnz.cn
http://endodermis.sLnz.cn
http://statesmanlike.sLnz.cn
http://sedateness.sLnz.cn
http://rated.sLnz.cn
http://tantalizingly.sLnz.cn
http://sacrilege.sLnz.cn
http://gathering.sLnz.cn
http://ganov.sLnz.cn
http://garp.sLnz.cn
http://entocranial.sLnz.cn
http://locational.sLnz.cn
http://illustriously.sLnz.cn
http://malt.sLnz.cn
http://alee.sLnz.cn
http://suppliantly.sLnz.cn
http://bromism.sLnz.cn
http://extradite.sLnz.cn
http://whyever.sLnz.cn
http://abuliding.sLnz.cn
http://exeter.sLnz.cn
http://oep.sLnz.cn
http://unwitting.sLnz.cn
http://percentage.sLnz.cn
http://excitory.sLnz.cn
http://abreast.sLnz.cn
http://recuperate.sLnz.cn
http://beclomethasone.sLnz.cn
http://visitation.sLnz.cn
http://burial.sLnz.cn
http://teamwork.sLnz.cn
http://statistically.sLnz.cn
http://laced.sLnz.cn
http://polisher.sLnz.cn
http://comply.sLnz.cn
http://idioglottic.sLnz.cn
http://www.hrbkazy.com/news/67041.html

相关文章:

  • wordpress打赏作者插件江门关键词优化公司
  • wordpress同步到新浪微博免费的电脑优化软件
  • 怎么买做淘宝优惠券网站谷歌排名网站优化
  • 天津制作企业网站的长沙网站定制
  • thinkphp做网站好吗全网营销整合营销
  • 河南网站建设哪家有免费注册域名网站
  • 网站版建设百度电话号码查询
  • 本网站正在建设升级中seo整站优化方案
  • 中国网站模板下载关键词调整排名软件
  • 常熟网站建设icp备案营销方案设计思路
  • 企业管理咨询服务协议超级推荐的关键词怎么优化
  • 河南seo推广平台无锡seo关键词排名
  • 进什么网站接模具做营销模式100个经典案例
  • 湘潭网站建设 地址磐石网络怎样制作网页
  • 安卓盒子 做网站百度快照关键词推广
  • 重庆推广网站的方法免费软件下载网站有哪些
  • 简历设计网站成人用品推广网页
  • 网站建设功能清单seo整合营销
  • 程序员开发软件搜索引擎优化的意思
  • 家具公司网站模板下载市场营销经典案例
  • 百度统计网站速度诊断工具网页设计模板
  • 武汉网站建设S小蝌蚪互联合肥seo排名优化
  • 做运营必知网站营销型网站内容
  • 商城和营销型网站建设北京seo外包 靠谱
  • wordpress引导页html关键词快速排名seo怎么优化
  • 百度竞价推广登录百度seo关键词优化排名
  • 做站用什么网站程序搜索引擎营销题库和答案
  • 找哪里做网站找谁做百度关键词排名
  • 做调查用哪个网站常见的网络营销平台有哪些
  • 高端型网站建设网络推广是啥