北邮算法与数据结构习题参考标准答案
北邮算法与数据结构习题参考答案
北邮算法与数据结构习题参考答案作业参考答案一、(带头结点)多项式乘法 C = A×B:void PolyAdd ( list &C, list R) // R 为单个结点{p=C;while ((!p->next) && (p->next->exp>R->exp)) p=p->next; if ((p->next) || (p->next->exp<R->exp)){ R->next=p->next; p->next=R; } else{ p->next->inf += R->inf; delete R;if ( ! p->next->inf ){ R=p->next; p->next=R->next; delete R; } }}void PolyMul ( list A, list B, list &C ){C=new struct node; C->next=NULL; q=B->next; While ( q ){p=A->next;while ( p ){r = new struct node; r->exp = p->exp + q->exp;r->inf = p-> inf * q->inf; PolyAdd(C, r);p=p->next;}q=q->next;}}二、梵塔的移动次数:已知移动次数迭代公式为:M ( n ) = 2M ( n-1 ) + 1初值为:M ( 0 ) = 0则:M ( n ) = 2 ( 2M ( n-2 ) + 1 ) + 1= 4M ( n-2 ) + 3= 8M ( n-3 ) + 7= 2i M ( n-i ) + 2i– 1若n=i ,则M ( n-n ) = 0,故:M ( n ) = 2n M ( n-n ) + 2n– 1= 2n– 1所以,梵塔的移动次数为2n– 1次。
2022年北京邮电大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)
2022年北京邮电大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a, e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f, dD.a,e,d,f,c,b2、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储, a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.403、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表4、最大容量为n的循环队列,队尾指针是rear,队头:front,则队空的条件是()。
A.(rear+1)MOD n=frontB.rear=frontC.rear+1=frontD.(rear-1)MOD n=front5、下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动若提前完成,那么整个工程将会提前完成6、下列关于无向连通图特性的叙述中,正确的是()。
Ⅰ.所有的顶点的度之和为偶数Ⅱ.边数大于顶点个数减1 Ⅲ.至少有一个顶点的度为1A.只有Ⅰ B.只有Ⅱ C.Ⅰ和Ⅱ D.Ⅰ和Ⅲ7、若一棵二叉树的前序遍历序列为a,e,b,d,c,后序遍历序列为b, c,d,e,a,则根结点的孩子结点()。
A.只有e B.有e、b C.有e、c D.无法确定8、一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到()个不同的码字。
算法与数据结构习题及参考答案
算法与数据结构习题及参考答案一、选择题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)。
(完整word)北邮C++数据结构课后习题 习题4参考答案
习题41.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)4个结点可构成(___________)棵不同形态的二叉树。
答案:12(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n〉1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n—1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n—1(7)设只包含根结点的二叉树的高度为1,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k-1 k(8)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT(X)的编号为().答案:24(9)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(10)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________).答案:68(11)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(12)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________).答案:ABCDEF(13)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
数据结构与算法分析习题与参考答案
大学《数据结构与算法分析》课程习题及参考答案模拟试卷一一、单选题(每题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.数据的物理结构被分为 、、 和四种。
北邮数据结构与算法课后答案 第7章
于 n/2 则在后半区间继续查找。
int fun (Stable *L, int low, int high)
/*以第一个元素为基准分割下标在区间[low, high]内的元素序列*/
{L->elem[0]=L->elem[low] ;
K=L->elem[0].key;
while(low<high)
第7章
1.选择题
(1)A (2)C (3)C (4)D (5)D (6)C (7)B (8)C (9)D (10)C
2.判断题
(1)√ (2)Ⅹ (3)√ (4)Ⅹ (5)Ⅹ (6)√ (7)Ⅹ (8)√ (9)√ (10)√
3.简答题
(1)以关键字序列(tim,kay,eva,roy,dot,jon,kim,ann,tom,jim,guy,amy)为例,手工执行以下排序算法
j++;
}
} 4.已知记录序列 a[1..n]中的关键字各不相同,可按如下所述实现计数排序:另设数组 c[1..n],对每个 记录 a[i],统计序列中关键字比它小的记录个数存于 c[i],则 c[i]=0 的记录必为关键字最小的记录,然后依 c[i]值的大小对 a 中记录进行重新排列,试编写实现上述排序的算法。
{if (max=i) {w=r[min];r[min]=r[n-i+1];r[N-i+1]=w;} else {w=r[max];r[max]=r[n-i+1];r[N-i+1]=w;}
} i++; } } 【解答】这是一个双向选择排序算法,每次选择关键码最小的记录放在前面,同时选择关键码最大的记录 放在后面。比较 n*(n-1)/2 次。最好情况移动记录 0 次,最坏情况大约移动记录 3n 次。 (6)请回答以下关于堆的问题: 1)堆的存储结构是顺序的,还是链式的? 2)设有一个大顶堆,即堆中任意结点的关键码均大于它的左孩子和右孩子的关键码。其具有最大 值的元素可能在什么地方? 3)对 n 个元素进行初始建堆的过程中,最多做多少次数据比较? 【解答】1)堆的存储结构是顺序的。 2)堆顶。 3)不超过 4n。
北邮数据结构与算法课后答案第7章
北邮数据结构与算法课后答案第7章第7章1.选择题(1)A (2)C (3)C (4)D (5)D (6)C (7)B (8)C (9)D (10)C2.判断题(1)√ (2)Ⅹ (3)√ (4)Ⅹ (5)Ⅹ (6)√ (7)Ⅹ (8)√ (9)√ (10)√3.简答题(1)以关键字序列(tim,kay,eva,roy,dot,jon,kim,ann,tom,jim,guy,amy)为例,手工执行以下排序算法(按字典序比较关键字的大小),写出每一趟排序结束时的关键字状态:1)直接插入排序;2)冒泡排序;3)直接选择排序;4)快速排序;5)归并排序;6)基数排序。
【解答】略。
(2)已知序列{50,18,12,61,8,17,87,25},请给出采用堆排序对该序列做升序排序时的每一趟结果。
【解答】堆排序过程如下图示:1887 12178255061618712178185025(3)有n个不同的英文单词,它们的长度相等,均为m,若n>>50,m<5,试问采用什么排序方法时间复杂度最小?为什么?【提示】采用基数排序。
基数排序是一种借助多关键码排序思想对单关键码进行排序的方法,它适合n很大,而关键码较小的序列。
本题中英文单词数目n>>50,而单词长度m<5,因此采用基数排序方法最佳。
(4)如果只想得到一个含有n个元素的序列中第k(k<<n)小元素之前的部分排序序列,最好采用什么排序方法?为什么?如有这样一个序列:{57,11,25,36,18,80,22}得到其第3个最小元素之前的部分序列{11,18,22},使用所选择的算法实现时,要执行多少次比较?< p="">【解答】采用堆排序。
简单选择排序和冒泡排序可以在一趟排序后选出一个最大(或最小)元素,要比较n-1次,选次大元素要再比较n-2次,…其时间复杂度是O(n2)。
当k<<n时,从n个元素中选k 个元素不能使用这种方法。
数据结构与算法测试题+参考答案
数据结构与算法测试题+参考答案一、单选题(共80题,每题1分,共80分)1、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?A、仅有头指针的单循环链表B、双链表C、仅有尾指针的单循环链表D、单链表正确答案:C2、数据结构研究的内容是()。
A、数据的逻辑结构B、数据的存储结构C、建立在相应逻辑结构和存储结构上的算法D、包括以上三个方面正确答案:D3、下列关于无向连通图特征的叙述中,正确的是:所有顶点的度之和为偶数边数大于顶点个数减1至少有一个顶点的度为1A、只有1B、1和2C、1和3D、只有2正确答案:A4、下面的程序段违反了算法的()原则。
void sam(){ int n=2;while (n%2==0) n+=2;printf(“%d”,n);}A、确定性B、可行性C、有穷性D、健壮性正确答案:C5、对任意给定的含 n (n>2) 个字符的有限集 S,用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树 T1 和 T2。
下列叙述中,正确的是:A、出现频次不同的字符在 T2 中处于相同的层B、出现频次不同的字符在 T1 中处于不同的层C、T1 的高度大于 T2 的高度D、T1 与 T2 的结点数相同正确答案:A6、数据序列{ 3,2,4,9,8,11,6,20 }只能是下列哪种排序算法的两趟排序结果?A、快速排序B、选择排序C、插入排序D、冒泡排序正确答案:A7、设散列表的地址区间为[0,16],散列函数为H(Key)=Key%17。
采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。
元素59存放在散列表中的地址是:A、11B、9C、10D、8正确答案:A8、采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是:A、每次划分后,先处理较短的分区可以减少递归次数B、递归次数与每次划分后得到的分区处理顺序无关C、递归次数与初始数据的排列次序无关D、每次划分后,先处理较长的分区可以减少递归次数正确答案:B9、以下数据结构中,()是非线性数据结构。
北邮计算机统考试题及答案
北邮计算机统考试题及答案1. 数据结构与算法1.1 简述栈和队列的定义及其主要特点。
栈是一种数据结构,遵循后进先出(LIFO)的原则。
其主要特点是只能在栈顶进行插入和删除操作。
栈的插入操作称为入栈(push),删除操作称为出栈(pop)。
例如,在程序执行中,函数调用和递归调用的栈帧可以通过栈的方式实现。
队列也是一种数据结构,遵循先进先出(FIFO)的原则。
它的主要特点是只能在队尾进行插入操作,在队头进行删除操作。
队列的插入操作称为入队(enqueue),删除操作称为出队(dequeue)。
例如,在操作系统的进程调度中,可以使用队列来实现进程的排队执行。
1.2 常见的排序算法有哪些?简单描述它们的实现原理。
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序和归并排序。
冒泡排序是通过相邻元素的比较和交换来实现的,每次循环找出当前未排序部分的最大值,并将其放置在已排序部分的末尾。
选择排序通过在未排序部分选择最小(或最大)的元素,将其与未排序部分的第一个元素交换位置,实现逐渐将未排序部分的最小(或最大)元素放置到已排序部分的末尾。
插入排序通过将未排序部分的元素逐个插入到已排序部分的适当位置来实现排序。
可以将未排序部分的元素与已排序部分的元素逐个比较并移动,直到找到合适的位置。
快速排序通过选择一个基准元素,将数组分成两个子数组,其中一个子数组的所有元素都小于基准元素,另一个子数组的所有元素都大于基准元素。
然后递归地对两个子数组进行快速排序。
归并排序是将两个有序子数组合并成一个有序数组的过程。
通过不断地将数组进行二分,直到只剩下一个元素。
然后将两个只有一个元素的子数组进行合并,直到最终完成整个数组的排序。
1.3 列举几种常用的查找算法,并简述它们的实现原理。
常用的查找算法有线性查找、二分查找、哈希查找和二叉查找树。
线性查找是从列表的开头开始,逐个比较每个元素,直到找到目标元素或遍历完整个列表。
二分查找是在有序数组中通过比较目标值和数组中间元素的大小来实现的。
北邮C++数据结构课后习题 习题6参考答案
习题61.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。
答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。
答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。
答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。
若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。
答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。
答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。
(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。
答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。
答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。
北邮算法与数据结构复习资料
●(2分)为解决计算机和打印机速度不匹配问题, 通常设置一个打印数据缓冲区, 主机将要输出的数据依次写入缓冲区, 而打印机依次从该缓冲区中取出数据. 该缓冲区的逻辑结构应该是?A. 栈B. 队列C. 树D. 图●(2分)设栈S和队列Q 的初始状态均为空, 元素abcdefg 依次进入栈S. 若每个元素出栈后立即进入队列Q. 且7个元素出对的顺序是bdcfeag, 则栈S 的容量至少是?A . 1 B: 2 C. 3 D, 4●(2分)已知完全二叉树的第六层(根节点视为第一次)有8个节点. 则此完全二叉树节点个数最多为A. 39B. 52C. 111D. 119●将森林转换为对应的二叉树. 若在二叉树中节点u 是节点v 的父节点的父节点. 则在原来的森林中, u与v 的可能关系为甲) 父子关系. 乙)兄弟关系丙) u 的父节点与v 的父节点是兄弟关系A. 只有甲B. 甲和乙C. 甲和丙 D 甲乙丙●下面关于无向连通图特性的叙述中, 正确的是:甲) 所有定点度数之和为偶数. 乙) 边数大于顶点个数减1丙) 至少有一个顶点的度为1.A. 只有甲B.只有乙C.甲和乙D.甲和丙参考答案:1)B 2)C 3)D 4)B 5)C 6)B 7) A●下面叙述中, 不符合m阶B树定义要求的是:A. 根节点最多有m棵子树B.所有叶节点都在同一层上.C.各节点内关键字均升序或降序排列D. 叶节点之间通过指针链接.●已知关键字序列5, 8, 12, 19, 28, 20, 15, 22 为极小堆(小根堆, 最小堆). 添加关键字3调整后得到的极小堆是:A. 3,5,12,8,28,20,15,22,19B. 3,5,12,19,20,15,22,8,28C. 3,8,12,5,20,15,22,28,19D. 3,12,5,8,28,20,15,22,19●若数据元素序列11,12,13,7,8,9,23,4,5 是采用下列排序算法之一得到的第二趟排序后的结果, 则该排序算法只能是:A. 冒泡排序B. 插入排序C.选择排序D.二路归并排序●如元素abcdef 依次进栈, 允许进栈出栈操作交替进行, 但不允许连续三次退栈. 则不可能得到的出栈序列为:A. dcebfaB. cbdaefC.bcaefdD. afedcb●某队列允许在其两端进行入队操作, 但仅允许在一端进行出队操作. 若元素abcde 依次入队后再进行出队操作, 则不可能的出队序列为A. bacdeB. dbaceC.dbcaeD. ecbad●参考答案:1)D 2)A 3)B 4) D 5)CCBACBB●采用递归方式对顺序表进行快速排序. 下列关于递归次数的叙述中, 正确的是:A. 递归的次数与初始数据的排列次序无关.B. 每次划分后先处理较长的区间可以减少递归次数;C. 每次划分后先处理较短的区间可以减少递归次数;D. 递归次数与处理划分后得到的区间的次序无关.●对一组数据(2,12,16,88,5,10)进行排序. 如果前三趟排序结果如下第一趟(2,12,16,5,10,88)第二趟(2,12,5,10,16,88)第三趟(2,5,10,12,16,88)则采用的排序算法可能是:A. 冒泡排序B. 希尔排序C.归并排序D. 基数排序DA1.()数据的逻辑结构是指数据的各数据项之间的逻辑关系。
北邮C++数据结构课后习题 习题5参考答案
习题51.填空题(1)n个顶点的无向图,最多能有(___________)条边。
答案:[n*(n-1)]/2(2)有n个顶点的强连通图G至少有(___________)条弧。
答案:n(3)G为无向图,如果从G的某个顶点出发,进行一次广度优先遍历,即可访问图的每个顶点,则该图一定是(___________)图。
答案:连通(4)若采用邻接矩阵结构存储具有n个顶点的图,则对该图进行广度优先遍历的算法时间复杂度为(___________)。
答案:O(n2)(5)n个顶点的连通图的生成树有(___________)条边。
答案:n-1(6)图的深度优先遍历类似于树的(___________)遍历;图的广度优先遍历类似于树的(___________)遍历。
答案:前序层序(7)对于含有n个顶点e条边的连通图,用普里姆算法求最小生成树的时间复杂度为(___________)。
答案:O(n2)(8)已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为(___________)。
答案:O(n+e)(9)一棵具有n个顶点的生成树有且仅有(___________)条边。
答案:n-12.单选题(1)在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
A. 1/2B. 1C. 2D. 4(2)在一个具有n个顶点的有向图中,若所有顶点的出度数之和为S,则所有顶点的度数之和为()。
A. SB. S-1C. S+1D. 2S(3)具有n个顶点的有向图最多有()条边。
A. nB. n(n-1)C. n(n+1)D. 2n(4)在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
A.3B.2C.1D.1/2(5)若一个图中包含有k个连通分量,若按照深度优先搜索的方法访问所有顶点,则必须调用()次深度优先搜索遍历的算法。
A. kB. 1C. k-1D. k+1(6)若一个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点1开始对该图进行深度优先遍历,得到的顶点序列可能为()。
算法与数据结构试题与答案
A.5
B.6
C.7
D.8
二、填空题(每空 1 分,共 26 分)
1. 通常从四个方面评价算法的质量: _________、 _________、 _________ 和_________。 2. 一个算法的时间复杂度为 (n3 +n 2log 2 n +14 n)/ n 2,其数量级表示为 ________。
3. 以下数据结构中哪一个是非线性结构? ( )
A. 队列
B. 栈
C. 线性表
D. 二叉树
4. 设有一个二维数组 A[m ][ n ],假设 A[0][0] 存放位置在 644 (10) , A[2][2] 存放位置在
676 (10) ,每个元素占一个空间, 问 A[3][3] (10) 存放在什么位置?脚注 (10) 表示用 10 进
素的前一位置,尾指针 R 总是指向队尾元素的当前位置,则该循环队列中的元素个数为
( )。
(A) R-F
(B) F-R
(C) (R-F+M) % M (D) (F-R+M) % M
4 .设某棵二叉树的中序遍历序列为 ABCD ,前序遍历序列为 CABD ,则后序遍历该二叉树
得到序列为( )。
(A) BADC
3. 假定一棵树的广义表表示为 A( C,D ( E,F , G),H ( I ,J )),则树中所含的结点数
为 __________ 个,树的深度为 ___________,树的度为 _________。
4. 后缀算式 9 2 3 +- 10 2 / - 的值为 __________。中缀算式( 3+4X ) -2Y/3 对应的后缀
else {
if (item==BST->data){
北邮C++数据结构课后习题 习题3参考答案
习题31.填空题(部分答案)(1)栈的进出原则是(___________),队列的进出原则是(___________)。
答案:后进先出(LIFO)先进先出(FIFO)(2)设32位计算机系统中,空栈S存储int型数据,栈顶指针为1024H。
经过操作序列push(1),push(2),pop,push(5),push(7),pop,push(6)之后,栈顶元素为(___________),栈底元素为(___________),栈的高度为(___________),输出序列是(___________),栈顶指针为(___________)H。
答案:6 1 3 2,7 1030(3)两栈共享存储空间,其数组大小为100,数组下标从0开始。
top1和top2分别为栈1和栈2的栈顶元素下标,则栈1为空的条件为(___________),栈2为空的条件为(___________),栈1或栈2满的条件为(___________)。
答案:top1==-1 top2==100 top1+1==top2(4)一个队列的入队顺序是1234,则队列的输出顺序是(___________)。
答案:1234(5)设循环队列数组大小为100,队头指针为front,队尾指针为rear;约定front指向队头元素的前一个位置,该位置永远不存放数据。
则入队操作时,修改rear=(___________),出队操作修改front=(___________),队空的判别条件为(___________),队满的判别条件为(___________)。
若front=20,rear=60,则队列长度为(___________),若front=60,rear=20,则队列长度为(___________)。
答案:(rear+1)%100 (front+1)%100 rear==front (rear+1)%100=front 40 60(6)朴素模式匹配算法中,每个串的起始下标均为1,变量i=100,j=10,分别表示主串和模式串当前比较的字符元素下标,若本次比较两字符不同,则i回溯为(___________),j 回溯为(___________)。
数据结构课后答案_北邮
(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
#include"vector"
usingstd::vector;
//定义自然数类classNatural Nhomakorabeaumber{
public:
NaturalNumber(unsignedlongintn=0):num(n){}
unsignedlongintGreatestCommonDivisor(NaturalNumber & nn);//求解最大公约数
C.随机存取顺序存取D.索引存取散列存取
(2)在双向链表p所指结点之前插入s所指结点的操作是()。
A. p->left=s; s->right=p; p->left->right =s; s->left=p->left;
B. p->right=s; p->right->left=s; s->left=p; s->right=p->right;
m = n; n = r; r = m % n;
}
returnn;
}
//返回最大公约数
unsignedlongintNaturalNumber :: GreatestCommonDivisor(NaturalNumber & nn)
{
returnEUCLID(nn);
北邮C++数据结构课后习题 习题2参考答案
习题21.填空题(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。
答案:q->next = s; s->next = p; 或s->next=q->next; q->next = s;(2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。
答案:n/2 (n-1)/2(3)表长为0的线性表称为(___________)。
答案:空表(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。
答案:申请释放(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。
因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
答案:数组 O(1) O(n) 顺序(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为(___________),平均时间复杂度为(___________)。
因此,若对线性表进行频繁的插入和删除操作时,采用(___________)表相对合适。
若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。
数据结构与算法习题含参考答案
数据结构与算法习题含参考答案一、单选题(共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。
北邮数据结构期末试题与答案
试卷四一. 填空题(22 分,每空 1 分)1.设待处理的问题规模为n,若一个算法的时间复杂度为一个常数,则表示为(),若一个算法的执行次数为n*log25n,则时间复杂度表示为()。
2.数据的逻辑结构主要分为()、()、()和()四种。
3.一棵度为3 的树,若度为1 的结点有5 个,度为2 的结点有8 个,度为3 的结点有12 个,则该树有()叶子结点。
4.设一个空栈,栈顶指针为1000H,若有输入序列为1、2、3、4、5,经过push、push、pop、push、pop、push、push 后,输出序列是(),若输入的每个数占4 个字节的空间,则栈顶指针为()H。
5.按照()遍历二叉排序树得到的序列是一个有序序列。
6.若哈夫曼树一共有n 个叶子结点,则该哈夫曼树总结点数为()。
7.设C++中存储三维数组A mnp,则第一个元素为a000,若按行优先存储,则a ijk 前面共有()个元素;若按列优先存储,则a ijk 前面共有()个元素。
8.设8 行8 列的二维数组起始元素为A[0][0],按行优先存储到起始元素下标为0 的一维数组B 中,则元素A[5][3]在B 数组中的位置为B[()]。
9.图的深度优先遍历类似于树的()遍历,它所用的数据结构是(),图的广度优先遍历类似于树的()遍历,使用的数据结构是()。
10.设无向图G 中顶点数为n,则图G 至少有()边,至多有()边;若G 为有向图,则至少有()弧,至多有()弧。
二. 单选题(23 分,每空 1 分)1.顺序表是一种采用()存取方式的()存储结构,链表是一种采用()存取方式的()存储结构。
A.顺序B. 随机C.链式D. 有序2.STL 中最常用的用于处理顺序表问题的容器是(),STL 中用于处理链表问题的容器是()。
A. vectorB. mapC. listD.stack3.长度为20 的有序序列,采用折半查找,共有()个元素的查找长度为3。
北邮数据结构与算法课后答案 第6章
void PrintNode (BiSTree T)
{if(T)
{PrintNode(T->rchild);
printf( T->data) ;
PrintNode(T->lchild);
}
} 5.已知一棵二叉排序树上所有关键字中的最小值为-max,最大值为 max,又知-max<x<max。编写递 归算法,求该二叉排序树上的小于 x 且最靠近 x 的值 a 和大于 x 且最靠近 x 的值 b。 【提示】解决本题的关键是递归函数的参数设置,采用逐渐缩小查找区间的方法来实现。
ASLSUCC=(1+2+…+12)/12=6.5 这种情况就退化成为顺序查找。
(3)试推导含有 12 个结点的平衡二叉树的最大深度,并画出一棵这样的树。 令 Fk 表示含有最少结点的深度为 k 的平衡二叉树的结点数目。那么,可知道 F1=1,F2=2,.....Fn=Fn-2+Fn-1+1. 含有 12 个结点的平衡二叉树的最大深度为5.例如:
typedef struct BiTNode
{datatype data;
int lsize;
struct BiTNode *lchild, *rchild; }BiTNode ,*BiTree;
/*增设 lsize 域的二叉树的类型定义*/
BiTree Index (BiTree T, int k)
/*结点的平衡因子*/ /*带平衡因子域的平衡二叉树的类型定义*/ /*求平衡二叉树 T 的高度*/
p=t;
while(p) {level++; if(p->bf<0) p=p->rchild; else p=p->lchild; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
四、判断括号是否配对:
intCorrect( strings )
{
Inistack(Q);
for(i=0;s[i]== ‘=’;i++ )//表达式以‘=’结束
{
switch(s[i] )
=2n–1
所以,梵塔的移动次数为2n–1次。
三、简化的背包问题:
void Pack( intm, int i,int t)//初始值为:11t
{
for (k=i; k<=n;k++)
{
solution[m]=weight[k];
if( t == weight[k])
{
for ( j=1;j<=m;j++) cout<<solution[j];cout<<endl;
{
C=new struct node;C->next=NULL;q=B->next;
While(q)
{
p=A->r= new struct node;r->exp= p->exp+q->exp;
r->inf=p->inf* q->inf;PolyAdd(C,r);
p=p->next;
void Insert (string S, string T, charch)//设块大小为m
{
i=0; p=T;
while ((p->next)&&(!i))
{
for(j=1;j<=m;j++ ) if(p->str[j]==ch) i=j;
if (!i)p=p->next;
}
if (!i)for( j=1;j<=m;j++ )if(p->str[j]==ch)i=j;
}
q=q->next;
}
}
二、梵塔的移动次数:
已知移动次数迭代公式为:M (n)=2M(n-1 ) + 1
初值为:M( 0 )=0
则:M(n)=2(2M(n-2 ) + 1) +1
=4M( n-2 )+3
=8M(n-3 )+ 7
=2iM ( n-i ) + 2i–1
若n=i,则M (n-n)=0,故:M ( n ) =2nM(n-n)+2n–1
if (! i)p->next=S; else//S插在T后
{ //ch所在结点分裂,S插在T中分裂的两结点间
q= newstruct node; q->str=p->str; q->next=p->next;
for(j=i; j<=m; j++)p->str[j]= ‘#’; p->next=S;
}
intEmptyQ ( )
{
if (Empty (S1) &&Empty(S2))return1;return 0;
}
voidEnqueue ( elemtypex)
{
if (Full(S1))if (Empty(S2))while(! Empty (S1))Push(S2,Pop(S1));
if (!Full(S1))Push(S1,x);
return 1;
}
五、堆栈可能的输出:
1234124313241342 14231432
21342143 23142341 24132431
312431423214324134123421
412341324213423143124321
六、用两个堆栈实现一个队列:
intFullQ()
{
if(Full (S1)&&!Empty (S2)) return 1;return0;
for (j=1; j<i; j++ ) q->str[j]= ‘#’;p=S;
while ( p->next )p=p->next;p->next=q;
}
}
九、上三角矩阵的存储:
k=(i-1)*n+j-i*(i-1)/2=(2n-i+1)*i/2+j-n
f1=(2n-i+1)*i/2
f2=j
c=-n
}
elemtype Dequeue( )
{
if (Empty(S2))while(!Empty(S1))Push(S2,Pop(S1));
if (! Empty(S2))returnPop(S2);
}
七、生成新串及字符第一次出现位置:
intIndex ( string S,stringT)
{
for (i=1;i+ Len(T)-1<=Len(S); i++ )
十、循环右移k位:
12345 6 78(n=8, k=3)
if (!Index(T,ch)&& ! Index(R,ch) )
{R=Concat(R, ch);P[j++]=i; }
}
}
八、块链字符串插入:
{为避免字符串内部块间大量的数据移动,最好的方法是定义两种
字符串中不出现的字符作为空标记和串结束标记,如‘#’和‘$’;
也可只使用空标记,串结束以块尾指针为空表示,其算法如下:
{
case‘(’:
case‘[’:
case ‘{’:
Push(Q, s[i]);break;
case‘)’:
case‘]’:
case‘}’:
if( Empty(Q))return0;t=Pop(Q);
if(!Matching( t,s[i]))return 0;
}
}
if(! Empty(Q) ) return0;
作业参考答案
一、(带头结点)多项式乘法C= A×B:
void PolyAdd ( list &C,listR)//R为单个结点
{
p=C;
while((!p->next) &&(p->next->exp>R->exp)) p=p->next;
if ((p->next)||(p->next->exp<R->exp))
ifEqual( Sub ( S,I, Len(T)), T) returni;
return0;
}
voidCreatNewStr (stringS, stringT, stringR, arrant P)
{
R=“”; j=0;
for(i=1;i<=Len(S);i++ )
{
ch=Sub( S, i, 1 );
{R->next=p->next;p->next=R;}else
{p->next->inf +=R->inf;deleteR;
if(!p->next->inf)
{ R=p->next;p->next=R->next;delete R;}
}
}
voidPolyMul(listA, list B,list&C)