《数据结构基础教程》习题及解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构基础教程》习题及解答
《数据结构基础教程》习题解答(新)
第1章习题解答
一、填空
1.数据是指所有能够输入到计算机中被计算机加工、处理的符号的集合。
2.可以把计算机处理的数据,笼统地分成数值型和非数值型两大类。
3.数据的逻辑结构就是指数据间的邻接关系。
4.数据是由一个个数据元素集合而成的。5.数据项是数据元素中不可再分割的最小标识单位,通常不具备完整、确定的实际意义,只是反映数据元素某一方面的属性。
6.数据是以数据元素为单位存放在内存的,分配给它的内存区域称为存储结点。
7.每个数据元素都具有完整、确定的实际意义,是数据加工处理的对象。
8.如果两个数据结点之间有着逻辑上的某种
A.只有线性关系B.只有树型关系
C.线性关系和树型关系都不D.线性关系和树型关系都
4.链式存储结构中,每个数据的存储结点里D指向邻接存储结点的指针,用以反映数据间的逻辑关系。
A.只能有1个B.只能有2个C.只能有3个D.可以有多个
5.本书将采用C 来描述算法。
A.自然语言B.流程图(即框图)C.类C语言D.C语言
6.有下面的算法段:
for (i=0; i k++; 其时间复杂度为 B 。 A.O(1) B.O(n) C.O(log2n) D.O(n2) 三、问答 1.中国百家姓中的赵、钱、孙、李、周、吴、郑、王……等姓氏数据之间,是一种什么样的邻 接关系,为什么? 答:是一种线性关系,因为这些姓氏之间符合关系的“有头有尾,顺序排列”的特点。 2.什么是数据结点?什么是存储结点?它们间有什么关系? 答:数据结点即是数据集合中的一个数据元素,存储结点是存放数据结点的内存单位。在存储结点里,不仅要存放数据结点的内容,还要(显式或隐式地)存放数据结点间的逻辑关系。3.为什么说链式存储既提高了存储的利用率,又降低了存储的利用率? 答:由于链式存储是通过指针来体现数据元素之间的逻辑关系的,因此,存储结点可以不占用存储器的连续存储区。从这个意义上说,链式存储能够充分利用存储器中小的存储区,因此提高了存储器的利用率。另一方面,链式存储中的存储结点不仅要存放数据元素,还要占用适当的存储区来存放指针,这是一种额外的存储开销。从这个意义上说,链式存储降低了存储器的利用率。 4.列举几个数据之间具有树型结构的实际例子。 答:学校各级管理之间,是一种分支层次结构;一本书的书目,是一种分支层次结构。 5.判断如下除法过程是否是一个算法,为什么: (1)开始; (2)给变量m赋初值5,给变量n赋初值0; (3)m=m/n; (4)输出m; (5)结束。 答:因为0不能为除数,本题第(3)步不具有有效性,所以它不是一个算法。但如果n的初值不为0,则是一个正确的算法。 四、应用 1.用类C语言中的do-while语句,描述输出整数1、2、3、……、9、10的过程。 答:算法编写如下。 void num () { i=1; do { printf (“i = %d\n”, i ); i = i +1; } while (i<= 10); } 2.用类C语言中的if-else语句,编写算法,描述当输入的数据大于等于0时,输出信息:“输入的是正数”;当输入的数据小于0时,输出信息:“输入的是负数”。 答:算法编写如下。 void judge () { scanf (“%d\n”, &x); if (x>=0) printf (“输入的是正数”); else printf (“输入的是负数”); } 3.分析算法段中标有记号“#1”和“#2”的基本操作的执行次数: for ( i=0; i for (j=0; j { #1 y=1; for (k=0; k #2 y=y+1; } 答:标有记号“#1”的基本操作的执行次数是:n2;标有记号“#2”的基本操作的执行次数是:n3。 4.给出下面3个算法段的时间复杂度: (1)x++; (2)for (j=1; j x++; (3)for (j=1; j<=n; j++) { printf (“j=%”, j); for (k=j; k<=n; k++) x++; } 答:(1)的时间复杂度为O(1); (2)的时间复杂度O(n); (3)中“printf (“j=%”, j);”执行次数的数量级为O(n),“x++;”执行次数是: n+(n-1)+(n-2)+……+2+1 = n(n+1)/2 其数量级为O(n2),因此整个算法段的时间复杂度应该是O(n2)。 第2章习题解答 一、填空 1.当一组数据的逻辑结构呈线性关系时,在 数据结构里就称其为线性表。 2.线性表中数据元素的个数n称为线性表的 3.以顺序存储结构实现的线性表,被称为顺序表。 4.以链式存储结构实现的线性表,被称为链表。 5.不带表头结点的链表,是指该链表的表头指针直接指向该链表的起始结点。 6.在一个双链表中,已经由指针ptr指向需要删除的存储结点,则删除该结点所要执行的两条操作是①ptr->Prior->Next = ptr->Next; ②ptr->Next->Prior = ptr->Prior; 。 7.设tail是指向非空、带表头结点的循环单链表的表尾指针。那么,该链表起始结点的存储位置应该表示成tail->Next->Next 。 8.在一个不带表头结点的非空单链表中,若要在指针qtr所指结点的后面插入一个值为x的结点,则需要执行下列操作: ptr = malloc (size); ptr->Data = x ; ptr->Next = qtr->Next ; qtr->Next = ptr ; 9.顺序表Sq = (a1,a2,a3,…,a n)(n≥1)