数据结构课程课后习题答案.
数据结构课后题答案

else {
smaller=pb; pb=pb->next; smaller->next = c->next; c->next = smaller; }
return(C); }
西北大学可视化技术研究所
10.已知有单链表表示的线性表中含有三类字 符的数据元素(如字母字符,数字字符和其它 字符),试编写算法来构造三个以循环链表表 示的线性表,使每个表中只含同一类的字符, 且利用原表中的结点空间作为这三个表的结点 空间,头结点可另辟空间。
西北大学可视化技术研究所
西北大学可视化技术研究所
答案:435612不可以 原因 (1)S:1234 X:43 (2)S:5 X: 5 (3)S:6 X: 6 (4)X:21 135426 可以 原因(1)S:1 X:1 (2)S:23 X: 3 (3)S:45 X: 54 (4)X:2 (5)S:6 X: 6
西北大学可视化技术研究所
G. S->next= NULL; 。
西北大学可视化技术研究所
供选择的语句有:
A. P->next=S; B. P->next= P->next->next; C. P->next= S->next;
E. S->next= P->next; F. S->next= L;
G. S->next= NULL;
数据结构习题参考答案

数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。
常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。
解答:使用两个栈,一个用于入队操作,一个用于出队操作。
入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。
复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。
(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。
解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。
算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。
- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。
复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。
2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。
常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解1. 习题一:数组求和题目描述:给定一个整数数组,编写一个函数来计算它的所有元素之和。
解题思路:遍历数组,将每个元素累加到一个变量中,最后返回累加和。
代码实现:```pythondef sum_array(arr):result = 0for num in arr:result += numreturn result```2. 习题二:链表反转题目描述:给定一个单链表,反转它的节点顺序。
解题思路:采用三指针法,依次将当前节点的下一个节点指向上一个节点,然后更新三个指针的位置,直到链表反转完毕。
代码实现:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverse_list(head):prev = Nonecurr = headwhile curr:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev```3. 习题三:二叉树的层序遍历题目描述:给定一个二叉树,返回其节点值的层序遍历结果。
解题思路:采用队列来实现层序遍历,先将根节点入队,然后循环出队并访问出队节点的值,同时将出队节点的左右子节点入队。
代码实现:```pythonclass TreeNode:def __init__(self, val=0, left=None, right=None): self.val = valself.left = leftself.right = rightdef level_order(root):if not root:return []result = []queue = [root]while queue:level = []for _ in range(len(queue)):node = queue.pop(0)level.append(node.val)if node.left:queue.append(node.left)queue.append(node.right)result.append(level)return result```4. 习题四:堆排序题目描述:给定一个无序数组,使用堆排序算法对其进行排序。
数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
《数据结构》课后习题答案(第2版)

1 填空题(1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系(5)零或多个输入一个或多个输出有穷性确定性可行性(6)自然语言程序设计语言流程图伪代码,伪代码(7)问题规模(8)O(1) O(nlog2n)2 选择题(1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E3 判断题×××√×第二章1 填空题(1)表长一半表长位置(2)108(3)p->next=(p->next)->next;(4)运算方便(5)p->next=head;(6)s->next=rear->next rear->next=s; rear=s;q=rear->next->next; rear->next->next=q->next; delete q;(7)O(1) O(n)(8)循环单链表循环双链表双链表2 选择题(1) A B (2) D (3) B (4) A (5) A (6) D(7) B(8) B(9) C(10)B(11)B(12)D(13)A(14)A3 判断题×××××1 填空题(1)1003H(2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈(4)abc+*d-(5)后进先出先进先出操作位置受限(6)假溢出(7)(rear-front+n)% n(8)O(1) O(n)2 选择题(1) C (2) D (3) C (4) B(5) B(6) B(7) D(8) A(9) C3 判断题×√√××第四章1 填空题(1)数据元素的类型是字符(2)长度相等且对应位置字符相等(3)存取修改顺序存储(4)1140(5)d+41(6)三元组顺序表十字链表2 选择题(1) B (2) D E K (3) B (4) C(5) D(6) C(7) D3 判断题×√√××1 填空题(1)有且仅有一个互不相交(2)度孩子双亲(3)2i-1(n+1)/2 (n-1)/2 (4)2h-1 2h-1(5)2k-1(6)50(7)12(8)CDBGFEA (9)2n n-1 n+1 (10)n n-12 选择题(1) D (2) D (3) B (4) C (5) B C (6) D(7) A(8) A B(9) D A(10)B(11)B(12)C(13)D(14)C3 判断题×√×√×第六章1 填空题(1)0 n(n-1)/2 0 n(n-1) (2)自身(3)邻接矩阵邻接表(4)O(n+e)(5)第j列所有元素之和(6)出度(7)前序栈层序队列(8)O(n2) O(elog2e) (9)回路(10)v i v j v k2 选择题(1) c (2) A G (3) C (4) B (5) D (6) C F(7) B(8) D(9) A(10)A(11)A(12)C(13)A(14)C C F(15)B3 判断题√√××××√×1 填空题(1)顺序存储和链接存储顺序存储按照关键码有序(2) 1 ,7(3)8,59/15(4) 4(5)62(6)开放定址法拉链法(7)散列查找(8)通过关键码计算记录的存储地址并进行一定的比较2 选择题(1) B (2) D B (3) A D (4) D (5) A(6) C(7) C(8) B(9) D(10)A(11)C(12)D3 判断题×××××第八章1 填空题(1)查找(2)正序n-1 反序n(n-1)/2 (3) 3(4) 3(5)O(nlog2n) O(n)(6)n-1(7)50(8)602 选择题(1) C (2) C (3) C (4) B (5) A (6) A(7) B C B(8) C(9) D(10)A D(11)B(12)D,B,E,A,C(13)C,A,D,B,B,D,F(14)C(15)D3 判断题×√××√。
数据结构课后习题答案(耿国华版

第1章绪论2 、(1)×(2)×(3) √3 、(1)A(2)C(3)C5、f or计(算i=下1n程;序中 1 得语句频度for(j=1;j<=i; j++)for(k=1;k<=j;k ++)x=x+1;【解答】 x=x+1 得语句频度为:T(n)=1+(1+2)+(1+2+3)+. …+(1+2+……+n)=n(n+1)(n+2)/66 、编写算法,求一元多项式p。
(x)=a。
+a,x+a₂X2+……、+a Xn得值p(x) 并确定算法中每一语句得执行次数与整个算法得时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中得输入为a,(i=01,…n)、x 与n,输出为P。
(x)。
算法得输入与输出采用下列方法(1)通过参数表中得参数显式传递(2)通过全局变量隐式传递。
讨论两种方法得优缺点,并在算法中以您认为较好得一种实现输入输出.【解答】(1)通过参数表中得参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参预形参得个数,从而减少内存空间以及传递数据时得时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue({ int,in;floatx,a[]p;pri n tf(hn=”);s c anf(“%f,”&n);printf(“x=”;)sca nf(“%f&x);f or(i=0;i<n; i++)s c anf(%f ,&a[i]; /*执行次数:n 次 */p=a[0];for (i=1;i<=n;i++){ p=p+a [i]*x; /*执行次数:n次*/x= x*x;}prin t f(%f” p);}算法得时间复杂度:T(n)=0(n)通过参数表中得参数显式传递f loat PolyVa lue(float a[ ], float x, i nt n)f 1 oat p, s;int;is p a X0];for(=1;i<= n;i++)/执行次数:n 次*/{s=s+a [i]* p;p=p*x;}re turn(p);算法得时间复杂度:T(n)=O(n)第2章线性表习题1、填空:(1)在顺序表中插入或者删除一个元素,需要平均挪移一半元素,具体挪移得元素个数与插入或者删除得位置有关。
《数据结构》课后参考答案

单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。
(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。
(ㄨ)(3)数据元素是数据的最小单位。
(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。
(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。
(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。
(√)(7)数据的存储结构是数据的逻辑结构的存储映像。
(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。
(ㄨ)(9)数据的逻辑结构是依赖于计算机的。
(√)(10)算法是对解题方法和步骤的描述。
二.填空题(1)数据有逻辑结构和存储结构两种结构。
(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。
(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。
(4)树形结构和图形结构合称为非线性结构。
(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。
(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。
(7)数据的存储结构又叫物理结构。
(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。
(9)线性结构中的元素之间存在一对一的关系。
(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。
(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。
(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。
(14)算法是一个有穷指令的集合。
(15)算法效率的度量可以分为事先估算法和事后统计法。
(16)一个算法的时间复杂性是算法输入规模的函数。
(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n 的函数。
数据结构课程课后习题集答案解析

《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
答:①数据元素②关系数据结构简明教程(4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构简明教程》练习题及参考答案练习题11. 单项选择题(1)线性结构中数据元素之间是()关系。
A.一对多B.多对多C.多对一D.一对一答:D(2)数据结构中与所使用的计算机无关的是数据的()结构。
A.存储B.物理C.逻辑D.物理和存储答:C(3)算法分析的目的是()。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性答:C(4)算法分析的两个主要方面是()。
A.空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性答:A(5)计算机算法指的是()。
A.计算方法B. 排序方法C.求解问题的有限运算序列D.调度方法答:C(6)计算机算法必须具备输入、输出和()等5个特性。
A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性答:B2. 填空题(1)数据结构包括数据的①、数据的②和数据的③这三个方面的内容。
答:①逻辑结构②存储结构③运算(2)数据结构按逻辑结构可分为两大类,它们分别是①和②。
答:①线性结构②非线性结构(3)数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
数据结构简明教程答:①数据元素 ②关系 (4)在线性结构中,第一个结点 ① 前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点 ② 后继结点,其余每个结点有且只有1个后继结点。
答:①没有 ②没有 (5)在树形结构中,树根结点没有 ① 结点,其余每个结点有且只有 ② 个前驱结点;叶子结点没有 ③ 结点,其余每个结点的后继结点数可以是 ④ 。
答:①前驱 ②1 ③后继 ④任意多个(6)在图形结构中,每个结点的前驱结点数和后继结点数可以是( )。
答:任意多个(7)数据的存储结构主要有四种,它们分别是 ① 、 ② 、 ③ 和 ④ 存储结构。
答:①顺序 ②链式 ③索引 ④哈希(8)一个算法的效率可分为 ① 效率和 ② 效率。
答:①时间 ②空间3. 简答题(1)数据结构和数据类型两个概念之间有区别吗?答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素的集合。
数据类型不仅定义了一组数据元素,而且还在其上定义了一组操作。
(2)简述线性结构、树形结构和图形结构的不同点。
答:线性结构反映结点间的逻辑关系是一对一的,树形线性结构反映结点间的逻辑关系是一对多的,图在结构反映结点间的逻辑关系是多对多的。
(3)设有采用二元组表示的数据逻辑结构S=(D,R),其中D={a ,b ,…,i },R={(a ,b ),(a ,c ),(c ,d ),(c ,f ),(f ,h ),(d ,e ),(f ,g ),(h ,i )},问相对于关系R ,哪些结点是开始结点,哪些结点是终端结点?答:该逻辑结构为树形结构,其中a 结点没有前驱结点,称为根结点,b 、e 、g 、i 结点没有后继结点,是终端结点,也称为叶子结点。
(4)以下各函数是算法中语句的执行频度,n 为问题规模,给出对应的时间复杂度: T 1(n )=n log 2n -1000log 2n T 2(n )=3log 2n -1000log 2n T 3(n )=n 2-1000log 2nT 4(n )=2n log 2n -1000log 2n答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。
(5)分析下面程序段中循环语句的执行次数。
int j=0,s=0,n=100; do { j=j+1;s=s+10*j;} while (j<n && s<n);答:j =0,第1次循环:j =1,s =10。
第2次循环:j =2,s =30。
第3次循环:j =3,s =60。
3log 2n3练习题及参考答案第4次循环:j =4,s =100。
while 条件不再满足。
所以,其中循环语句的执行次数为4。
(6)执行下面的语句时,语句s++的执行次数为多少?int s=0;for (i=1;i<n-1;i++) for (j=n;j>=i;j--)s++;答:语句s 的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i inj 。
(7)设n 为问题规模,求以下算法的时间复杂度。
void fun1(int n) { int x=0,i;for (i=1;i<=n;i++) for (j=i+1;j<=n;j++)x++;}答:其中x++语句属基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。
(8)设n 为问题规模,是一个正偶数,试计算以下算法结束时m 的值,并给出该算法的时间复杂度。
void fun2(int n) { int m=0;for (i=1;i<=n;i++) for (j=2*i;j<=n;j++)m++;}答:由于内循环j 的取值范围,所以i ≤n /2,则∑∑∑-===--==2/122/124/))12((n i nij n i n i n m ,该程序段的时间复杂度为O(n 2)。
上机实验题1有一个整型数组a ,其中含有n 个元素,设计尽可能好的算法求其中的最大元素和次大元素,并采用相关数据测试。
解:maxs 算法用于返回数组a[0..n -1]中的最大元素值max1和次大元素值max2,max1和max2设计为引用类型。
对应的程序如下:#include <stdio.h>void maxs(int a[],int n,int &max1,int &max2) { int i;max1=max2=a[0]; for (i=1;i<n;i++)数据结构简明教程if (a[i]>max1){ max2=max1;max1=a[i];}else if (a[i]>max2)max2=a[i];}void main(){ int a[]={1,4,10,6,8,3,5,7,9,2};int n=10;int max1,max2;maxs(a,n,max1,max2);printf("最大元素值=%d,次大元素值=%d\n",max1,max2);}练习题21. 单项选择题(1)数据在计算机存储器内表示时,物理地址与逻辑地址相对顺序相同并且是连续的,称之为()。
A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构答:C(2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i(2≤i≤n)个结点的前驱结点B.在第i(1≤i≤n)个结点后插入一个新结点C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序答:A(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
A.8B.63.5C.63D.7答:B(4)链式存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B.只有一部分,存放结点值C.只有一部分,存储表示结点间关系的指针D.分两部分,一部分存放结点值,另一部分存放结点所占单元数答:A(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
练习题及参考答案A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续或不连续都可以答:D(6)一个线性表在()情况下适用于采用链式存储结构。
A.需经常修改其中的结点值B.需不断对其进行删除插入C.其中含有大量的结点D.其中结点结构复杂答:B(7)单链表的存储密度()A.大于1B.等于1C.小于1D.不能确定答:C2. 填空题(1)在顺序表中插入或删除一个元素时,需要平均移动(①)元素,具体移动的元素个数与(②)有关。
答:①表中一半②表长和该元素在表中的位置(2)向一个长度为n的顺序表的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动()个元素。
答:n-i+1(3)向一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动()个元素。
答:n-i(4)在顺序表中访问任意一个元素的时间复杂度均为(①),因此顺序表也称为(②)的数据结构。
答:①O(1) ②随机存取(5)顺序表中逻辑上相邻的元素的物理位置(①)相邻。
单链表中逻辑上相邻的元素的物理位置(②)相邻。
答:①一定②不一定(6)在带头结点的单链表中,除头结点外,任一结点的存储位置由()指示。
答:其前驱结点的链域的值(7)在含有n个数据结点的单链表中要删除已知结点*p,需找到它的(①),其时间复杂度为(②)。
答:①前驱结点的地址②O(n)(8)含有n(n>1)个结点的循环双向链表中,为空的指针域数为()。
答:03. 简答题(1)试比较顺序存储结构和链式存储结构的优缺点。
在什么情况下用顺序表比链表好?答:顺序存储结构中,相邻数据元素的存放地址也相邻,并要求内存中可用存储单元5数据结构简明教程的地址必须是连续的。
其优点是存储密度大,存储空间利用率高;缺点是插入或删除元素时不方便。
链式存储结构中,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。
其优点是插入或删除元素时很方便,使用灵活;缺点是存储密度小,存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
(2)对于表长为n的顺序表,在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需要移动的元素的平均个数为多少?删除一个元素所需要移动的平均个数为多少?答:插入一个元素所需要移动的元素的平均个数为(n-1)/2,删除一个元素所需要移动的平均个数为n/2。
(3)在链表中设置头结点的作用是什么?答:在链表中设置头结点后,不管链表是否为空表,头结点指针均不空,并使得对链表的操作(如插入和删除)在各种情况下统一,从而简化了算法的实现过程。
(4)对于双链表和单链表,在两个结点之间插入一个新结点时需修改的指针各为多少个?答:对于双链表,在两个结点之间插入一个新结点时,需修改前驱结点的next域、后继结点的prior域和新插入结点的next、prior域。
所以共修改4个指针。
对于单链表,在两个结点之间插入一个新结点时,需修改前一结点的next域,新插入结点的next域。