- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[其它语言学习]2009考研计算机冲刺班数据结构讲义-崔微
数据结构
第1章 绪论
重点归纳
1、(1)数据结构课程主要是研究非数值计算的程序设计问题中的计算机操作对象以及它们之间的关系和操作的学科。
(2)数据结构是指互相之间存在着一种或多种关系的数据元素的集合。
(3)数据结构是一个二元组Data_Structure =(D,R),其中,D是数据元素的有限集,R是D上关系的有限集。
2、数据是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位。
数据项是数据的不可分割的最小单位。
一个数据元素可由若干个数据项组成。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。它实际上就是对该数据结构的定义,定义了一个数据的逻辑结构以及在此结构上的一组算法。
抽象数据类型用三元组(D,S,P)描述.
3、逻辑结构是指数据之间的相互关系。通常分为四类结构:
(1)集合(2)线性结构(3)树型结构(4)图状结构或网状结构
4、存储结构是指数据结构在计算机中的表示,又称为数据的物理结构。通常由四种基本的存储方法实现:
(1)顺序存储方式(2)链式存储方式(3)索引存储方式(4)散列存储方式
5、算法是对特定问题求解步骤的一种描述,是指令的有限序列。其中每一条指令表示一个或多个操作。
具有下列特性:⑴有穷性⑵确定性⑶可行性⑷输入⑸输出。
评价算法:⑴正确⑵可读⑶健壮⑷高效。
6、时间复杂度:以基本运算的原操作重复执行的次数作为算法的时间度量。一般情况下,算法中原操作重复执行的次数是规模n的某个函数T(n)。
常见的渐进时间复杂度有:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n) <O(n!) <O(nn)
注意:有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同。
7、算法的存储空间度量:若输入数据所占空间只取决与问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。
原地工作:若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作。
8、(1)for (int i=1; i=n; i++)
for (int j=1; j=i; j++)
语句频度是n (n+1)/2
(2)for( i=1; i=n; i++)
for (j=1; j=i; j++)
for (k=1; k=j; k++)
语句频度是n (n+1)(n+2)/6
(3)循环条件是 (y+1)2≤n, 即 y≤-1,而 y 的初始值是0,则语句频度应为。
习题:
1. 以下属于逻辑结构的是( )。
A.顺序表 B. 散列表 C. 有序表 D. 单链表
第2章 线性表
重点归纳
1、线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,是最简单、最基本、也是最常用的一种线性结构,
2、顺序表上基本运算的实现
(1)顺序表具有按数据元素的序号随机存取的特点,时间复杂度为O(1)。
(2)按值x查找:主要运算是比较,比较的次数与值x在表中的位置有关,也与表长有关,平均比较次数为(n+1)/2,时间复杂度为O(n)。
(3)插入运算:在第i个位置上插入x,从an到ai都要向下移动一个位置,共移动n-i+1个元素。
等概率情况下,平均移动数据元素的次数:
说明:在顺序表上做插入操作需移动表中一半的数据元素,时间复杂度为O(n)。
(4)删除运算:删除第i个元素,从ai+1到an都要向上移动一个位置,共移动 n-i 个元素。
等概率情况下,平均移动数据元素的次数:
说明:顺序表上作删除运算时大约需要移动表中一半的元素,时间复杂度为O(n)。
3、单链表上基本运算的实现
(1)建立带头结点的单链表
●头插法:读入的数据元素的顺序与生成的链表中元素的顺序是相反的。
LinkList Creat_LinkList1( )
{ LinkList L=(LNode *)malloc(sizeof(LNode));
L-next=NULL; /*空表*/
LNode *s;
int x; /*设数据元素的类型为int*/
scanf("%d",x);while (x!=flag)
{ s=malloc(sizeof(LNode));
s-data=x;
s-next=L-next; L-next=s;
scanf ("%d",x);
}
return L;
}
●尾插法:读入的数据元素的顺序与生成的链表中元素的顺序是一致的。
LinkList Creat_LinkL
文档评论(0)