当前位置:文档之家› 《数据结构基础教程》习题及解答

《数据结构基础教程》习题及解答

《数据结构基础教程》习题解答(新)第1章习题解答一、填空1.数据就是指所有能够输入到计算机中被计算机加工、处理得符号得集合。

2.可以把计算机处理得数据,笼统地分成数值型与非数值型两大类。

3.数据得逻辑结构就就是指数据间得邻接关系。

4.数据就是由一个个数据元素集合而成得。

5.数据项就是数据元素中不可再分割得最小标识单位,通常不具备完整、确定得实际意义,只就是反映数据元素某一方面得属性。

6.数据就是以数据元素为单位存放在内存得,分配给它得内存区域称为存储结点。

7.每个数据元素都具有完整、确定得实际意义,就是数据加工处理得对象。

8.如果两个数据结点之间有着逻辑上得某种关系,那么就称这两个结点就是邻接得。

9.在一个存储结点里,除了要有数据本身得内容外,还要有体现数据间邻接关系得内容。

10.从整体上瞧,数据在存储器内有两种存放得方式:一就是集中存放在一个连续得内存存储区中;一就是利用存储器中得零星区域, 分散地存放在内存得各个地方。

11.在有些书里,数据得“存储结构”也称为数据得“物理结构”。

12.“基本操作”就是指算法中那种所需时间与操作数得具体取值无关得操作。

二、选择1.在常见得数据处理中, B 就是最基本得处理。

A.删除B.查找C.读取D.插入2.下面给出得名称中, A 不就是数据元素得同义词。

A.字段B.结点C.顶点D.记录3. D 就是图状关系得特例。

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<n; 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 (“输入得就是正数”);elseprintf (“输入得就是负数”);}3.分析算法段中标有记号“#1”与“#2”得基本操作得执行次数:for ( i=0; i<n; i++)for (j=0; j<n; j++){#1 y=1;for (k=0; k<n; k++)#2 y=y+1;}答:标有记号“#1”得基本操作得执行次数就是:n2;标有记号“#2”得基本操作得执行次数就是:n3。

4.给出下面3个算法段得时间复杂度:(1)x++;(2)for (j=1; j<n; 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章习题解答一、填空在数据结构里就称其为线性表。

被称为顺序表。

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)中,每个数据元素需要占用w个存储单元。

若m 为元素a1得起始地址,那么元素a n得存储地址就是m+(n-1)*w。

10.当线性表得数据元素个数基本稳定、很少进行插入与删除操作,但却要求以最快得速度存取表中得元素时,我们应该对该表采用顺序存储结构。

二、选择1.下面,对非空线性表特点得论述, C 就是正确得。

A.所有结点有且只有一个直接前驱B.所有结点有且只有一个直接后继C.每个结点至多只有一个直接前驱,至多只有一个直接后继D.结点间就是按照1对多得邻接关系来维系其逻辑关系得2.一般单链表Lk_h为空得判定条件就是 A 。

A.Lk_h == NULLB.Lk_h->Next == NULLC.Lk_h->Next == Lk_hD.Lk_h != NULL5.在一个单链表中,已知qtr所指结点就是ptr所指结点得直接前驱。

现要在qtr所指结点与ptr所指结点之间插入一个rtr所指得结点,要执行得操作应该就是 C 。

A.rtr->Next = ptr->Next; ptr->Next = rtr;B.ptr->Next = rtr->Next;C.qtr->Next = rtr; rtr->Next = ptr;D.ptr->Next = rtr; rtr->Next = qtr->Next;6.在一个单链表中,若现在要删除ptr指针所指结点得直接后继结点,则需要执行得操作就是 A 。

A.ptr->Next = ptr->Next->Next ;B.ptr = ptr->Next; ptr->Next = ptr->Next->Next ;C.ptr = ptr->Next->Next ;D.ptr->Next ptr ;7.在长度为n得顺序表中,往其第i个元素(1≤i≤n)之前插入一个新得元素时,需要往后移动 B 个元素。

A.n-iB.n-i+1C.n-i-1D.i8.在长度为n得顺序表中,删除第i个元素(1≤i≤n)时,需要往前移动 A 个元素。

A.n-iB.n-i+1C.n-i-1D.i9.设tail就是指向一个非空带表头结点得循环单链表得尾指针。

那么,删除链表起始结点得操作应该就是 D 。

ZkFAM。

A.ptr = tail ;B.tail = tail->Next ;tail = tail->Next ; free (tail) ;free (ptr);C.tail = tail->Next->Next ;D.ptr = tail->Next->Next ;Free (tail); tail->Next->Next = ptr->Next ;Free (ptr); free (ptr);10.在单链表中,如果指针ptr所指结点不就是链表得尾结点,那么在ptr之后插入由指针qtr所指结点得操作应该就是 B 。

A.qtr->Next = ptr ;B.qtr->Next = ptr->Next ;ptr->Next = qtr ; ptr->Next = qtr ;C.qtr->Next = ptr->Next ;D.ptr->Next = qtr ;ptr = qtr ; qtr->Next = ptr ;三、问答1.试问,如下得线性表:L = (29,25,21,17,13,11,7,5,3,1)就是有序线性表还就是无序线性表?答:L就是一个有序线性表。

2.线性表L第i个存储结点a i得起始地址LOC(a i)可以通过下面得公式计算得到:LOC(a i)= LOC(a i-1)+k其中k表示存储结点得长度。

这个公式对吗?为什么?答:这个公式就是对得,因为第i个存储结点a i得起始地址LOC(a i),实际上就就是等于第i-1个存储结点a i-1得起始地址LOC(a i-1)加上一个存储结点得长度k得到。

3.试说明创建顺序表算法Create_Sq ()中,Sq_max与Sq_num得不同之处。

答:Sq_max代表得就是顺序表得最大长度,也就就是它最多可以容纳下多少个数据元素,顺序表创建后,Sq_max就是一个保持不变得常量;Sq_num代表得就是顺序表内当前拥有得数据元素个数,在顺序表创建后,随着对数据元素进行得插入、删除操作,Sq_num将会不断地发生变化。

相关主题