- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构队列Queue
Joey.zhu Queue qingkaizhu@ 主要内容 数据结构的概念 队列的定义及应用 队列的基本操作 链队列和循环队列实现 迷宫游戏 inet_itoa引发的思考 数据结构的概念 数据结构(Data Structure)是数据的组织方式。程序中用到的数据都不是孤立的,而是有相互联系的,根据访问数据的需求不同,同样的数据可以有多种不同的组织方式。 数据的组织方式包含了存储方式和访问方式这两层意思,二者是紧密联系的。 例如,数组的各元素是一个挨一个存储的,并且每个元素的大小相同,因此数组可以提供按下标访问的方式,结构体的各成员也是一个挨一个存储的,但是每个成员的大小不同,所以只能用.运算符加成员名来访问,而不能按下标访问。 一个问题中数据的存储方式和访问方式就决定了解决问题可以采用什么样的算法,要设计一个算法就要同时设计相应的数据结构来支持这种算法。 所以对于面向过程的程序设计: 算法+数据结构=程序 队列的定义 队列(Queue)是一种先进先出(FIFO)的线性表。 它只允许在表的一端进行插入,而在另一端删除元素。 允许插入元素的一端叫队尾(Rear), 允许删除元素的一端叫队头(Front)。 插入元素叫做入队,删除元素叫出队。 双端队列 双端队列——队列的变种 双端队列是限定插入和删除操作在表的两端进行的线性表。 受限的双端队列 输出受限 输入受限 队列的应用 打印机 允许多道程序运行的操作系统的作业排队 操作系统管理和分配系统资源 多进程下的管道通讯结构 操作系统中消息机制 队列是一种应用很广泛的数据结构,对于各种具有“先进先出”需要排队处理的问题,都可以应用队列来解决。 队列的基本操作 InitQueue(Q) DestroyQueue(Q) ClearQueue(Q) QueueEmpty(Q) QueueLength(Q) GetHead(Q,e) EnQueue(Q,e) DeQueue(Q,e) QueueTraverse(Q,visit()) 构造空队列 销毁队列 清空队列 检测队列是否为空 获取队列长度 获取队头元素 插入元素 删除元素 队列中每个元素调用visit() 链队列和循环队列 数据的存储方式 链式存储 链队列 顺序存储 顺序队列,循环队列 链队列长度可以不断变长,而顺序队列或循环队列都有最大长度的限制 顺序队列 循环队列 判断队列空间是空还是满可以有3种处理方法: 1.设置个标志位来区别队列空还是满 2.少用一个元素空间,约定以队列头指针在队列尾指针的下一位置上作为队列满的标志 3.记录队列中元素个数是否到限定的最大值 链队列 迷宫游戏 现在我们用队列解决一个有意思的问题 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。 inet_itoa引发的思考 函数原型:char *inet_ntoa (struct in_addr); 功能:讲整型的ip转成点分十进制的字符串 它这字符串存到哪去了? 我没有在形参中传地址进去啊,这不是要返回局部变量了吗? 看代码后发现,原来这个变量是声明成了static类型的,也就表示这个函数不可重入 inet_itoa引发的思考 Static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 编译器如何区分同名的全局变量和静态局部变量的? #includestdio.h int data = 10; int main() { static data = 5; printf(%d\n,data); return 0; } inet_itoa引发的思考 在函数内是编译器如何区别同名的全局变量和局部变量的? 使用 :: 可以引用全局变量,可以我编译不过? inet_itoa引发的思考 * Thank you
您可能关注的文档
最近下载
- 一年级语文下册课件-口语交际:打电话-部编版(9)(共12张PPT)-语文一年级下册课件.ppt VIP
- Unit3LivingLegendsReadingandThinking教学设计高中英语人教版.docx VIP
- 一年级下册语文 口语交际 打电话 课件(共12张PPT).pptx VIP
- 党政领导干部选拔作用工作条例学习内容提纲.doc VIP
- DLT441-2004《火力发电厂高温高压蒸汽管道蠕变监督规程》.pdf VIP
- 五年级美术《为作文画插图》.ppt VIP
- 2026届新高考物理冲刺复习“配速法”解决带电粒子在复合场中的运动.pptx VIP
- 玉米期货分析报告.docx VIP
- 铁道工程技术论文-铁路路基边坡病害及处理措施.docx
- 2025年小学语文部编版五年级下册《选择题》专项练习题(共4组,附答案)(必考.pdf VIP
文档评论(0)