(0012)《数据结构》复习思考题答案

合集下载

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。

它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。

2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括数组、链表、栈和队列;非线性结构包括树和图。

3. 什么是算法?算法是解决特定问题的一系列有序步骤。

它描述了如何输入数据、处理数据,并产生期望的输出结果。

4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。

5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。

第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。

静态分配使用数组,动态分配使用指针和动态内存分配。

2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。

它的插入和删除操作效率高,但是查找效率较低。

3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。

双向链表每个节点都有一个指向前一个节点和后一个节点的指针。

4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。

第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。

后进先出(LIFO)是栈的特点。

2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。

先进先出(FIFO)是队列的特点。

3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。

4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。

(0012)数据结构复习思考题

(0012)数据结构复习思考题

(0012)《数据结构》复习思考题一、选择题1、某二叉树的先序序列和后序序列正好相同,则该二叉树一定是( )的二叉树。

A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子2.下列排序算法中,时间复杂度不受数据初始状态影响,恒为O(log2n)的是( )A.堆排序B.冒泡排序C.直接选择排序D.快速排序3.下列排序算法中,( )算法可能会出现下面情况:初始数据有序时,花费的时间反而最多。

A.堆排序B.冒泡排序C.快速排序D.SHELL排序4.一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( )A. 2 3 4 1 5B. 5 4 1 3 2C. 2 3 1 4 5D. 1 5 4 3 25.设循环队列中数组的下标范围是1~n,其头尾指针分别为f和r,则其元素个数为( )A. r-fB. r-f+1C. (r-f) mod n+1D. (r-f+n) mod n6.若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用( )存储方式最节省时间。

A.单链表B.双链表C.带头结点的双循环链表D.单循环链表7.在有n个结点的二叉链表中,值为非空的链域的个数为( )A. n-1B. 2n-1C. n+1D. 2n+18.一棵左右子树均不空的二叉树在先序线索化后,其空指针域数为( )A. 0B. 1C. 2D.不确定9.数组A[5][6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为( )A. 1140B. 1145C. 1120D. 112510.求最短路径的DIJKSTRA算法的时间复杂度为( )A. O(n)B. O(n+e)C. O(n2)D. O(n×e)11.对有18个元素的有序表作二分查找,则查找A[3]的比较序列的下标依次为( )A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,312.快速排序算法在最好情况下的时间复杂度为( )A. O(n)B. O(nlog2n)C. O(n2)D. O(log2n)13.下列排序算法中,某一趟结束后未必能选出一个元素放在其最终位置上的是( )A.堆排序B.冒泡排序C.快速排序D.直接插入排序14.二叉树在线索化后,仍不能有效求解的问题是( )A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前趋D.后序线索二叉树中求后序后继15.DFS算法的时间复杂度为( )A. O(n)B. O(n3)C. O(n2)D. O(n+e)16.队列操作的原则是( )A.先进先出B.后进先出C.只能进行插入D.只能进行删除17.有64个结点的完全二叉树的深度为( )(根的层次为1)。

(完整版)数据结构复习题目及答案

(完整版)数据结构复习题目及答案

《数据结构-C语言版》第一章绪论单项选择题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. n2B. nlognC. nD. logn7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为____ ___。

A. O(1)B. O(n)C. O(200n)D. O(nlog2n)CDCBBDD第二章线性表单项选择题1.链表不具有的特点是____ ____。

A. 可随机访问任一元素B. 插入和删除时不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表的长度正比2.设顺序表的每个元素占8个存储单元。

第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为。

A. 139B. 140C. 147D. 1483.在线性链表存储结构下,插入操作算法。

A. 需要判断是否表满B. 需要判断是否表空C. 不需要判断表满D. 需要判断是否表空和表满4.在一个单链表中,若删除p所指结点的后继结点,则执行。

A. p->next = p->next->next;B. p->next = p->next;C. p = p->next->next;D. p = p->next; p->next = p->next->next;5.将长度为n的单链表接在长度为m的单链表之后的算法时间复杂度为。

西南大学网教 (0012)《数据结构》大作业A 答案

西南大学网教 (0012)《数据结构》大作业A 答案

则关键字为49的地址为。

9)数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。

10)一个算法的效率分为效率和效率。

3、应用题1)编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。

2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。

然后写出该二叉树的后序遍历序列。

3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。

4)已知图G如下所示,根据Prim算法,构造最小生成树。

(要求给出生成过程)5)设哈希表HT表长m为13,哈希函数为H(k)=k MOD m,给定的关键值序列为{19,14,23,10,68,20,84,27,55,11}。

试求出用线性探测法解决冲突时所构造的哈希表,并求出在等概率的情况下查找成功的平均查找长度ASL。

二、大作业要求大作业共需要完成22道题:第1大题必做,满分30分;第2大题必做,满分30分;第3大题选作2题,满分40分。

答卷提交要求:考试题提前公布,学生下载试题和答题卷后,在答题卷上答题。

完成后需网上提交答卷。

答卷于11月20日--12月6日通过点击页面左侧导航栏内“我的考试”-“课程论文/大作业”提交。

1、选择题1) C 2) C 3) D 4) A 5) C6) C 7) B 8) D 9) A 10) A2、填空题1) l==l->next2)栈顶3)三元组顺序表十字链表。

4)LOC (A[0][0])+(n*i+j)*k5)R[2i+1]6) 先序遍历7)n-18)99) 数据元素关系10)时间效率空间效率3、应用题2)已知二叉树的先序遍历序列为ABCDEFGH,中序遍历序列为CBEDFAGH,画出二叉树。

然后写出该二叉树的后序遍历序列。

答:后序遍历序列CEFDBHGA3)试用权集合{12,4,5,6,1,2}构造哈夫曼树,并计算哈夫曼树的带权路径长度。

(完整版)数据结构课后习题答案(可编辑修改word版)

(完整版)数据结构课后习题答案(可编辑修改word版)

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

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,… },字母字符数据对象是集合C={‘A’,‘B’,… ,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

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

答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。

每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。

数据结构(c语言版)课后习题答案完整版

数据结构(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. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。

《数据结构》课后参考答案

《数据结构》课后参考答案

单元练习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 的函数。

数据结构c语言版课后习题答案

数据结构c语言版课后习题答案

数据结构c语言版课后习题答案数据结构是计算机科学中的一个重要概念,它涉及到组织、管理和存储数据的方式,以便可以有效地访问和修改数据。

C语言是一种广泛使用的编程语言,它提供了丰富的数据结构实现方式。

对于学习数据结构的C语言版课程,课后习题是巩固理论知识和提高实践能力的重要手段。

数据结构C语言版课后习题答案1. 单链表的实现在C语言中,单链表是一种常见的线性数据结构。

它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。

实现单链表的基本操作通常包括创建链表、插入节点、删除节点、遍历链表等。

答案:- 创建链表:定义一个链表结构体,然后使用动态内存分配为每个节点分配内存。

- 插入节点:根据插入位置,调整前后节点的指针,并将新节点插入到链表中。

- 删除节点:找到要删除的节点,调整其前后节点的指针,然后释放该节点的内存。

- 遍历链表:从头节点开始,使用指针遍历链表,直到达到链表尾部。

2. 二叉树的遍历二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点。

二叉树的遍历是数据结构中的一个重要概念,常见的遍历方式有前序遍历、中序遍历、后序遍历和层序遍历。

答案:- 前序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树。

- 中序遍历:先递归遍历左子树,然后访问根节点,最后递归遍历右子树。

- 后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点。

- 层序遍历:使用队列,按照从上到下,从左到右的顺序访问每个节点。

3. 哈希表的实现哈希表是一种通过哈希函数将键映射到表中一个位置来访问记录的数据结构。

它提供了快速的数据访问能力,但需要处理哈希冲突。

答案:- 哈希函数:设计一个哈希函数,将键映射到哈希表的索引。

- 哈希冲突:使用链地址法、开放地址法或双重哈希法等解决冲突。

- 插入操作:计算键的哈希值,将其插入到对应的哈希桶中。

- 删除操作:找到键对应的哈希桶,删除相应的键值对。

4. 图的表示和遍历图是一种复杂的非线性数据结构,由顶点(节点)和边组成。

(0012)《数据结构》复习思考题答案(DOC)

(0012)《数据结构》复习思考题答案(DOC)

(0012)《数据结构》复习思考题答案1:[论述题]1、算法的时间复杂度仅与问题的规模相关吗?2、下列程序段带标号语句的频度和时间复杂度。

( 1 ) I=0;while (I<N)&&(A[I]!=K)I++; //语句3return(I);( 2 ) n为不小于1的整数(设k的初值等于1)void pp ( int k){if (k==n) //语句1for (I=0; I语句2printf(a[I]); //语句3else{ for (I=k-1;I语句4a[I]=a[I]+I; //语句5pp(k+1); //语句6}}//pp3、常用的存储表示方法有哪几种?参考答案:1、不,事实上,算法的时间复杂度不仅与问题的规模相关,还与输入实例中的元素取值等相关,但在最坏的情况下,其时间复杂度就是只与求解问题的规模相关的。

我们在讨论时间复杂度时,一般就是以最坏情况下的时间复杂度为准的。

2、(1)这个算法完成在一维数组a[n]中查找给定值k的功能。

语句三的频度不仅与问题的规模n有关,还与输入实例中a的各元素取值以及k的取值相关,即与输入实例的初始状态复杂有关。

若a中没有与k相等的元素,则语句三的频度为n;若a中的第一个元素a[0]等于k,则语句三的频度是常数0。

在这种情况下,可用最坏情况下的时间复杂度作为时间复杂度。

在此例中即为O(n)。

这样做的原因是:最坏情况下的时间复杂度是在任何输入实例上运行时间的上界。

有时,也可能选择将算法的平均(或期望)时间复杂度作为讨论目标。

所谓的平均时间复杂度是指所有可能的输入实例以等概率出现的情况下算法的期望运行时间与问题规模的数量级的关系。

此例中,以k出现在任何位置的概率相同,都为1/n,则语句三的执行频度为[0+1+2+…+(n-1)]/n=(n-1)/2。

它决定了此程序段的平均时间复杂度的数量级为f(n)=n,记作O(n)。

(2)在计算包含调用语句的算法的语句频度时,需考虑到调用发生时在被调用算法中各语句的执行情况。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第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. 请描述栈和队列的特点及其应用场景。

栈和队列都是常用的线性数据结构,它们在不同的场景中有着不同的特点和应用。

栈的特点:- 先进后出(LIFO)的数据结构。

- 只能在栈顶进行插入和删除操作。

- 用途广泛,如函数调用、表达式求值、计算机内存的管理等。

队列的特点:- 先进先出(FIFO)的数据结构。

- 可以在队尾插入元素,在队头删除元素。

- 用途广泛,如任务调度、消息传递、广度优先搜索等。

第四题:4. 请简述树和图的区别以及它们的应用场景。

树和图都是常用的非线性数据结构,它们之间有着一些区别和各自的应用场景。

树的特点:- 由节点和边组成的层次结构。

- 每个节点最多有一个父节点和多个子节点。

- 常用的树结构有二叉树、平衡二叉树、B树等。

- 应用场景包括文件系统、数据库索引等。

图的特点:- 由节点和边组成的非线性结构。

- 节点之间的关系可以是任意的。

- 常用的图结构有有向图、无向图、加权图等。

- 应用场景包括社交网络、路由算法、拓扑排序等。

综上所述,数据结构是计算机科学的重要基础,它为我们解决实际问题提供了有力的工具和方法。

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案数据结构第一章介绍数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。

数据结构的选择对于算法的效率有着重要的影响。

本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。

下面是一些选定的习题及其答案,供读者参考。

第二章线性表习题一:给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。

答案一:算法思路:1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置3. 当i>=j时,停止逆置算法实现:```pythondef reverse_list(L):i, j = 0, len(L)-1while i < j:L[i], L[j] = L[j], L[i]i += 1j -= 1```习题二:给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。

答案二:算法思路:1. 遍历线性表B中的每一个元素2. 将B中的元素依次插入到A的末尾算法实现:```pythondef merge_lists(A, B):for element in B:A.append(element)```第三章栈和队列习题一:编写一个算法,判断一个表达式中的括号是否匹配。

表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。

答案一:算法思路:1. 遍历表达式中的每一个字符2. 当遇到左括号时,将其推入栈中3. 当遇到右括号时,判断栈顶元素是否与其匹配4. 当遇到其他字符时,继续遍历下一个字符5. 最后判断栈是否为空,若为空则表示括号匹配算法实现:```pythondef is_matching(expression):stack = []for char in expression:if char in "([{":stack.append(char)elif char in ")]}":if not stack:return Falseelif (char == ")" and stack[-1] == "(") or (char == "]" and stack[-1] == "[") or (char == "}" and stack[-1] == "{"):stack.pop()else:return Falsereturn not stack```习题二:利用两个栈实现一个队列。

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。

本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。

2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。

以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。

2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列等;非线性结构包括树、图等。

3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。

以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。

3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。

顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。

4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。

以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。

4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。

5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。

以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案第一章:数据结构概述数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。

数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。

第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。

为了提高学习效果,每章节后都附有一系列习题。

本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。

第二章:线性表2.1 顺序表习题1:请问如何判断顺序表是否为空表?答案:当顺序表的长度为0时,即为空表。

解析:顺序表是用一块连续的内存空间存储数据元素的线性结构。

当顺序表中没有元素时,长度为0,即为空表。

习题2:如何求顺序表中第i个元素的值?答案:可以通过访问顺序表的第i-1个位置来获取第i个元素的值。

解析:顺序表中的元素在内存中是连续存储的,通过下标访问元素时,需要将下标减1,因为数组是从0开始编号的。

2.2 链表习题1:请问链表中的结点包含哪些信息?答案:链表的结点一般包含两部分信息:数据域和指针域。

解析:数据域用于存储数据元素的值,指针域用于存储指向下一个结点的指针。

习题2:如何删除链表中的一个结点?答案:删除链表中的一个结点需要将其前一个结点的指针指向其后一个结点,然后释放被删除结点的内存空间。

解析:链表的删除操作相对简单,只需要通过修改指针的指向即可。

但需要注意释放被删除结点的内存空间,防止内存泄漏。

第三章:栈和队列3.1 栈习题1:如何判断栈是否为空?答案:当栈中没有任何元素时,即为空栈。

解析:栈是一种先进后出(Last In First Out,LIFO)的数据结构,栈顶指针指向栈顶元素。

当栈中没有元素时,栈顶指针为空。

习题2:请问入栈和出栈操作的时间复杂度是多少?答案:入栈和出栈操作的时间复杂度均为O(1)。

解析:栈的入栈和出栈操作只涉及栈顶指针的改变,不受栈中元素数量的影响,因此时间复杂度为O(1)。

3.2 队列习题1:请问队列可以用哪些方式实现?答案:队列可以用数组或链表来实现。

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。

答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。

如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。

2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。

答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。

遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。

---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。

答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。

如果存在环,则两个指针必定会相遇。

2. 题目:给定一个链表,删除链表的倒数第N个节点。

答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。

此时第二个指针指向的节点即为要删除的节点。

---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。

答案:使用辅助栈来保存当前栈中的最小元素。

每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。

2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。

答案:使用双端队列来保存当前队列中的最大值。

每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。

---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。

答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。

如果任意节点的差值大于1,则该二叉树不是平衡二叉树。

西大2022版[0012]《数据结构》网上作业及课程考试复习资料有答案

西大2022版[0012]《数据结构》网上作业及课程考试复习资料有答案

西大2022版[0012]《数据结构》网上作业及课程考试复习资料有答案[0012]《数据结构》第一次作业[填空题]1、已知栈的基本操作函数:intInitStack(SqStack某S);//构造空栈intStackEmpty(SqStack某S);//判断栈空intPuh(SqStack某S,ElemTypee);//入栈intPop(SqStack 某S,ElemType某e);//出栈函数converion实现十进制数转换为八进制数,请将函数补充完整。

voidconverion(){InitStack(S);canf(\while(N){(1);N=N/8;}while((2)){Pop(S,&e);printf(\}}//converion2.设循环队列的容量为70,现经过一系列的入队和出队操作后,front为20,rear为11,则队列中元素的个数为3.在一个单链表中删除p所指结点的后继结点时,应执行以下操作:q=p->ne某t;p->ne某t=____;4.一个算法的效率可分为()效率和()效率。

5.数据结构被形式地定义为(D,R),其中D是()的有限集合,R是D上的()有限集合。

6.下面程序段的时间复杂度是()。

for(i=0;i参考答案:1.(1)Puh(S,N%8)2.613.q->ne某t4.时间空间5.数据元素关系6.m某n[单选题]一个具有n个顶点的有向图最多有()条边A:n某(n-1)/2B:n某(n+1)/2C:n某(n-1)D:n2参考答案:B[判断题]折半查找只适用于有序表,包括有序的顺序表和链表参考答案:错误[判断题]用循环单链表表示的链队列中,可以不设队头指针,仅在队尾设置队尾指针。

参考答案:正确[判断题]在单链表中,要访问某个结点,只要知道该结点的地址即可;因此,单链表是一种(2)!StackEmpty(S)随机存取结构。

参考答案:错误[单选题]判断一个循环队列Q(最多n个元素)为满的条件是:A:Q->front==(Q->rear+1)%nB:Q->rear==Q->front+1C:Q->front==(Q->rear-1)%nD:Q->rear==Q->front参考答案:A[单选题]在单链表中,指针p指向元素为某的结点,实现删除某的后继的语句是:A:p=p->ne某tB:p=p->ne某t->ne某tC:p->ne某t=pD:p->ne某t=p->ne某t->ne某t参考答案:D[单选题]在双向循环链表中,在p指针所指的结点后插入一个指针q 所指向的新结点,修改指针的操作是:A:p->ne某t=q;q->prior=p;p->ne某t->prior=q;q->ne某t=q;B:q->prior=p;q->ne某t=p->ne某t;p->ne某t->prior=q;p->ne 某t=q;C:q->ne某t=p->ne某t;q->prior=p;p->ne某t=q;p->ne某t=q;D:p->ne某t=q;p->ne某t->prior=q;q->prior=p;q->ne某t=p->ne 某t;参考答案:B[多选题]抽象数据类型的组成部分分别为:A:数据对象B:存储结构C:数据关系D:基本操作参考答案:ACD[多选题]不具有线性结构的数据结构是:A:图B:栈C:广义表D:树参考答案:ACD[多选题]算法分析的两个主要方面是()A:正确性B:简单性C:空间复杂度D:时间复杂度参考答案:CD第二次作业[单选题]设一棵完全二叉树有300个结点,则共有个叶子结点A:150B:152C:154D:156参考答案:A[单选题]由3个结点所构成的二叉树有种形态.A:2B:3C:4D:5参考答案:D[单选题]设有两个串p和q,求q在p中首次出现的位置的运算称作:A:连接B:模式匹配C:求子串D:求串长参考答案:B[单选题]栈中元素的进出原则是:A:先进先出B:后进先出C:栈空则进D:栈满则出参考答案:B[单选题]链表是一种采用存储结构存储的线性表.A:顺序B:星式C:链式D:网状参考答案:C[单选题]数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:A:存储结构B:顺序存储结构C:逻辑结构D:链式存储参考答案:B[判断题]链表的每个结点中都恰好包含一个指针参考答案:错误[判断题]如果将所有中国人按照生日来排序,则使用哈希排序算法最快参考答案:错误[填空题]1.数据的存储结构可用四种基本的存储方法表示,它们分别是().2.在具有n个元素的循环队列中,队满时具有个元素.3.广义表A=((a),a)的表头是()。

数据结构复习习题和答案(DOC)

数据结构复习习题和答案(DOC)

数据结构复习习题和答案(DOC)第一章绪论一、单项选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的①以及它们之间的②和操作等的学科。

① A.操作对象 B.计算方法 C·逻辑存储 D.数据映象② A.结构B.关系C.运算. D.算法2.数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。

① A.算法 B.数据元素C.数据操作 D.逻辑结构② A.操作B.映象 C、存储D.关系3.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4·算法分析的目的是①,算法分析的两个主要方面是②。

① A. 找出数据结构的合理性B.研究算法中的输入和输出的关系C. 分析算法的效率以求改进 D.分析算法的易懂性和文档性② A. 空间复杂性和时间复杂性B.正确性和简明性C.可读性和文档7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。

A. 必须是连续的B.部分地址必须是连续的C. 一定是不连续的D. 连续或不连续都可以 8.数据结构通常是研究数据的()及它们之间的相互联系。

A.存储和逻辑结构B.存储和抽象C.理想与抽象D.理想与逻辑9.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为()。

A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构 11.非线性结构是数据元素之间存在一种()。

A.一对多关系B.多对多关系 C.多对一关系 D.一对一关系12.非线性结构中,每个结点()。

A.无直接前趋B.只有一个直接前驱和后继C.只有一个直接前趋和个数受限制的直接后继D.有个数不受限制的直接前趋和后继13.除了考虑存储数据结构本身所占用的空间外,实现算法所用辅助空间的多少称为()。

A.时间效率 B.空间效率C.硬件效率D.软件效率14.链式存储的存储结构所占存储空间()。

《数据结构》复习题及参考答案

《数据结构》复习题及参考答案

《数据结构》复习题及参考答案数据结构复习题及参考答案1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它涉及到数据的组织方式、存储方式、访问方式以及对数据进行操作的算法等。

数据结构的选择对于解决不同类型的问题非常重要。

2. 数据结构有哪些常见的分类?数据结构可以分为以下几类:(1) 线性结构:线性结构是一种有序排列的数据结构,其中数据元素之间存在着一对一的关系。

常见的线性结构有数组、链表、栈和队列等。

(2) 非线性结构:非线性结构是一种数据元素之间存在多对多关系的结构,常见的非线性结构有树和图等。

(3) 逻辑结构:逻辑结构是指数据元素之间的逻辑关系,主要包括集合结构、线性结构、树形结构和图形结构等。

(4) 物理结构:物理结构是指数据的逻辑结构在计算机存储中的表示方式,主要包括顺序存储结构和链式存储结构等。

3. 什么是算法?算法是解决特定问题的一系列步骤或操作的有限序列。

一个算法通常包括输入、输出、基本操作、控制结构和定义算法执行的约定等。

4. 数据结构和算法之间的关系是什么?数据结构是算法的基础,而算法又依赖于数据结构。

只有选择合适的数据结构,才能实现高效的算法。

同时,算法的设计也会对数据结构的选择产生影响。

5. 请解释什么是时间复杂度和空间复杂度?时间复杂度是衡量算法执行时间消耗的度量,表示算法的运行时间与问题规模之间的关系。

通常用大O符号来表示时间复杂度,如O(n)、O(nlogn)等。

空间复杂度是衡量算法执行所需存储空间的度量,表示算法所需的额外空间与问题规模之间的关系。

同样也使用大O符号来表示,如O(1)、O(n)等。

6. 请简要描述以下数据结构的特点及应用场景:(1) 数组:数组是一种连续存储数据元素的线性结构,具有随机访问性能。

适用于知道元素位置的查找和修改操作。

(2) 链表:链表是一种通过指针连接的数据结构,具有插入、删除元素方便的特点。

适用于频繁插入、删除操作以及不知道具体位置的查找操作。

数据结构c版第二版课后习题答案

数据结构c版第二版课后习题答案

数据结构c版第二版课后习题答案数据结构是计算机科学中的一个重要概念,它涉及到数据的组织、管理和存储方式,以及对数据进行操作的算法。

C语言是一种广泛使用的编程语言,它提供了丰富的数据结构实现方式。

《数据结构(C语言版)》第二版是一本经典的教材,它详细地介绍了各种数据结构的C 语言实现,以及相关的算法。

课后习题是帮助读者巩固和深化理解的重要部分。

以下是这本书课后习题的一些答案,仅供参考。

1. 线性表线性表是最基本的数据结构,它由一系列元素组成,这些元素具有线性关系。

线性表的实现方式有顺序表和链表两种。

习题1:实现一个顺序表的插入、删除和查找操作。

- 插入操作通常在表的末尾进行,需要为新元素分配空间,并将其插入到正确的位置。

- 删除操作需要找到要删除的元素,并将其从表中移除,同时更新表的长度。

- 查找操作则是遍历表,直到找到目标元素或遍历结束。

习题2:实现一个单链表的插入、删除和逆序输出操作。

- 单链表的插入操作需要在链表的指定位置插入新节点,并更新前后节点的指针。

- 删除操作需要找到要删除的节点,并更新其前一个节点的指针,使其指向被删除节点的下一个节点。

- 逆序输出操作需要从链表的尾部开始遍历,直到链表的头部。

2. 栈和队列栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。

习题3:实现一个栈的入栈、出栈和判断栈空操作。

- 入栈操作是将元素压入栈顶。

- 出栈操作是将栈顶元素弹出。

- 判断栈空操作是检查栈顶指针是否为空。

习题4:实现一个循环队列的入队、出队和判断队列空操作。

- 入队操作是将元素添加到队列的尾部,并更新队列的长度。

- 出队操作是将队列头部的元素移除,并更新队列的长度。

- 判断队列空操作是检查队列的长度是否为零。

3. 树和二叉树树是具有层次结构的数据结构,二叉树是树结构的一种特殊形式,每个节点最多有两个子节点。

习题5:实现一个二叉树的前序、中序和后序遍历。

- 前序遍历是先访问根节点,然后递归地遍历左子树和右子树。

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

(0012)《数据结构》复习思考题答案一、常用的存储表示方法有哪几种?常用的存储表示方法有四种:顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

由此得到的存储表示称为顺序存储结构。

链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。

由此得到的存储表示称为链式存储结构。

索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。

二、下列程序段带标号语句的频度和时间复杂度。

( 1 ) I=0;while (I<n)&&(a[I]!=k)I++; //语句3return(I);( 2 ) n为不小于1的整数(设k的初值等于1)void pp ( int k){if (k==n) //语句1for (I=0; I<n; I++) //语句2printf(a[I]); //语句3else{ for (I=k-1;I<n;I++) //语句4a[I]=a[I]+I; //语句5pp(k+1); //语句6}}//pp(1)这个算法完成在一维数组a[n]中查找给定值k的功能。

语句三的频度不仅与问题的规模n有关,还与输入实例中a的各元素取值以及k的取值相关,即与输入实例的初始状态复杂有关。

若a中没有与k相等的元素,则语句三的频度为n;若a中的第一个元素a[0]等于k,则语句三的频度是常数0。

在这种情况下,可用最坏情况下的时间复杂度作为时间复杂度。

在此例中即为O(n)。

这样做的原因是:最坏情况下的时间复杂度是在任何输入实例上运行时间的上界。

有时,也可能选择将算法的平均(或期望)时间复杂度作为讨论目标。

所谓的平均时间复杂度是指所有可能的输入实例以等概率出现的情况下算法的期望运行时间与问题规模的数量级的关系。

此例中,以k出现在任何位置的概率相同,都为1/n,则语句三的执行频度为[0+1+2+…+(n-1)]/n=(n-1)/2。

它决定了此程序段的平均时间复杂度的数量级为f(n)=n,记作O(n)。

(2)在计算包含调用语句的算法的语句频度时,需考虑到调用发生时在被调用算法中各语句的执行情况。

本题所示的递归调用较之非递归调用的分析更为复杂。

由于k等于n是算法的出口条件,不妨首先分析算法pp(n)的简单情况,这时各语句的执行频度分别为:1,n+1,n,0,0,0; 而当k=n-1,n-2,…,1时,语句的执行情况和调度情况,如下表所示。

对于k=1即pp(1)而言,各语句的执行次数还须将调用pp(2)时的执行次数累计到内,pp(2)各语句的执行次数又须将调用pp(3)时执行次数累计到内,……由此可的语句频度如下:语句1:1+1+…+1=n语句2:0+0+…+0+(n+1)=n+1语句3:0+0+…+0+n=n语句4:(n+1)+n+…+3=(n-1)(n+4)/2语句5:n+(n-1)+…+2=(n-1)(n+2)/2语句6:1+1+….+1+0=n-1算法的时间复杂度可以基于频度最大的语句,应为O(n2)。

三、算法的时间复杂度仅与问题的规模相关吗?不,事实上,算法的时间复杂度不仅与问题的规模相关,还与输入实例中的元素取值等相关,但在最坏的情况下,其时间复杂度就是只与求解问题的规模相关的。

我们在讨论时间复杂度时,一般就是以最坏情况下的时间复杂度为准的。

四、常用的存储表示方法有哪几种?常用的存储表示方法有四种:顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

由此得到的存储表示称为顺序存储结构。

链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。

由此得到的存储表示称为链式存储结构。

索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。

五、确定下列算法中输出语句的执行次数,并给出算法的时间复杂度。

(1)void combi (int n){ int I,j,k;for ( I=1; I<=n; I++)for ( j=I+1; j<=n; j++)for ( k=j+1; k<=n; k++)cout<<I,j,k;}(2) void binary ( int n){ while(n){cout<<n;n=n/2;}}(1)I取值范围从1~n,j取值范围从I+1~n,k取值范围从j+1~n,情况如下表所示:所以,输出语句共执行次数为((n-2)+(n-3)+…+1)+((n-3)+(n-4)+…+1)+…+1= (n-1)(n-2)/2+(n-2)(n-3)/2+…+1= (((n-1)2+(n-2)2+(n-3)2+…+12)-((n-1)+(n-2)+(n-3)+….+1))/2=((n-1)n(2n-1)/6-n(n-1)/2)/2=(n(n-1)(2n-4))/12=n(n-1)(n-2)/6(2) ceil(log2n);六、为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。

若用头指针来表示该链表,则查找终端结点的时间为O(n)。

七、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2.基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

八、指出以下算法中的错误和低效之处,并把它改写为一个既正确又高效的算法。

Status DeleteK( SqList &a,int I, int k){ //本过程从顺序存储结构的线性表a中删除第I个元素起的k个元素。

if (I<1|| k<0|| I+k > a.length) return ERROR;else {for (count=1;count<k;count++){ //删除一个元素for (j=a.Length; j >=I+1;j--) a.elem[j-1] = a.elem[j];a.length--;}rreturn OK;}//DeleteK更正:for (j = I+k; j <=a.Length; j++) a.elem[j-k] = a.elem[j];a.Length = a.Length – k;九、假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。

已知s为指向链表中某个结点指针,试编写算法在链表中删除指针s所指结点的前驱结点。

void Delprior ( Link s){p = q = s;while (p->next!=s){q = p;p = p->next;}q->next = s;delete ( p);}十、假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。

已知s为指向链表中某个结点指针,试编写算法在链表中删除指针s所指结点的前驱结点。

void Delprior ( Link s){p = q = s;while (p->next!=s){q = p;p = p->next;}q->next = s;delete ( p);}十一、已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m和n。

试写一算法将这两个链表连接在一起,请分析你的算法的时间复杂度算法如下:LinkList Link( LinkList L1 , LinkList L2 ){//将两个单链表连接在一起ListNode *p , *q ;p=L1;q=L2;while ( p->next ) p=p->next; //查找终端结点p->next = q->next ; //将L2的开始结点链接在L1之后return L1 ;}本算法的主要操作时间花费在查找L1的终端结点上,与L2的长度无关,所以本算的法时间复杂度为:m+1=O(m)十二、已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min 且小于max的结点(若表中有这样的结点),同时释放被删结点的空间,这里min 和max是两个给定的参数。

请分析你的算法的时间复杂度。

要解这样的问题,我们首先想到的是拿链表中的元素一个个地与max和min比较,然后删除这个结点,其实因为已知其是有序链表,所以我们只要找到大于min的结点的直接前趋结点,再找到小于max的结点,然后一并把中间的全部摘掉就可以了。

算法如下:void DeleteList ( LinkList L, DataType min , DataType max ){ListNode *p , *q ,*r;p=L->next;while( p && p->data <=min ){ //找比min大的前一个元素位置q=p;p=p->next;}while( p && p->data < max ) //找比max小的最后一个元素位置{r=p;p=p->next;free?;//释放这个结点空间}q->next=p; //把断点链上}十三、若以1234作为双端队列的输入序列,试分别求出满足以下条件的输出序列:(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列;(2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列;(3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。

答:(1)4132;(2)4213;(3)4231。

十四、设两个栈共享空间v[0..m-1],两栈的栈底分别设在向量的两端,且每个元素占一个分量。

相关文档
最新文档