数据结构复习..docxVIP

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

数据结构复习第一章绪论1.1.1数据是一种描述,C语言中,常用数据类型有int、float、double、char等,当我们描述一样物体时,物体具有各种属性(学生有姓名、年龄、性别),所以有了结构体(struct)。在实际写代码时候,通常用typedef来优化代码typedef struct {long number;char name[10];char sex[3];int age;}StudentType;//typedef记得在后面加分号,#define是没有分号的1.1.2数据的逻辑结构可以分成:集合结构、线性结构、树型结构、图型结构1.1.3数据的存储结构可以分成:顺序存储结构、链式存储结构数据结构讨论的就是:表、堆栈、队列、串、数组、树、二叉树、图1.3算法是描述求解问题方法的操作步骤集合算法的基本特性:输入性、输出性、有穷性、确定性、可执行性算法都应满足五个目标:正确性、可读性、健壮性、高时间效率、高空间效率其中,由于现代存储设备的水平提高了,因此更多考虑的是时间效率,也就是时间复杂度算法的时间复杂度由嵌套最深层语句的频度决定对于循环程序,一般看有几重循环时间复杂度的数量级递增顺序:简单的求时间复杂度的例题可以看书本P9,下面给多几个例题:i=1; k=0 ;while(in) { k=k+10*i;i++; } 解答:基本语句执行了n-1次,故时间复杂度为O(n)x=n; while (x=(y+1)*(y+1)) y++; 解答:设y的初值为0,则第k次循环完后,y的值为k于是循环的退出条件变为:(k+ 1)*(k+ 1) n,也就是k - 1,由于k为正整数,所以k为下取整,这样时间复杂度为O()x=91; y=100; while(y0) if(x100) {x=x-10;y--;} else x++; 解答:这个程序总共循环运行了1000次,但是都与n无关,故时间复杂度O(1)扩展:测试一段代码运行的时间的方法P13#includetime.hdouble t;time_t start, end;time(start);………………;time(end);t = difftime(end, start);//书本上给的这个函数精度并不够,所以需要更高精度的函数可以选择使用clock,具体可以百度一下数据结构复习第二章线性表线性表的特点是可以在任意位置插入和删除线性表分为:顺序存储结构(顺序表)、链式存储结构(链表)线性表的操作:初始化、求个数、插入、删除、获取、销毁等,具体代码请同学们自行查阅书本,或者是看附件中的源码,建议还是自己抄(qiao)一遍,好记性不如烂笔头(烂键盘?)2.2顺序表动态数组头文件:#includestdlib.h函数有:malloc(总长度); calloc(个数, 长度); free(一个指针(地址));int *p;p = (int *) malloc(sizeof(int));free(p);malloc 和 calloc 有什么不同?当内存只剩下很小的零碎空间时,calloc 优于 malloc顺序表中方法的时间复杂度:插入、删除:O(n),其他与n无关的操作:O(1)顺序表的优点:算法简单,内存单元利用率高;可以随机存取表中任一元素,方便快捷顺序表的缺点:需要预先确定数据元素的最大个数;在插入或删除某一元素时,需要移动大量元素2.2链表指针是链表的核心,一个节点的结构体中有数据域和指针域、数据域用于存放数据,指针域存放指向下一个的指针,重点要掌握单链表的各种操作以及实现方法。关于初始化函数为什么要用**head(指针的指针)Initiate(SLNode **head);{*head = (SLNode*)malloc(sizeof(SLNode));(*head)-next = NULL;}我们注意到,因为next是一个SLNode*类型假如函数用的是*head,那么在主函数中创建SLNode *head这个head本身就是一个地址,相当于门牌号,不是实际的房子既然没有房子,也就没有里面的元素(next以及data)而如果我们使用指针的指针,那么首先*head是一个在主函数定义好的实体(虽然这一个门牌号指向的房子不知道是哪一间,但这个门牌号却实际存在)**head指向是一个实体,所以就可以给他赋值head(指针的指针)=======head(指针)========???(地址指向实体,指向明确)(这个对象实际存在)(但指向不明)顺序表中方法的时间复杂度:插入、删除:O(n),撤销单链表:O(n),其他与n无关的操作:O(1)链表的优点:不需要预先确定数据元素的最大个数链表的缺点:因为每个节点都有个指针域,空间效率不高;算法复杂循环单链表P36在初始化时

文档评论(0)

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

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

1亿VIP精品文档

相关文档