数据结构学习札记1.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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、堆栈有许多有趣的应用。例如:不论何时调用一个函数,被调用函数必须知道怎样返回到其调用者,因此要把返回地

您可能关注的文档

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档