多任务下的数据结构与算法 配书光盘 习题与思考答案与提示

合集下载

数据结构与算法分析课后题答案

数据结构与算法分析课后题答案

Chapter 5:Hashing5.1(a)On the assumption that we add collisions to the end of the list (which is the easier way if a hash table is being built by hand),the separate chaining hash table that results is shown here.4371132361734344419996791989123456789(b)96794371198913236173434441990123456789-25-w w w .k h d a w .com课后答案网(c)96794371132361734344198941990123456789(d)1989cannot be inserted into the table because hash 2(1989)=6,and the alternative locations 5,1,7,and 3are already taken.The table at this point is as follows:4371132361739679434441991234567895.2When rehashing,we choose a table size that is roughly twice as large and prime.In our case,the appropriate new table size is 19,with hash function h (x ) = x (mod 19).(a)Scanning down the separate chaining hash table,the new locations are 4371in list 1,1323in list 12,6173in list 17,4344in list 12,4199in list 0,9679in list 8,and 1989in list 13.(b)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 14because both 12and 13are already occu-pied,and 4199in bucket 0.-26-w ww .k h d a w.com课后答案网(c)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 16because both 12and 13are already occu-pied,and 4199in bucket 0.(d)The new locations are 9679in bucket 8,4371in bucket 1,1989in bucket 13,1323in bucket 12,6173in bucket 17,4344in bucket 15because 12is already occupied,and 4199in bucket 0.5.4We must be careful not to rehash too often.Let p be the threshold (fraction of table size)atwhich we rehash to a smaller table.Then if the new table has size N ,it contains 2pN ele-ments.This table will require rehashing after either 2N − 2pN insertions or pN deletions.Balancing these costs suggests that a good choice is p = 2/ 3.For instance,suppose we have a table of size 300.If we rehash at 200elements,then the new table size is N = 150,and we can do either 100insertions or 100deletions until a new rehash is required.If we know that insertions are more frequent than deletions,then we might choose p to be somewhat larger.If p is too close to 1.0,however,then a sequence of a small number of deletions followed by insertions can cause frequent rehashing.In the worst case,if p = 1.0,then alternating deletions and insertions both require rehashing.5.5(a)Since each table slot is eventually probed,if the table is not empty,the collision can beresolved.(b)This seems to eliminate primary clustering but not secondary clustering because all ele-ments that hash to some location willtry the same collision resolution sequence.(c,d)The running time is probably similar to quadratic probing.The advantage here is thatthe insertion can’t fail unless the table is full.(e)A method of generating numbers that are not random (or even pseudorandom)is given in the references.An alternative is to use the method in Exercise 2.7.5.6Separate chaining hashing requires the use of pointers,which costs some memory,and thestandard method of implementing calls on memory allocation routines,which typically are expensive.Linear probing is easily implemented,but performance degrades severely as the load factor increases because of primary clustering.Quadratic probing is only slightly more difficult to implement and gives good performance in practice.An insertion can fail if the table is half empty,but this is not likely.Even if it were,such an insertion would be so expensive that it wouldn’t matter and would almost certainly point up a weakness in the hash function.Double hashing eliminates primary and secondary clustering,but the compu-tation of a second hash function can be costly.Gonnet and Baeza-Yates [8]compare several hashing strategies;their results suggest that quadratic probing is the fastest method.5.7Sorting the MN records and eliminating duplicates would require O (MN log MN )timeusing a standard sorting algorithm.If terms are merged by using a hash function,then the merging time is constant per term for a total of O (MN ).If the output polynomial is small and has only O (M + N )terms,then it is easy to sort it in O ((M + N )log (M + N ))time,which is less than O (MN ).Thus the total is O (MN ).This bound is better because the model is less restrictive:Hashing is performing operations on the keys rather than just com-parison between the keys.A similar bound can be obtained by using bucket sort instead of a standard sorting algorithm.Operations such as hashing are much more expensive than comparisons in practice,so this bound might not be an improvement.On the other hand,if the output polynomial is expected to have only O (M + N )terms,then using a hash table saves a huge amount of space,since under these conditions,the hash table needs only-27-w w w .k h d a w .c o m课后答案网O (M + N )space.Another method of implementing these operations is to use a search tree instead of a hash table;a balanced tree is required because elements are inserted in the tree with too much order.A splay tree might be particularly well suited for this type of a problem because it does well with sequential paring the different ways of solving the problem is a good programming assignment.5.8The table size would be roughly 60,000entries.Each entry holds 8bytes,for a total of 480,000bytes.5.9(a)This statement is true.(b)If a word hashes to a location with value 1,there is no guarantee that the word is in the dictionary.It is possible that it just hashes to the same value as some other word in the dic-tionary.In our case,the table is approximately 10%full (30,000words in a table of 300,007),so there is a 10%chance that a word that is not in the dictionary happens to hash out to a location with value 1.(c)300,007bits is 37,501bytes on most machines.(d)As discussed in part (b),the algorithm will fail to detect one in ten misspellings on aver-age.(e)A 20-page document would have about 60misspellings.This algorithm would be expected to detect 54.A table three times as large would still fit in about 100K bytes and reduce the expected number of errors to two.This is good enough for many applications,especially since spelling detection is a very inexact science.Many misspelled words (espe-cially short ones)are still words.For instance,typing them instead of then is a misspelling that won’t be detected by any algorithm.5.10To each hash table slot,we can add an extra field that we’ll call WhereOnStack, and we cankeep an extra stack.When an insertion is first performed into a slot,we push the address (or number)of the slot onto the stack and set the WhereOnStack field to point to the top of the stack.When we access a hash table slot,we check that WhereOnStack points to a valid part of the stack and that the entry in the (middle of the)stack that is pointed to by the WhereOn-Stack field has that hash table slot as an address.5.14(2)000000100000101100101011(2)01010001011000010110111101111111(3)100101101001101110011110(3)1011110110111110(2)110011111101101111110000000001010011100101110111-28-w w w .k hd a w.c o m 课后答案网。

算法与数据结构习题及参考答案

算法与数据结构习题及参考答案

算法与数据结构习题及参考答案一、选择题1. 在算法分析中,时间复杂度表示的是:A. 算法执行的时间B. 算法的运行速度C. 算法执行所需的操作次数D. 算法的内存消耗答案:C2. 哪种数据结构可以在常数时间内完成插入和删除操作?A. 数组B. 栈C. 队列D. 链表答案:B3. 单链表的逆置可以使用哪种算法实现?A. 冒泡排序B. 归并排序C. 快速排序D. 双指针法答案:D4. 常用的查找算法中,哪种算法的时间复杂度始终为O(log n)?A. 顺序查找B. 二分查找C. 广度优先搜索D. 深度优先搜索答案:B5. 哪种排序算法的时间复杂度最坏情况下仍为O(n log n)?A. 冒泡排序B. 插入排序C. 快速排序D. 堆排序答案:C二、填空题1. 下面哪个数据结构先进先出?A. 栈B. 队列C. 堆D. 链表答案:B2. 在快速排序的基本步骤中,需要选取一个元素作为________。

答案:枢纽元素3. 广度优先搜索使用的数据结构是________。

答案:队列4. 二分查找是基于_________的。

答案:有序数组5. 哈希表的查找时间复杂度为_________。

答案:O(1)三、解答题1. 请简要说明冒泡排序算法的原理及时间复杂度。

答:冒泡排序是一种简单直观的排序算法。

它的基本思想是通过相邻元素之间的比较和交换来将最大(或最小)的元素逐渐“冒泡”到数列的一端。

冒泡排序的过程如下:1)比较相邻的元素,如果前面的元素大于后面的元素,则交换它们的位置;2)对每一对相邻元素重复进行比较和交换,直到最后一对元素;3)针对剩下的元素重复上述步骤,直到整个数列有序。

冒泡排序的时间复杂度为O(n^2),其中n为待排序数列的长度。

在最坏情况下,冒泡排序需要进行n-1次比较和交换操作,因此时间复杂度为O(n^2)。

在最好情况下,如果待排序数列已经有序,冒泡排序只需进行n-1次比较,没有交换操作,时间复杂度为O(n)。

数据结构与算法课后习题解答

数据结构与算法课后习题解答

数据结构与算法课后习题解答数据结构与算法课后习题解答第一章绪论(参考答案)1.3 (1) O(n)(2) (2) O(n)(3) (3) O(n)(4) (4) O(n1/2)(5) (5) 执行程序段的过程中,x,y值变化如下:循环次数x y0(初始)91 1001 92 1002 93 100。

9 100 10010 101 10011 9112。

20 9921 91 98。

30 101 9831 91 97到y=0时,要执行10*100次,可记为O(10*y)=O(n)数据结构与算法课后习题解答1.5 2100 , (2/3)n , log2n , n1/2 , n3/2 , (3/2)n , nlog2n , 2 n , n! , n n第二章线性表(参考答案)在以下习题解答中,假定使用如下类型定义:(1)顺序存储结构:#define ***** 1024typedef int ElemType;// 实际上,ElemTypetypedef struct{ ElemType data[*****];int last; // last}sequenlist;(2*next;}linklist;(3)链式存储结构(双链表)typedef struct node{ElemType data;struct node *prior,*next;数据结构与算法课后习题解答}dlinklist;(4)静态链表typedef struct{ElemType data;int next;}node;node sa[*****];2.1 la,往往简称为“链表la”。

是副产品)2.2 23voidelenum个元素,且递增有序,本算法将x插入到向量A中,并保持向量的{ int i=0,j;while (ielenum A[i]=x) i++; // 查找插入位置for (j= elenum-1;jj--) A[j+1]=A[j];// 向后移动元素A[i]=x; // 插入元素数据结构与算法课后习题解答} // 算法结束24void rightrotate(ElemType A[],int n,k)// 以向量作存储结构,本算法将向量中的n个元素循环右移k位,且只用一个辅助空间。

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解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. 习题四:堆排序题目描述:给定一个无序数组,使用堆排序算法对其进行排序。

数据结构与算法分析习题及参考答案

数据结构与算法分析习题及参考答案

数据结构与算法分析习题及参考答案四川⼤学《数据结构与算法分析》课程习题及参考答案模拟试卷⼀⼀、单选题(每题2 分,共20分)1.以下数据结构中哪⼀个是线性结构?( )A. 有向图B. 队列C. 线索⼆叉树D. B树2.在⼀个单链表HL中,若要在当前由指针p指向的结点后⾯插⼊⼀个由q指向的结点,则执⾏如下( )语句序列。

A. p=q; p->next=q;B. p->next=q; q->next=p;C. p->next=q->next; p=q;D. q->next=p->next; p->next=q;3.以下哪⼀个不是队列的基本运算?()A. 在队列第i个元素之后插⼊⼀个元素B. 从队头删除⼀个元素C. 判断⼀个队列是否为空D.读取队头元素的值4.字符A、B、C依次进⼊⼀个栈,按出栈的先后顺序组成不同的字符串,⾄多可以组成( )个不同的字符串?A.14B.5C.6D.85.由权值分别为3,8,6,2的叶⼦⽣成⼀棵哈夫曼树,它的带权路径长度为( )。

A. 11 B.35 C. 19 D. 53以下6-8题基于图1。

6.该⼆叉树结点的前序遍历的序列为( )。

A.E、G、F、A、C、D、BB.E、A、G、C、F、B、DC.E、A、C、B、D、G、FD.E、G、A、C、D、F、B7.该⼆叉树结点的中序遍历的序列为( )。

A. A、B、C、D、E、G、FB. E、A、G、C、F、B、DC. E、A、C、B、D、G、FE.B、D、C、A、F、G、E8.该⼆叉树的按层遍历的序列为( )。

EA GCB DF图1A.E、G、F、A、C、D、B B. E、A、C、B、D、G、FC. E、A、G、C、F、B、DD. E、G、A、C、D、F、B9.下⾯关于图的存储的叙述中正确的是( )。

A.⽤邻接表法存储图,占⽤的存储空间⼤⼩只与图中边数有关,⽽与结点个数⽆关B.⽤邻接表法存储图,占⽤的存储空间⼤⼩与图中边数和结点个数都有关C. ⽤邻接矩阵法存储图,占⽤的存储空间⼤⼩与图中结点个数和边数都有关D.⽤邻接矩阵法存储图,占⽤的存储空间⼤⼩只与图中边数有关,⽽与结点个数⽆关10.设有关键码序列(q,g,m,z,a,n,p,x,h),下⾯哪⼀个序列是从上述序列出发建堆的结果?( )A. a,g,h,m,n,p,q,x,zB. a,g,m,h,q,n,p,x,zC. g,m,q,a,n,p,x,h,zD. h,g,m,p,a,n,q,x,z⼆、填空题(每空1分,共26分)1.数据的物理结构被分为_________、________、__________和___________四种。

数据结构与算法分析习题与参考答案

数据结构与算法分析习题与参考答案

大学《数据结构与算法分析》课程习题及参考答案模拟试卷一一、单选题(每题2分,共20分)1. 以下数据结构中哪一个是线性结构?()A. 有向图B.队列C. 线索二叉树D. B树2. 在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。

A. p=q; p_>n ext=q;B. p_>n ext=q; q_>n ext=p;C. p_>n ext=q _>n ext; p=q;D. q_>n ext=p->n ext; p_>n ext=q;3. 以下哪一个不是队列的基本运算?()A. 在队列第i个元素之后插入一个元素B. 从队头删除一个元素C.判断一个队列是否为空D. 读取队头元素的值4. 字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串?A. 14B.5C.6D.8由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()5.A. 11B.35C. 19D. 536.A. E、G F、 A C D BB. E、A、G C F、B、DC. E、A、C、B D G FD. E、G A、C D F、B7.A. A 、B、 C D E、G FB. E 、A、G C F、B、DC. E 、A、C B、D G FE. B D C '、AF、G E以下6-8题基于图1。

该二叉树结点的前序遍历的序列为该二叉树结点的中序遍历的序列为(8.该二叉树的按层遍历的序列为()9.下面关于图的存储的叙述中正确的是 ()。

A .用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B .用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D .用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关10. 设有关键码序列(q , g , m z , a , n , p , x , h),下面哪一个序列是从上述序列出发建 堆的结果?()A. a , g , h , m n , p , q , x , zB. a ,g , m h , q , n , p , x , zC. g, m, q , a , n , p , x , h , z D. h,g , m p , a , n , q , x , z二、填空题(每空1分,共26分)1.数据的物理结构被分为 、、 和四种。

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。

2.数据元素是数据的基本单位,数据项是数据的最小标示单位。

3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。

4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。

5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。

6.在一般情况下,一个算法的时间复杂度是问题规模的函数。

7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。

通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。

8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。

2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。

数据存储结构:数据元素及其关系在计算机内的表示。

3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。

4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。

5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。

6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。

可行性、有容性、确定性、有输入、有输出。

7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。

第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。

2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。

3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。

4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。

数据结构、算法与应用习题参考答案

数据结构、算法与应用习题参考答案

第1章概论1.数据、数据元素、数据结构、数据类型的含义分别是什么数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。

数据元素:数据的基本单位,在计算机程序中通常作为一个整体考虑。

数据结构:数据元素之间的关系+运算,是以数据为成员的结构,是带结构的数据元素的集合,数据元素之间存在着一种或多种特定的关系。

数据类型:数据类型是用来区分不同的数据;由于数据在存储时所需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来存储,所有就要将数据划分成不同的数据类型。

数据类型包含取值范围和基本运算等概念。

2.什么是数据的逻辑结构什么是数据的物理结构数据的逻辑结构与物理结构的区别和联系是什么逻辑结构:数据的逻辑结构定义了数据结构中数据元素之间的相互逻辑关系。

数据的逻辑结构包含下面两个方面的信息:①数据元素的信息;②各数据元素之间的关系。

物理结构:也叫储存结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。

数据的逻辑结构和存储结构是密不可分的,一个操作算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采与的存储结构。

采用不同的存储结构,其数据处理的效率是不同的。

因此,在进行数据处理时,针对不同问题,选择合理的逻辑结构和存储结构非常重要。

3.数据结构的主要操作包括哪些对于各种数据结构而言,他们在基本操作上是相似的,最常用的操作有:创建:建立一个数据结构;清除:清除一个数据结构;插入:在数据结构中增加新的结点;删除:把指定的结点从数据结构中删除;访问:对数据结构中的结点进行访问;更新:改变指定结点的值或改变指定的某些结点之间的关系;查找:在数据结构中查找满足一定条件的结点;排序:对数据结构中各个结点按指定数据项的值,以升序或降序重新排列。

4.什么是抽象数据类型如何定义抽象数据类型抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。

《数据结构与算法》习题与答案

《数据结构与算法》习题与答案

《数据结构与算法》习题与答案(解答仅供参考)一、名词解释:1. 数据结构:数据结构是计算机存储、组织数据的方式,它不仅包括数据的逻辑结构(如线性结构、树形结构、图状结构等),还包括物理结构(如顺序存储、链式存储等)。

它是算法设计与分析的基础,对程序的效率和功能实现有直接影响。

2. 栈:栈是一种特殊的线性表,其操作遵循“后进先出”(Last In First Out, LIFO)原则。

在栈中,允许进行的操作主要有两种:压栈(Push),将元素添加到栈顶;弹栈(Pop),将栈顶元素移除。

3. 队列:队列是一种先进先出(First In First Out, FIFO)的数据结构,允许在其一端插入元素(称为入队),而在另一端删除元素(称为出队)。

常见的实现方式有顺序队列和循环队列。

4. 二叉排序树(又称二叉查找树):二叉排序树是一种二叉树,其每个节点的左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。

这种特性使得能在O(log n)的时间复杂度内完成搜索、插入和删除操作。

5. 图:图是一种非线性数据结构,由顶点(Vertex)和边(Edge)组成,用于表示对象之间的多种关系。

根据边是否有方向,可分为有向图和无向图;根据是否存在环路,又可分为有环图和无环图。

二、填空题:1. 在一个长度为n的顺序表中,插入一个新元素平均需要移动______个元素。

答案:(n/2)2. 哈希表利用______函数来确定元素的存储位置,通过解决哈希冲突以达到快速查找的目的。

答案:哈希(Hash)3. ______是最小生成树的一种算法,采用贪心策略,每次都选择当前未加入生成树且连接两个未连通集合的最小权重边。

答案:Prim算法4. 在深度优先搜索(DFS)过程中,使用______数据结构来记录已经被访问过的顶点,防止重复访问。

答案:栈或标记数组5. 快速排序算法在最坏情况下的时间复杂度为______。

数据结构与算法习题及答案

数据结构与算法习题及答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

数据结构和算法习题及答案解析

数据结构和算法习题及答案解析

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.部结构和外部结构(2)与数据元素本身的形式、容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

数据结构与算法设计课后习题及答案详解

数据结构与算法设计课后习题及答案详解

第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。

2.数据元素是数据的基本单位,数据项是数据的最小标示单位。

3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。

4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。

5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。

6.在一般情况下,一个算法的时间复杂度是问题规模的函数。

7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。

通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。

8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。

2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。

数据存储结构:数据元素及其关系在计算机内的表示。

3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。

4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。

5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。

6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。

可行性、有容性、确定性、有输入、有输出。

7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。

第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。

2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。

3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。

4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案

2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。

(×)2.顺序存储的线性表可以按序号随机存取。

(√)3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

(×)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。

(√)5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。

(×)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

(√)7.线性表的链式存储结构优于顺序存储结构。

(×)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。

(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

(×)11.静态链表既有顺序存储的优点,又有动态链表的优点。

所以它存取表中第i个元素的时间与i无关。

(×)12.线性表的特点是每个元素都有一个前驱和一个后继。

(×)2.3.3 算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。

试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。

【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x) /*边找位置边移动*/{A[i+1]=A[i];i--;}A[i+1]=x; /*找到的位置是插入位的下一位*/(*elenum)++;return 1; /*插入成功*/}}时间复杂度为O(n)。

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案第一章:基本概念一、题目:什么是数据结构与算法?数据结构是指数据在计算机中存储和组织的方式,如栈、队列、链表、树等;而算法是一系列解决问题的清晰规范的指令步骤。

数据结构和算法是计算机科学的核心内容。

二、题目:数据结构的分类有哪些?数据结构可以分为以下几类:1. 线性结构:包括线性表、栈、队列等,数据元素之间存在一对一的关系。

2. 树形结构:包括二叉树、AVL树、B树等,数据元素之间存在一对多的关系。

3. 图形结构:包括有向图、无向图等,数据元素之间存在多对多的关系。

4. 文件结构:包括顺序文件、索引文件等,是硬件和软件相结合的数据组织形式。

第二章:算法分析一、题目:什么是时间复杂度?时间复杂度是描述算法执行时间与问题规模之间的增长关系,通常用大O记法表示。

例如,O(n)表示算法的执行时间与问题规模n成正比,O(n^2)表示算法的执行时间与问题规模n的平方成正比。

二、题目:主定理是什么?主定理(Master Theorem)是用于估计分治算法时间复杂度的定理。

它的公式为:T(n) = a * T(n/b) + f(n)其中,a是子问题的个数,n/b是每个子问题的规模,f(n)表示将一个问题分解成子问题和合并子问题的所需时间。

根据主定理的不同情况,可以得到算法的时间复杂度的上界。

第三章:基本数据结构一、题目:什么是数组?数组是一种线性数据结构,它由一系列具有相同数据类型的元素组成,通过索引访问。

数组具有随机访问、连续存储等特点,但插入和删除元素的效率较低。

二、题目:栈和队列有什么区别?栈和队列都是线性数据结构,栈的特点是“先进后出”,即最后压入栈的元素最先弹出;而队列的特点是“先进先出”,即最先入队列的元素最先出队列。

第四章:高级数据结构一、题目:什么是二叉树?二叉树是一种特殊的树形结构,每个节点最多有两个子节点。

二叉树具有左子树、右子树的区分,常见的有完全二叉树、平衡二叉树等。

数据结构与算法习题含参考答案

数据结构与算法习题含参考答案

数据结构与算法习题含参考答案一、单选题(共100题,每题1分,共100分)1、要为 Word 2010 格式的论文添加索引,如果索引项已经以表格形式保存在另一个 Word文档中,最快捷的操作方法是:A、在 Word 格式论文中,逐一标记索引项,然后插入索引B、直接将以表格形式保存在另一个 Word 文档中的索引项复制到 Word 格式论文中C、在 Word 格式论文中,使用自动插入索引功能,从另外保存 Word 索引项的文件中插D、在 Word 格式论文中,使用自动标记功能批量标记索引项,然后插入索引正确答案:D2、下面不属于计算机软件构成要素的是A、文档B、程序C、数据D、开发方法正确答案:D3、JAVA 属于:A、操作系统B、办公软件C、数据库系统D、计算机语言正确答案:D4、在 PowerPoint 演示文稿中,不可以使用的对象是:A、图片B、超链接C、视频D、书签第 6 组正确答案:D5、下列叙述中正确的是A、软件过程是软件开发过程和软件维护过程B、软件过程是软件开发过程C、软件过程是把输入转化为输出的一组彼此相关的资源和活动D、软件过程是软件维护过程正确答案:C6、在 Word 中,不能作为文本转换为表格的分隔符的是:A、@B、制表符C、段落标记D、##正确答案:D7、某企业为了建设一个可供客户在互联网上浏览的网站,需要申请一个:A、密码B、门牌号C、域名D、邮编正确答案:C8、面向对象方法中,将数据和操作置于对象的统一体中的实现方式是A、隐藏第 42 组B、抽象C、结合D、封装正确答案:D9、下面属于整数类 I 实例的是A、-919B、0.919C、919E+3D、919D-2正确答案:A10、定义课程的关系模式如下:Course (C#, Cn, Cr,prC1#, prC2#)(其属性分别为课程号、课程名、学分、先修课程号 1和先修课程号 2),并且不同课程可以同名,则该关系最高是A、BCNFB、2NFC、1NFD、3NF正确答案:A11、循环队列的存储空间为 Q(1:100),初始状态为 front=rear=100。

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案一、算法分析和复杂度1.1 算法复杂度的定义算法的复杂度是指算法所需资源的度量,包括时间复杂度和空间复杂度。

时间复杂度描述了算法的执行时间随输入规模增长的增长速度,空间复杂度描述了算法执行期间所需的存储空间随输入规模增长的增长速度。

1.2 时间复杂度的计算方法时间复杂度可以通过估算算法的执行次数来计算。

对于循环结构,通常可以通过循环体内代码的执行次数来估算时间复杂度。

对于递归算法,则可以通过递归的深度和每次递归的复杂度来计算时间复杂度。

1.3 常见的时间复杂度在算法分析中,常见的时间复杂度有:O(1)、O(log n)、O(n)、O(n log n)、O(n^2)、O(n^3)等。

其中,O(1)表示算法的执行时间与输入规模无关,即常数时间复杂度;O(log n)表示算法的执行时间随输入规模呈对数增长;O(n)表示算法的执行时间随输入规模呈线性增长;O(nlog n)表示算法的执行时间随输入规模呈线性对数增长;O(n^2)表示算法的执行时间随输入规模呈平方增长;O(n^3)表示算法的执行时间随输入规模呈立方增长。

1.4 空间复杂度的计算方法空间复杂度可以通过估计算法执行过程中所需要的额外存储空间来计算。

对于递归算法,通常使用递归的深度来估算空间复杂度。

1.5 算法复杂度的应用算法的复杂度分析在实际应用中非常重要,可以帮助我们选择合适的算法来解决问题。

在时间复杂度相同的情况下,可以通过比较空间复杂度来选择更优的算法。

在实际开发中,我们也可以根据算法的复杂度来进行性能优化,减少资源的消耗。

二、搜索算法2.1 线性搜索算法线性搜索算法是一种简单直观的搜索算法,逐个比较待搜索元素和数组中的元素,直到找到匹配的元素或遍历完整个数组。

其时间复杂度为O(n),空间复杂度为O(1)。

2.2 二分搜索算法二分搜索算法是一种高效的搜索算法,前提是数组必须是有序的。

算法首先取数组的中间元素进行比较,如果相等则返回找到的位置,如果大于中间元素则在右半部分继续搜索,如果小于中间元素则在左半部分继续搜索。

数据结构与算法习题与答案.doc

数据结构与算法习题与答案.doc

数据结构与算法习题与答案.doc第四章习题(P111-113)一、复习题1、试述数据和数据结构的概念及其区别。

数据是对客观事物的符号表示,是信息的载体;数据结构则是指互相之间存在着一种或多种关系的数据元素的集合。

( P93)2、列出算法的五个重要特征并对其进行说明。

算法具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束。

确切性:算法的每一步骤必须有确切的定义。

输入:一个算法有0 个或多个输入,以刻画运算对象的初始情况,所谓0 个输入是指算法本身定除了初始条件。

输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。

没有输出的算法没有实际意义。

可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

( P95)3、算法的优劣用什么来衡量试述如何设计出优秀的算法。

时间复杂度空间复杂度(P97-98)4、线性和非线性结构各包含哪些种类的数据结构线性结构和非线性结构各有什么特点线性结构用于描述一对一的相互关系,即结构中元素之间只有最基本的联系,线性结构的特点是逻辑结构简单。

所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继)元素。

树型和图型结构就是其中十分重要的非线性结构,可以用来描述客观世界中广泛存在的层次结构和网状结构的关系。

(P99-105)5、简述树与二叉树的区别;简述树与图的区别。

树用来描述层次结构,是一对多或多对一的关系;二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root) 的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。

二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。

图也称做网,是一种比树形结构更复杂的非线性结构。

在图中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的,图表示的多对多的关系。

( P102-P104)6、请举出遍历算法在实际中使用的例子。

数据结构与算法学习习题答案

数据结构与算法学习习题答案

数据结构与算法学习习题答案1. 简介数据结构与算法是计算机科学中非常重要的内容之一。

通过学习数据结构与算法,我们能够更好地理解和解决各种问题,提高程序的效率和性能。

本文将为大家提供一些常见的数据结构与算法习题的答案,帮助大家巩固和加深对该领域的理解和应用。

2. 数组2.1 翻转数组答案:可以使用两个指针,一个指向数组的头部,一个指向尾部,依次交换两个指针所指向的元素,直到两个指针相遇。

2.2 找出数组中的最大值和最小值答案:可以设定两个变量,一个用于保存最大值,一个用于保存最小值,然后遍历整个数组,依次比较每个元素与最大值和最小值的大小,并进行更新。

3. 链表3.1 反转链表答案:可以使用三个指针,分别指向当前节点、前一个节点和后一个节点。

依次将当前节点指向前一个节点,并更新三个指针的位置,直到当前节点变为NULL。

3.2 找出链表中的中间节点答案:可以使用两个指针,一个快指针和一个慢指针,快指针每次移动两个节点,慢指针每次移动一个节点,当快指针到达链表末尾时,慢指针所在的节点就是链表的中间节点。

4. 栈和队列4.1 有效的括号答案:可以使用栈来解决。

遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,判断栈顶元素是否为与之对应的左括号,若是,则弹出栈顶元素,否则返回False。

最后判断栈是否为空,若为空,则返回True,否则返回False。

4.2 设计一个最小栈答案:可以使用两个栈来解决。

一个栈用于保存正常的数据,另一个栈用于保存最小值。

每次插入操作时,同时更新最小值栈中的元素,保证最小值栈的栈顶元素一直为当前栈中的最小值。

5. 树与图5.1 二叉树的遍历答案:有三种常见的二叉树遍历方式:前序遍历、中序遍历和后序遍历。

前序遍历先遍历根节点,然后遍历左子树,最后遍历右子树;中序遍历先遍历左子树,然后遍历根节点,最后遍历右子树;后序遍历先遍历左子树,然后遍历右子树,最后遍历根节点。

5.2 广度优先搜索答案:广度优先搜索是一种图的遍历算法。

多任务下的数据结构和算法习题与思考答案与提示

多任务下的数据结构和算法习题与思考答案与提示

部分习题与思考的答案与提示第二章习题与思考1.编程调用栈操作函数压入1000000个随机整数,再全部弹出来,打印花费的总时间。

提示:可以使用clock()函数获取当前时间,在压入数据前调用一次clock(),压入完数据后再调用一次clock(),两次时间差便是实际花费的总时间。

2.编程将100万个随机整数插入到SortTable中,再调用快速排序函数排序,打印出排序花费的时间。

提示:参考第1题的提示。

3.编程将1~1000000的整数一次插入排序表里,调用二分查找函数将1~10000000这100万个数依次查找一遍,打印出花费的时间。

提示:参考第1题的提示。

4.编码实现动态环形队列DeQue的弹出尾部节点函数DeQue_PopTail()和插入头部函数DeQue_InsertHead()函数。

提示:参考DeQue_PopHead()和DeQue_InsertTail()的实现。

第三章习题与思考1.在整块内存链表的实现中,考虑一下如果当自由空间的节点用完时,再插入数据,申请一块大一倍的内存,将原来内存中数据直接拷贝过去,将多出的一半自由空间加入到自由空间链表中,此时再插入数据,试问这种实现方式存在什么问题?提示:申请大一倍的内存后,内存的起始地址和原来内存的起始地址不一样,导致拷贝完后,链表的链接指向的还是原来那块内存中的内容。

2.编码实现一个整块内存中的链表插入算法,要求实现任意个数节点的插入。

提示:参考第1题。

第四章习题与思考1.编码将100万个随机整数插入到哈希表中,再将这100万个整数全部查找一遍,看需要花费多长时间?提示:可以使用rand()函数来生成随机数,调用rand()函数前需要先调用srand()函数初始化随机数发生器。

第五章习题思考:1.证明AVL树中从根节点到任一树梢节点的路径上不存在连续三个树梢节点。

证明:使用反证法,假设存在三个连续的树梢节点,那么这三个连续树梢节点最上面的那个节点的左右子树高度差将大于等于2,与AVL树的条件矛盾。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

部分习题与思考的答案与提示
第二章习题与思考
1.编程调用栈操作函数压入1000000个随机整数,再全部弹出来,打印花费的总时间。

提示:可以使用clock()函数获取当前时间,在压入数据前调用一次clock(),压入完数据后再调用一次clock(),两次时间差便是实际花费的总时间。

2.编程将100万个随机整数插入到SortT able中,再调用快速排序函数排序,打印出排序
花费的时间。

提示:参考第1题的提示。

3.编程将1~1000000的整数一次插入排序表里,调用二分查找函数将1~10000000这100
万个数依次查找一遍,打印出花费的时间。

提示:参考第1题的提示。

4.编码实现动态环形队列DeQue的弹出尾部节点函数DeQue_PopTail()和插入头部
函数DeQue_InsertHead()函数。

提示:参考DeQue_PopHead()和DeQue_InsertTail()的实现。

第三章习题与思考
1.在整块内存链表的实现中,考虑一下如果当自由空间的节点用完时,再插入数据,申请一块大一倍的内存,将原来内存中数据直接拷贝过去,将多出的一半自由空间加入到自由空间链表中,此时再插入数据,试问这种实现方式存在什么问题?
提示:申请大一倍的内存后,内存的起始地址和原来内存的起始地址不一样,导致拷贝完后,链表的链接指向的还是原来那块内存中的内容。

2.编码实现一个整块内存中的链表插入算法,要求实现任意个数节点的插入。

提示:参考第1题。

第四章习题与思考
1.编码将100万个随机整数插入到哈希表中,再将这100万个整数全部查找一遍,看需要花费多长时间?
提示:可以使用rand()函数来生成随机数,调用rand()函数前需要先调用srand()函数初始化随机数发生器。

第五章习题思考:
1.证明AVL树中从根节点到任一树梢节点的路径上不存在连续三个树梢节点。

证明:使用反证法,假设存在三个连续的树梢节点,那么这三个连续树梢节点最上面的那个节点的左右子树高度差将大于等于2,与AVL树的条件矛盾。

2.证明红黑树中从根节点到任一树梢节点的路径上不存在连续三个树梢节点。

证明:使用反证法,假设存在连续三个树梢节点,那么由红黑树的条件知道从根节点到任一树梢节点路径中的黑色节点数量相等,而从根节点到第2个树梢节点的路径必然要经过第1个树梢节点,根节点到第3个树梢节点的路径必然经过第2个树梢节点,因此知道三个树梢节点的第2个和第3个节点必为红色,但这又与红黑树中没有连续两个红色节点的条件矛盾,因此得证。

3.使用非递归算法编码实现二叉树的前序遍历函数。

答案:见光盘源代码
4.编码实现二叉树的宽度遍历函数。

提示:参考树的宽度遍历算法
5.使用红黑树替代哈希表去实现前面讲过的WebServer Cache文件管理功能。

6.比较一下哈希表、AVL树、红黑树在各种操作效率方面的区别。

7.估算一下对一个5000单词的文件进行分词大约需要多少次词典查询?
假设平均每句有10个单词,那么有500句,每句大约耗费10×9/2=45次词典查询,因此总共需要大约500×45=22500次词典查询。

8.一个企业想建一个内部搜索引擎,假设总共有十万个关键词,十万个网页文件,估算一下搜索关键词词典大约要占多少内存空间?
答:假设平均每个网页有500个不重复的单词,那么在关键词词典中,每个网页出现的平均次数为500次;
所有网页在关键词词典中出现总次数为:500×10万次。

每个关键词所对应的网页文件平均个数为:500×10万/10万=500个。

如果给网页文件名编号的话,编号需要消耗4字节,那么一个关键词对应的网页文件列表就需要消耗:4字节×500=2000字节。

10万个关键词的词典总共需要消耗:10万×2000字节=200M字节。

假设每个网页文件名需要消耗32字节空间,那么
网页文件名和编号表消耗的空间为:10万×(32+4)=3.6M字节
总共需要消耗203.6M字节的空间
9.考虑一下如何在搜索引擎的关键词词典中搜索包含某个关键词但不包含另外一个关键词的结果。

答:先按书中5.6.3中介绍的方法求出同时包含两个关键词的交集,再将包含第1个关键词的集合中减去交集便得到了所需的结果。

10.编码实现一个简易的搜索引擎功能。

要求对给定目录下的网页文件输出关键词词典,对给定的关键词要求能输出包含这个关键词的所有文件。

提示:搜索给定目录下的网页文件可以使用操作系统提供的文件搜索函数。

第六章习题与思考
1.编码使用哈希A VL树去替代哈希表实现前面哈希表那章中的W ebServer CACHE文件管理。

2.编码调用哈希红黑树去实现一个英文词典的管理功能。

3.将哈希红黑树、哈希A VL树和前面几章讲过的各种数据结构作一个插入、删除、查找、有序性、时间效率、空间效率等方面的综合比较。

第七章习题与思考
1.画出宽度优先搜索算法的流程图。

2.编程实现无环有向图的分层算法。

3.编程实现哈密顿圈算法。

第八章习题与思考
1.实现多个任务可以同时遍历操作的多任务链表。

2.将前面第4章中的W ebServer CACHE文件管理改写成支持多任务的。

3.编码:创建多个任务,一些任务不停地向消息队列中发送数据,一些任务不停地从消息队列接收数据,然后还有一个任务不停地遍历消息队列里的数据。

4.将本章的消息队列代码改写成当队列满时,发送操作会阻塞在那里。

提示:增加一个计数信号量,当计数为0时表示消息队列满,在发送操作中要先判断计数是否为0,为0则需要等待;在接收操作中则需要将计数加1。

5.编码实现一个支持多任务操作的哈希A VL树。

第九章习题与思考:
1.将9.3.2节中的Efree(void *p, size_t size) 函数的第2个参数去掉的话,如何修改代码来实现它。

提示:需要在内存的头部或尾部保存内存的size信息。

2.如何将本章讲的内存泄漏检查和内存越界检查结合起来一起使用?
提示:在内存泄漏检查的基础上对分配的内存尾部多分配4字节存放内存校验字节,在进行内存泄漏检查时顺便检查一下内存校验字节是否遭到破坏。

3.如果原来已经写好了一个软件,如何在不修改原来代码的基础上将其中的内存管理算法替换成本章所讲的动态等尺寸内存分配算法?
提示:可以使用本书第2章讲过的HOOK方法。

相关文档
最新文档