- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构学习札记1
算法数据结构学札记
执行时大小可变的动态数据结构
1、讨论执行时大小可变的动态数据结构:链表、堆栈、队列、二叉树。 (1)链表:连成一行的数据项的集合,可以在其中的任意位置进行插入和删除操作; (2)堆栈:对于编译器和操作系统都是非常重要的,插入和删除操作只能在堆栈的一端(顶部)进行; (3)队列:代表正在“等待”的一行数据,数据的插入发生在队列的尾部,删除发生在队列的头部; (4)二叉树:可用来快速查找和排序数据、有效地去除重复的数据项、表示文件系统的目录和把表达式编译成机器语言。2、自引用结构:包含一个指针成员,该指针指向与自身同一个类型的结构。例如: struct node{ int data; struct node * nextPtr; } 类型struct node的指针成员指向了正在被声明的struct node类型的结构,所以把这种结构称为自引用结构。其中,nextPtr可以将一个struct node类型的结构与另一个同类型的结构链在一起。3、可以把自引用结构链在一起构成有用的数据结构,如链表、队列、堆栈和树。NULL指针通常表示一个数据结构的结尾,就像NULL字符表示字符串结尾一样。4、建立和维护动态数据结构需要实现动态内存分配,即程序在执行时为了链接新的结点,要能够获得更多的内存空间以及能够释放不再需要的结点。动态分配内存的极限是计算机中可用的物理内存数量,或者是虚拟存储系统中的可用虚拟内存的数量。5、函数malloc和free以及运算符sizeof对于实现动态内存分配是很重要的。 (1)malloc的参数是被分配的内存字节数,返回指向被分配内存的void *类型的指针,通常和sizeof一起 使用。例如: newPtr = malloc(sizeof(struct node)); 如果没有可用的内存,malloc返回NULL指针。在使用函数malloc时,最好测试返回值是否是NULL。如果没有分配所请求的内存,打印出错报文。 (2)free释放占用的内存,即把所占用的内存交回系统,以便能够重新分配使用。例如: free(newPtr); //释放调用malloc动态分配的内存6、如果不及时释放不再需要的内存会使系统过早地用光内存,有时把这种现象称为“内存泄露”(memory leak)。可用free函数把不需要的内存释放掉。 常见的程序设计错误: (1)释放不是用malloc动态分配的内存; (2)引用已经释放的内存;7、链表是用链节(link)指针链在一起的自引用结构(称为“结点”)的线性集合。链表是通过指向链表第一个结点的指针访问的,其后的结点是通过结点中的链节指针成员访问的。通常,链表的最后一个结点中的链节指针被设置为NULL(表示链尾)。8、链表的结点中可以包含任何类型的数据(包括其他结构)。链表、堆栈和队列均是线性数据结构,堆栈和队列是有一些限制的链表。树是非线性数据结构。9、链表是动态的,可以在需要时增长和减少其长度。数组是在编译时分配内存的,其大小是不可改变的;数组的插入和删除操作费时,链表相对灵活;数组连续存放,访问快速,链表中的结点在内存中通常不是连续存放的,不能立即被访问到。但是链表的结点在逻辑上是连续存放的。 为数据结构动态地分配内存能够节省空间,但是指针需要占用存储空间,并且动态分配内存需要一些函数调用开销。10、链表本身就是指向其第一个元素的指针,所以传递链表的地址就建立了一个指向指针的指针(即两次间接引用)。这种表示方法是非常复杂的,设计时要非常仔细。11、给链表增加新结点时,应该把NULL赋给新结点的链节成员——指针应该在使用前初始化。12、堆栈是一种受限制的链表,结点的添加和删除只能在栈顶进行,因此,堆栈被称为“后进先出”(last-in, first-out, LIFO)的数据结构。13、堆栈是用指向栈顶元素的指针引用的,堆栈最后一个结点中的链节成员被设置为表示栈底的NULL。堆栈和链表的图示是相同的,差别在于:链表的插入和删除可在链表中的任何地方进行,而堆栈中的插入和删除操作只能发生在栈顶。14、操作堆栈的主要的函数有push和pop。push建立一个新的结点并把它压入栈中,pop删除栈顶结点、释放分配给该弹出式结点的内存并返回弹出值。15、堆栈有许多有趣的应用。例如:不论何时调用一个函数,被调用函数必须知道怎样返回到其调用者,因此要把返回地
您可能关注的文档
- 抓住特点说动物(口语交际).doc
- 抓科研促提高.doc
- 护理管理环节法律风险97334.ppt
- 护理骨干1.doc
- 报价表 艺术设计.doc
- 报市里通宇实业有限公司党委典型材料.doc
- 把毕业论文里的字母和数字都改成Time New Roman格式.doc
- 抓好语文的基本功.doc
- 拆装元件.ppt
- 拆装工具使用安全.doc
- DB14T 3462-2025 井工煤矿人工智能视觉识别技术要求.pdf
- 专练01 七上《朝花夕拾》—2024年中考语文名著导读抢分练(全国通用)(原卷版).pdf
- 专题29 小说常考题+病句的10个“不放过”-2023年中考语文热点作文素材解读及运用.pdf
- 专题15 最新热点时评与写作角度解读+「人民日报」时评文章精选金句汇总-2023年中考语文热点作文素材解读及运用.pdf
- 专题12 九下《儒林外史》—2024年中考语文名著导读抢分练(解析版).pdf
- 专题28 思辨类话题名言金句+5篇关于经典人物的精彩时评+热点时评-2023年中考语文热点作文素材解读及运用.pdf
- 11 七下期中记叙文阅读训练-2022-2023学年七年级语文下册知识梳理与能力训练(部编版).pdf
- 04 人物传记阅读 -2022-2023学年七年级语文下册知识梳理与能力训练(部编版) .pdf
- 专题06 八上《红星照耀中国》—2024年中考语文名著导读抢分练(解析版).pdf
- 专练02 七上《西游记》—2024年中考语文名著导读抢分练(全国通用)(原卷版).pdf
文档评论(0)