算法与数据结构C语言习题参考复习资料章.docxVIP

  • 3
  • 0
  • 约9.78千字
  • 约 33页
  • 2021-11-05 发布于北京
  • 举报

算法与数据结构C语言习题参考复习资料章.docx

算法与数据结构 算法与数据结构 C 语言习题参考复习资料章 PAGE PAGE 10 / 32 绪 论 .将下列复杂度由小到大重新排序: A .2 n B .n ! C .n 5 D .10 000 E .n * 2 (n ) 【答】10 000 n* 2 (n ) n 5 2n n! .将下列复杂度由小到大重新排序: A .n * 2 (n ) B .n + n 2 + n 3 C .24 D .n 0.5 【答】24 n 0.5 n * 2  (n ) n + n 2 + n 3 .用大“O ”表示法描述下列复杂度: A .5 n 5/2 + n 2/5 B .6* 2  (n ) + 9n C .3 n 4 + n * (n ) D .5 n 2 + n 3/2 2 【答】A :O (n 5/2 ) B :O (n ) C :O (n 4 ) D :O (n 2 ) .按照增长率从低到高的顺序排列以下表达式:4n2 , 3n, 3n , 20n , 2000 , 2n , n2/3。又 n !应排在第几位? 【答】按照增长率从低到高依次为:2000, 20 n , 4n 2 , 3n 。 n , n ,n 2/3 , 3 2 n !的增长率比它们中的每一个都要大,应排在最后 一位。 计算下列程序片断的时间代价: 1; (i) { (“\n ”); 1; } 【答】循环控制变量 i从 1 增加到 n ,循环体执行 n 次, 第一句 i的初始化执行次数为 1 ,第二句执行n 次,循环体中第一句执行 n 次,第二句i从 1 循环到n ,共执行n 次。所以该程序段总的时间代价为: T (n ) = 1 +n + 2n = 3 1 =O (n ) 计算下列程序片断的时间代价: 1; (i) { 1; (j) { 1; (k) { (“\n ”); 1; } 1; } 1; } 【答】循环控制变量 i从 1 增加到 n ,最外层循环体执行n 次,循环控制变量 j从 1 增加到 n ,中间层循环体执行n 次,循环控制变量k 从 1 增加到 n ,最内层循环体执行n 次,所以该程序段总的时间代价为: T (n ) = 1 +n + n{1 + n + n[1 + n + 2n +1] +1 +1}+ 1 = 3n 3 + 3n 2 +4n +2 = O (n 3 ) 线性表 试写一个插入算法 (, p, x ),在所指顺序表中,下标为 p 的元素之后,插入一个值为 x 的元素,返回插入成功与否的标志。 【答】 数据结构 采用 2.1.2 节中顺序表定义。 ( , p, x ) { /* 在所指顺序表中下标为 p 的元素之后插入元素 x */ q; ( n = ) { /* 溢出 */ (“!\n” ); 0; } (p0 p1 ) { /* 不存在下标为 p 的元素 */ (“ ! \n” ); 0; } (n - 1; q1; ) /* 插入位置与之后的元素均后移一个位置 */ [1] = [q]; [1] = x; /* 插入元素 x */ n = n + 1; /* 元素个数加 1 */ 1; } 2 试写一个删除算法(, x,)在所指顺序表中,删除一个值为 x的元素,返回删除成功与否的标志。 【答】 数据结构 采用 2.1.2 节中顺序表定义。 ( , p, x ) { /* 在所指顺序表中删除值为 x 的元素 */ ; (0) /*查找值为x 的元素的下标*/ ([p]){ (; q1; ) /* 被删除元素之后的元素均前移一个位置 */ [q]=[1];n = n-1; [q] = [1]; n = n - 1; 1 ; } 0; } 设有一线性表e = (e, e , e , … , ),其逆线性表定 0 1 2 1 义为e = ( 1 , … , e 2 , e )。请设计一个算法,将用顺 1 0 序表表示的线性表置逆,要求逆线性表仍占用原线性表的 空间。 【答】 数据结构 采用 2.1.2 节中顺序表的定义。思路 考虑对数组[ 进] 行置逆,即把第一个元素和最后一个元素换 位置,把第二个元素和倒数第二个元素换位置……。注意 这种调换的工作只需对数组的前一半元素进行,所以设置整数变量用于存放数组长度的一半的值。大家可以考虑一下:为什么不能对整个数组进行如上的对元素“换位置”的工作?(提示:这样会将本来已经置逆的线性表又置逆回来,即又变成了原来的 表。) 顺序表的置逆算法 ( ){ x; , i; (n 0 n 1) ; /*空表或只有一个元素,直接返回*/ = n / 2; ( i = 0; i ; ){ /* 只需调换半个表的元素*/ x = [i]; [i] = [n 1 i];

文档评论(0)

1亿VIP精品文档

相关文档