当前位置:文档之家› 华南理工大学数据结构复习提纲一

华南理工大学数据结构复习提纲一

数据结构复习提纲第二部分复习提纲(不分题型)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<log2n< nlog2n< n2<2n< n!< n n1.线性表每个结点都有一个前趋和后继吗?答:开始结点只有一个后继,终端结点只有一个前趋。

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; //结点数据类型,假设为inttypedef 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->data<<endl;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) {q=p;p=p->next;if(p->data-q->data!=x) return 0; //不满足等差关系}return 1;}12.例,删除无头结点的链表中的第i个结点。

解:链表类型定义同上题。

void delete(lklist L,int i) {int k=0;pointer p=L,q;while(k!=i-1) { //找第i-1个结点p=p->next;k++;}q=p->next;p->next=q->next;delete q;}13.例,在无头结点的链表中的第i个结点前插入数据x。

解:链表类型定义同上题。

void insert(lklist L,int I,datatyoe x) {int k=0;pointer p=L,q;while(k!=i-1) { //找第i-1个结点p=p->next;k++;}q=new node;q->data=x;q->next=p->next;p->next=q;}1.何为假上溢?如何克服?2.循环队列如何实现?3.何为栈、队列?两者共同特点?答:栈是限定仅在表为进行插入或删除操作的线性表。

队列是一种先进先出的线性表。

在数据结构上是相同的。

4.链队列、链栈是否都有必要设置头结点?有没有上溢、下溢、假溢出问题?5.例:三个点ABC依次进栈(在进栈的中间可能有出栈)。

问ABC、BCA、CAB能否是可能的出栈序列?解:按先进后出的原则分析,ABC可行:即A进A出、B进B出、C进C出;BCA可行:即A进不出,B进B出、C进C出、A出;CAB不行:C出后,栈内有BA,应B先出。

6.循环队列A[m]中,已知头指针、尾指针与元素个数中的任意两个,求另一个?len=(rear-front+m)%m;rear=(front+len)%m;front=(rear-len+m)%m;7.循环队列A[m]空、满的条件?空:rear=front满:front=(rear+1)%m;8.串、长度、子串、相等、子串定位等的概念;答:串中字符的数目n称为串的长度。

0个字符的串成为空串,它的长度为0。

串的串连是将一个串紧接着存放在另一个串的后面而成的一个新串。

串的连接满足结合率,不满足交换率串的模式匹配问题:子串的定位操作通常称为串的模式匹配。

通常思想是从主串S的第pos个字符起和模式的第一个字符比较,若相等则继续逐个比较后继字符,否则从主串的下一个字符起再重新和模式的字符比较。

依此类推,直至模式T中的每个字符依次和主串S中的一个连续的字符序列相等,则称匹配成功,函数值为和模式T中第一个字符相等的字符在主串S中的序号,否则称模式不匹配,函数值为0。

1.一维数组是否是顺序表?数组元素地址的计算?答:是,2.多维数组的两种储存方式?C数组用哪一种?答:以行序位主序的存储方式和与列序为主的存储方式。

C数组用以行序为主。

3.三元组含义?一般矩阵按三元组存储能否节省空间?答:三元组表表示法:每一个非0元素对于一个三元组(row,col,val),row为非0元素的行下标,col 为非0元素的列下标,val为非0元素的值。

显然,有N个非0元素的,只需要3N个存储单元。

4.何为稀疏矩阵、特殊矩阵?为什么要对矩阵压缩存储?答:稀疏矩阵:对于m*n的矩阵A中若有N个非0元,若N<<m*n,则可称A为稀疏矩阵。

特殊矩阵(1):对称矩阵由于对称性,只需存储上三角或下三角部分,如按行优先顺序存储对称矩阵A,则等价于压缩在一个一维数组B中。

LOC[a ij]=LOC[B[k]]=LOC(a11)+(k-1)*L特殊矩阵(2):上(下)三角矩阵以下三角为例,既当i<j时,a ij=0。

其压缩思路同对称矩阵。

LOC[a ij]=LOC(a11)+(k-1)*L矩阵压缩的原因:在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是0元素。

有时为了节省存储空间,可以对这类矩阵进行压缩储存。

1.二叉树顺序存储后逻辑关系通过什么表示?答:顺序存储结构:按照顺序存储结构的定义,在此约定,用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上的编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。

2.何时用树结构?树是否只能用链式存储?解:表示具有分支和层次关系的数据时用树。

二叉树等特殊情况可用顺序存储。

3.已知二叉树的深度k,则其结点数范围?已知二叉树的结点数,则其深度k范围?4.只有3个结点的二叉排序树有几种形态?解:有5种,见下图所示。

5.完全二叉树有6个叶子,则结点总数就是11吗?解:已知叶子数的完全二叉树一般有两棵,结点数差1,见下图:AB CD E F G H I J KAB CD E F G H I J K L一般,结点数n=n0+n1+n2,而n0=n2+1(二叉树性质),所以n=2n0-1+n1。

相关主题