华南理工大学数据结构复习提纲一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构复习提纲
第二部分复习提纲(不分题型)
1.数据的三个层次是数据、数据元素和数据项。
2.四种基本存储方式的特点?什么时候逻辑关系可以由存储地址表示?什么时候由指针表示?什么时候存储地址与结点内容有关系?
答:
◆顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构。
◆链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构。
◆索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
◆散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
3.四种基本逻辑结构是什么?逻辑结构与存储结构是否一一对应?逻辑结构与计算机是否有关?
逻辑结构:
答:
4.运算、算法含义?谁定义在存储结构上?谁定义在逻辑结构上?
答:运算是在数据逻辑结构上定义的操作算法。
所谓算法(Algorithm)是对问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。
所谓算法复杂度:
T (n) = O(f(n))
称T (n) 为算法的渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度。O是数量级的符号。
下面我们探讨一下如何估算算法的时间复杂度
算法= 控制结构+ 原操作(固有数据类型的操作)
算法的执行时间=原操作(i)的执行次数×原操作(i)的执行时间
算法的执行时间与原操作执行次数之和成正比
5.运算可分为加工型和___。
5.数据结构一般包括三个方面内容:逻辑结构、储存结构和运算。
6.算法的复杂性与计算机是否有关?
7.算法正确与否一般是用理论证明还是用算例检验?
答:用算例须考虑所有情况,用理论需要严谨的数学证明。
9.时间复杂性一般考虑平均时间复杂性和最坏时间复杂性。
10.程序设计的实质是______和______。
11.将2100、log2n、nlog2n、n n、n2、2n、n!等按增长率从低到高排列是______。
答:2100 1.线性表每个结点都有一个前趋和后继吗? 答:开始结点只有一个后继,终端结点只有一个前趋。 2.头结点有何作用? 3.链表结点的物理地址一定不连续吗?-连续与否都可 4.单链表插入、删除结点的一般过程?(指针修改情况) 如果插入在链表开头:New NewNode; NewNode->Next=Pointer; HEAD->Next=NewNode; 如果插入在链表中间:NewNode->Next=Pointer->Next; Pointer->Next=NewNode; 如果插入在链表末端:NewNode->Next=Pointer->Next; Pointer->Next=NewNode; 如果删除在链表开头: Head->Next=Pointer->Next; free(Pointer); 如果删除在链表中间: Back-〉Next=Pointer-〉Next; free(Pointer); 如果删除在链表末端: Back-〉Next=Pointer-〉Next; free(Pointer); 5.顺序表、单链表优点缺点?是否可以(按值、按序号)随机存取?顺序存取? 答:链表的优点是空间动态分配,插入和删除时不需要移动数据,缺点是不能随机访问。 顺序表的优点是能熟记存取数据元素可以按值随机存储,存取速度快,缺点:插入、删除操作需移动数据。 6.顺序表插入、删除时是否总引起结点的移动? 答:只有插入、删除在表末,不会引起结点的移动。 7.分别对有头结点、无头结点的循环、非循环单链表,如何判断为空?如何判断某结点为尾结点? 8.循环链表主要优点?用尾指针表示循环单链表有什么好处? 答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。 若用头指针来表示该链表,则查找终端结点的时间为O(n)。 9.何为储存密度? 10.例,输出无头结点的单链表中所有奇数。 解:设链表类型定义如下: typedef int datatype; //结点数据类型,假设为int typedef struct node * pointer; //一般结点指针类型 struct node { //结点结构 datatype data; pointer next; }; typedef pointer lklist; //头指针类型 void disp(lklist L) { pointer p; p=L; while(p!=NULL) { if(p->data%2==1) cout< p=p->next; } } 11.例,判断无头结点的链表中结点是否构成等差数列。 解:链表类型定义同上题。 int detect(lklist L) { pointer p,q; //以下用q表示p的前趋 datatype x; q=L;if(q==NULL) return 1; //链表为空 p=q->next;if(p==NULL) return 1; //链表只有1个结点 x=p->data-q->data; //初始结点差 while(p->next!=NULL) {