数据结构习题集答案_C语言版(严蔚敏 吴伟民)


n(n + 1) 2
( 5 )1 + ( 1 + 2 ) + ( 1 + 2 + 3 ) + . . . + ( 1 + 2 + 3 + . . . + n ) =

i =1
n
i(i + 1) 2
=
1 n 1 n 2 1 n 2 1 n ( 1 ) ( ) i i + = i + i = i ∑ ∑ ∑i + 2 ∑ 2 i =1 2 i =1 2 i =1 i =1
( 6 )i = 1 ;j = 0 ; w h i l e ( i + j < = n ){ @ i f ( i > j )j + + ; e l s ei + + ; } ( 7 )x = n ;y = 0 ; @ y + + ; } ( 8 )x = 9 1 ;y = 1 0 0 ; w h i l e ( y > 0 ){ @ i f ( x > 1 0 0 ){x=1 0 ;y ;} e l s ex + + ; } 解:( 1 )n 1 ( 2 )n 1 ( 3 )n 1 ( 4 )n + ( n 1 ) + ( n 2 ) + . . . + 1 = / /n 是不小于 1 的常数 w h i l e ( x > = ( y + 1 ) * ( y + 1 ) ){
n) n−2
1 . 1 1已知有实现同一功能的两个算法,其时间复杂度分别为 O
(2 ) 和 O(n ) ,假设现实计算机可连续
n 10
运算的时间为10 秒 (1 0 0 多天) , 又每秒可执行基本操作 (根据这些操作来估算算法时间复杂度)10 次。 试问在此条件下,这两个算法可解问题的规模(即 n 值的范围)各为多少?哪个算法更适宜?请说明理由。 解: 2
第 1 章 绪论
1 . 1简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符 号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1 . 2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由 具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型 通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数 据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实 现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1 . 3设有数据结构( D , R ) ,其中
请判断以下断言正确与否: ( 1 )f ( n ) 是O ( g ( n ) ) ( 2 )h ( n ) 是O ( f ( n ) ) ( 3 )g ( n ) 是O ( h ( n ) ) ( 4 )h ( n ) 是O ( n) ( 5 )h ( n ) 是O ( n l o g n ) 解:( 1 ) 对 ( 2 ) 错 ( 3 ) 错 ( 4 ) 对 ( 5 ) 错 1 . 1 3 试设定若干 n 值,比较两函数 n 和 50n log 2 大于 50n log 2
I s D e s c e n d i n g ( C ) 操作结果:如果复数 C 的两个元素按降序排列,则返回 1 ,否则返回 0 M a x ( C , & e ) 操作结果:用 e 返回复数 C 的两个元素中值较大的一个 M i n ( C , & e ) 操作结果:用 e 返回复数 C 的两个元素中值较小的一个 } A D TC o m p l e x A D TR a t i o n a l N u m b e r { 数据对象:D = { s , m | s , m 为自然数,且 m 不为 0 } 数据关系:R = { < s , m > } 基本操作: I n i t R a t i o n a l N u m b e r ( & R , s , m ) 操作结果:构造一个有理数 R ,其分子和分母分别为 s 和m D e s t r o y R a t i o n a l N u m b e r ( & R ) 操作结果:销毁有理数 R G e t ( R , k , & e ) 操作结果:用 e 返回有理数 R 的第 k 元的值 P u t ( & R , k , e ) 操作结果:改变有理数 R 的第 k 元的值为 e I s A s c e n d i n g ( R ) 操作结果:若有理数 R 的两个元素按升序排列,则返回 1 ,否则返回 0 I s D e s c e n d i n g ( R ) 操作结果:若有理数 R 的两个元素按降序排列,则返回 1 ,否则返回 0 M a x ( R , & e ) 操作结果:用 e 返回有理数 R 的两个元素中值较大的一个 M i n ( R , & e ) 操作结果:用 e 返回有理数 R 的两个元素中值较小的一个 } A D TR a t i o n a l N u m b e r 1 . 5试画出与下列程序段等价的框图。 ( 1 )p r o d u c t = 1 ;i = 1 ; w h i l e ( i < = n ) { p r o d u c t* =i ; i + + ; } ( 2 )i = 0 ; d o{ i + + ; }w h i l e ( ( i ! = n )& &( a [ i ] ! = x ) ) ; ( 3 )s w i t c h{ c a s ex < y :z = y x ;b r e a k ; c a s ex = y :z = a b s ( x * y ) ;b r e a k ; d e f a u l t :z = ( x y ) / a b s ( x ) * a b s ( y ) ; }
( 1 ) ( 2 )
f (n ) = 10n 2 + ln n!+10 n
(
3
), g (n ) = 2n
4
+n+7
f (n ) = (ln (n!) + 5)
2
,g
(n ) = 13n 2.5
2
( 3 ) ( 4 )
=
1 1 1 n(n + 1)( 2n + 1) + n(n + 1) = n(n + 1)( 2n + 3) 12 4 12
( 6 )n ( 7 )
n 向下取整
( 8 )1 1 0 0 1 . 9 假设 n 为2 的乘幂,并且 n > 2 ,试求下列算法的时间复杂度及变量 c o u n t 的值(以 n 的函数形式表示) 。 i n tT i m e ( i n tn ){ c o u n t=0 ; x = 2 ; w h i l e ( x < n / 2 ){ x* =2 ; c o u n t + + ; } r e t u r nc o u n t ; } 解: o(log 2 c o u n t = log 2
D = {d1, d 2, d 3, d 4}, R = {r }, r = {(d1, d 2 ), (d 2, d 3), (d 3, d 4)}
试按图论中图的画法惯例画出其逻辑结构图。 解:
1 . 4试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均 为自然数且分母不为零的分数) 。 解: A D TC o m p l e x { 数据对象:D = { r , i | r , i 为实数} 数据关系:R = { < r , i > } 基本操作: I n i t C o m p l e x ( & C , r e , i m ) 操作结果:构造一个复数 C ,其实部和虚部分别为 r e 和i m D e s t r o y C m o p l e x ( & C ) 操作结果:销毁复数 C G e t ( C , k , & e ) 操作结果:用 e 返回复数 C 的第 k 元的值 P u t ( & C , k , e ) 操作结果:改变复数 C 的第 k 元的值为 e I s A s c e n d i n g ( C ) 操作结果:如果复数 C 的两个元素按升序排列,则返回 1 ,否则返回 0
2 2 2 在什么范围内,函数 n 的值 n 的增长趋势,并确定 n
3 . 5
n 的值。 n 的值较大。
解: n 的增长趋势快。但在 n 较小的时候, 50n log 2 当n > 4 3 8 时, n 1 . 1 4判断下列各对函数
2
> 50n log 2 n
f (n ) 和 g (n ) ,当 n → ∞ 时,哪个函数增长更快?
n
7
5
= 1012
n = 4 0 n = 1 6
n10 = 1012
一种算,在这个规模下,第二种算法所花费的代价要大得多。故在这个规模下,第
f (n ) = 21n 4 + n 2 + 1000 , g (n ) = 15n 4 + 500n 3 , h(n ) = 500n 3.5 + n log n
合集下载

数据结构题集c语言版答案严蔚敏吴伟民[1]

数据结构题集c语言版答案严蔚敏吴伟民[1]

16void Descend(int &x, int &y, int &z){int t;if(x<y) {t=x;x=y;y=t;}if(x<z) {t=x;x=z;z=t;}if(y<z) {t=y;y=z;z=t;}}17Status Fibonacci(int k, int m, int &f)/* 求k阶斐波那契序列的第m项的值f */{int i,j,sum,temp[20];if(k<2||m<0) return ERROR;if(m<k-1) f=0;else if(m==k-1) f=1;else{for(i=0;i<=k-2;i++)temp[i]=0;temp[k-1]=1;for(i=k;i<=m;i++){sum=0;for(j=i-k;j<i;j++)sum+=temp[j];temp[i]=sum;}f=temp[m];}return OK;}// Fibonacci18void Scores(ResultType *result, ScoreType *score)/* 求各校的男、女总分和团体总分, 并依次存入数组score */ /* 假设比赛结果已经储存在result[ ]数组中, *//* 并以特殊记录{"", male, ' ', "", 0 }(域scorce=0)*//* 表示结束*/ {int i=0;while(result[i].sport!=NULL){switch(result[i].schoolname){case 'A':score[0].totalscore+=result[i].score;if(result[i].gender==male) score[0].malescore+=result[i].score;else score[0].femalescore+=result[i].score;break;case 'B':score[1].totalscore+=result[i].score;if(result[i].gender==male) score[1].malescore+=result[i].score;else score[1].femalescore+=result[i].score;break;case 'C':score[2].totalscore+=result[i].score;if(result[i].gender==male) score[2].malescore+=result[i].score;else score[2].femalescore+=result[i].score;break;case 'D':score[3].totalscore+=result[i].score;if(result[i].gender==male) score[3].malescore+=result[i].score;else score[3].femalescore+=result[i].score;break;case 'E':score[4].totalscore+=result[i].score;if(result[i].gender==male) score[4].malescore+=result[i].score;else score[4].femalescore+=result[i].score;break;}i++;}for(s='A';s<='E';s++){printf("School %c:\n",s);printf("Total score of male:%d\n",score[i].malescore);printf("Total score of female:%d\n",score[i].femalescore);printf("Total score of all:%d\n\n",score[i].totalscore);}}19Status Series(int ARRSIZE, int a[])/* 求i!*2^i序列的值并依次存入长度为ARRSIZE的数组a; */ /* 若所有值均不超过MAXINT,则返回OK,否则返回OVERFLOW */ {int last,i;last=1;for (i=1;i<=ARRSIZE;i++){a[i-1]=last*2*i;if (a[i-1]>MAXINT)return OVERFLOW;last=a[i-1];}return OK;}20float Polynomial(int n, int a[], float x)/* 求一元多项式的值P(x)。

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

《数据结构-C语⾔版》(严蔚敏,吴伟民版)课本源码+习题集解析使⽤说明《数据结构-C语⾔版》(严蔚敏,吴伟民版)课本源码+习题集解析使⽤说明先附上⽂档归类⽬录:课本源码合辑链接☛☛☛习题集全解析链接☛☛☛★教材及习题源码下载★链接☛☛☛(GitHub仓库)欢迎Star项⽬,如有疑问,请在Issues反馈。

博主有话说:01.⾃学编程,难免思路阻塞,故我在本博客陆续更新了严蔚敏,吴伟民版《数据结构-C语⾔版》各章节的课本源码和配套习题集答案解析,⽬的是为了整理数据结构中的知识点,并与⽹友交流意见,集思⼴益,共同进步。

(⽬前已更新完毕,细节待完善)★注★左侧随笔分类下⽤两个栏⽬:<课本源码>、<习题解析>来存放本主题⽂档。

<课本源码>⽬录下实现了三种数据结构源码:⼀:课本中重点描述过的数据结构与算法;⼆:课本中提到,但没有详细描述的数据结构;三:课本中未提到,但在习题集中涉及到的数据结构。

<习题解析>⽬录下存放了配套习题集中每章的习题解答,但对于算法设计题,要注意其相对路径,因为涉及到了别的⽂档的引⽤。

各⽂档的组织⽅式参见附录⼆中的图⽰,有疑问联系博主。

02.本源码与解析涵盖了《数据结构》课本和习题集两部分,课本和习题集分别以下图书籍为参照(我有左边的纸质版和右边的电⼦版,貌似内容没区别):03.所有源码实现均使⽤C语⾔,遵循C99标准,使⽤C-Free 5(C-Free置gcc编译器,编译时,需要在菜单栏,定位到构建-->构建选项-->类别-->C Language,勾选第三个:"ISO C99 plus GNU extensions [-std=gnu99]",即编译选项⽤-std=gnu99,⽽不是-std=c89或者-std=c99)测试通过(不要在CFree⾥创建⼯程,如果确实想在⼯程⾥运⾏,那⽂件互相引⽤的⽅式需要改写)。

数据结构(C语言版)严蔚敏课后习题答案.

数据结构(C语言版)严蔚敏课后习题答案.

数据结构(C语言版)严蔚敏第1章绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

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

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

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

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作: InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

数据结构题集c语言版答案严蔚敏吴伟民[1]

数据结构题集c语言版答案严蔚敏吴伟民[1]

16void Descend(int &x, int &y, int &z){int t;if(x<y) {t=x;x=y;y=t;}if(x<z) {t=x;x=z;z=t;}if(y<z) {t=y;y=z;z=t;}}17Status Fibonacci(int k, int m, int &f)/* 求k阶斐波那契序列的第m项的值f */{int i,j,sum,temp[20];if(k<2||m<0) return ERROR;if(m<k-1) f=0;else if(m==k-1) f=1;else{for(i=0;i<=k-2;i++)temp[i]=0;temp[k-1]=1;for(i=k;i<=m;i++){sum=0;for(j=i-k;j<i;j++)sum+=temp[j];temp[i]=sum;}f=temp[m];}return OK;}// Fibonacci18void Scores(ResultType *result, ScoreType *score)/* 求各校的男、女总分和团体总分, 并依次存入数组score */ /* 假设比赛结果已经储存在result[ ]数组中, *//* 并以特殊记录{"", male, ' ', "", 0 }(域scorce=0)*//* 表示结束*/ {int i=0;while(result[i].sport!=NULL){switch(result[i].schoolname){case 'A':score[0].totalscore+=result[i].score;if(result[i].gender==male) score[0].malescore+=result[i].score;else score[0].femalescore+=result[i].score;break;case 'B':score[1].totalscore+=result[i].score;if(result[i].gender==male) score[1].malescore+=result[i].score;else score[1].femalescore+=result[i].score;break;case 'C':score[2].totalscore+=result[i].score;if(result[i].gender==male) score[2].malescore+=result[i].score;else score[2].femalescore+=result[i].score;break;case 'D':score[3].totalscore+=result[i].score;if(result[i].gender==male) score[3].malescore+=result[i].score;else score[3].femalescore+=result[i].score;break;case 'E':score[4].totalscore+=result[i].score;if(result[i].gender==male) score[4].malescore+=result[i].score;else score[4].femalescore+=result[i].score;break;}i++;}for(s='A';s<='E';s++){printf("School %c:\n",s);printf("Total score of male:%d\n",score[i].malescore);printf("Total score of female:%d\n",score[i].femalescore);printf("Total score of all:%d\n\n",score[i].totalscore);}}19Status Series(int ARRSIZE, int a[])/* 求i!*2^i序列的值并依次存入长度为ARRSIZE的数组a; */ /* 若所有值均不超过MAXINT,则返回OK,否则返回OVERFLOW */ {int last,i;last=1;for (i=1;i<=ARRSIZE;i++){a[i-1]=last*2*i;if (a[i-1]>MAXINT)return OVERFLOW;last=a[i-1];}return OK;}20float Polynomial(int n, int a[], float x)/* 求一元多项式的值P(x)。

数据结构(C语言版)清华大学出版社 严蔚敏 吴伟民

数据结构(C语言版)清华大学出版社 严蔚敏 吴伟民

吉首大学题库一、一、单选题(每题 2 分,共20分)1. 1.对一个算法的评价,不包括如下()方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3. 3.对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35. 5.AOV网是一种()。

A.有向图B.无向图C.无向无环图D.有向无环图6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度()。

A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。

A.值B.函数C.指针D.引用8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。

A.行号B.列号C.元素值D.非零元素个数9.9.快速排序在最坏情况下的时间复杂度为()。

A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、二、运算题(每题 6 分,共24分)1. 1.数据结构是指数据及其相互之间的______________。

当结点之间存在M对N(M:N)的联系时,称这种结构为_____________________。

《数据结构》习题集答案(C语言版)严蔚敏

《数据结构》习题集答案(C语言版)严蔚敏

第1章绪论1、1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型与抽象数据类型。

解:数据就是对客观事物得符号表示。

在计算机科学中就是指所有能输入到计算机中并被计算机程序处理得符号得总称。

数据元素就是数据得基本单位,在计算机程序中通常作为一个整体进行考虑与处理。

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

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

存储结构就是数据结构在计算机中得表示。

数据类型就是一个值得集合与定义在这个值集上得一组操作得总称。

抽象数据类型就是指一个数学模型以及定义在该模型上得一组操作。

就是对一般数据类型得扩展。

1、2 试描述数据结构与抽象数据类型得概念与程序设计语言中数据类型概念得区别。

解:抽象数据类型包含一般数据类型得概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用得数据与在这些数据上所进行得操作。

在定义抽象数据类型中得数据部分与操作部分时,要求只定义到数据得逻辑结构与操作说明,不考虑数据得存储结构与操作得具体实现,这样抽象层次更高,更能为其她用户提供良好得使用接口。

1、3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图得画法惯例画出其逻辑结构图。

解:1、4 试仿照三元组得抽象数据类型分别写出抽象数据类型复数与有理数得定义(有理数就是其分子、分母均为自然数且分母不为零得分数)。

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作:InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部与虚部分别为re 与imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e 返回复数C 得第k 元得值Put(&C,k,e)操作结果:改变复数C 得第k 元得值为eIsAscending(C)操作结果:如果复数C 得两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C 得两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e 返回复数C 得两个元素中值较大得一个 Min(C,&e)操作结果:用e 返回复数C 得两个元素中值较小得一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子与分母分别为s与m DestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R得第k元得值Put(&R,k,e)操作结果:改变有理数R得第k元得值为eIsAscending(R)操作结果:若有理数R得两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R得两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R得两个元素中值较大得一个Min(R,&e)操作结果:用e返回有理数R得两个元素中值较小得一个}ADT RationalNumber1、5 试画出与下列程序段等价得框图。

《数据结构》习题集答案(C语言版)严蔚敏

第1章绪论1.1简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

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

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

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

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

解:1.4试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:ADTComplex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作:InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re 和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e 返回复数C 的第k 元的值Put(&C,k,e)操作结果:改变复数C 的第k 元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADTComplexADTRationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和m DestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADTRationalNumber1.5试画出与下列程序段等价的框图。

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

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

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

严蔚敏教授编写的《数据结构(C语言版)》是许多计算机专业学生的必读教材。

以下是对该书课后习题的一些参考答案,供学习者参考。

第一章:绪论1. 数据结构的定义:数据结构是计算机中存储、组织数据的方式,它不仅包括数据元素的类型和关系,还包括数据操作的函数。

2. 数据结构的重要性:数据结构对于提高程序的效率至关重要。

合理的数据结构可以减少算法的时间复杂度和空间复杂度。

第二章:线性表1. 线性表的定义:线性表是由n个元素组成的有限序列,其中n称为线性表的长度。

2. 线性表的顺序存储结构:使用数组来存储线性表的元素,元素的存储关系是连续的。

3. 线性表的链式存储结构:使用链表来存储线性表的元素,每个元素包含数据部分和指向下一个元素的指针。

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

2. 队列的定义:队列是一种特殊的线性表,允许在一端(队尾)进行插入操作,在另一端(队首)进行删除操作。

第四章:串1. 串的定义:串是由零个或多个字符组成的有限序列。

2. 串的存储结构:串可以采用顺序存储结构或链式存储结构。

第五章:数组和广义表1. 数组的定义:数组是由具有相同类型的多个元素组成的集合,这些元素按照索引顺序排列。

2. 广义表的定义:广义表是线性表的推广,其中的元素可以是数据也可以是子表。

第六章:树和二叉树1. 树的定义:树是由节点组成的,其中有一个特定的节点称为根,其余每个节点有且仅有一个父节点。

2. 二叉树的定义:二叉树是每个节点最多有两个子节点的树。

第七章:图1. 图的定义:图是由顶点和边组成的数据结构,可以表示复杂的关系。

2. 图的存储结构:图可以用邻接矩阵或邻接表来存储。

数据结构(C语言版)严蔚敏课后习题答案

数据结构(C语言版)严蔚敏课后习题答案数据结构(C语言版)严蔚敏课后习题答案一、线性表1. 顺序表顺序表是一种存储结构,它将元素顺序存放在一块连续的存储区域中。

C语言中常用数组来实现顺序表。

以下是一些常见题目的解答:题目1:已知顺序表中存储了n个整数,请编写一个算法,将这个顺序表中的所有负数挑选出来,并将它们按照原有顺序存放在新的顺序表中。

解答:```#include <stdio.h>#define MAX_SIZE 100int main() {int A[MAX_SIZE], neg[MAX_SIZE];int n, i, j = 0;printf("Enter the number of elements: ");scanf("%d", &n);printf("Enter the elements: ");for (i = 0; i < n; i++) {scanf("%d", &A[i]);if (A[i] < 0) {neg[j] = A[i];j++;}}printf("Negative numbers: ");for (i = 0; i < j; i++) {printf("%d ", neg[i]);}return 0;}```题目2:假设顺序表A和B中的元素递增有序排列,编写一个算法合并这两个顺序表,并使合并后的顺序表仍然递增有序。

解答:```#include <stdio.h>#define MAX_SIZE 100int main() {int A[MAX_SIZE], B[MAX_SIZE], C[MAX_SIZE * 2]; int m, n, i, j, k;printf("Enter the number of elements in the first list: "); scanf("%d", &m);printf("Enter the elements in increasing order: ");for (i = 0; i < m; i++) {scanf("%d", &A[i]);C[i] = A[i];}printf("Enter the number of elements in the second list: "); scanf("%d", &n);printf("Enter the elements in increasing order: ");for (i = 0; i < n; i++) {scanf("%d", &B[i]);C[m + i] = B[i];}// Merge A and B into Ci = j = k = 0;while (i < m && j < n) { if (A[i] < B[j]) {C[k] = A[i];i++;} else {C[k] = B[j];j++;}k++;}while (i < m) {C[k] = A[i];i++;k++;}while (j < n) {C[k] = B[j];j++;k++;}printf("Merged list in increasing order: ");for (i = 0; i < m + n; i++) {printf("%d ", C[i]);}return 0;}```2. 链表链表是一种动态的数据结构,它通过结点之间的指针联系起来。

数据结构课后习题答案详解(C语言版-严蔚敏)

数据结构习题集答案(C语言版严蔚敏)第2章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

解:头指针是指向链表中第一个结点的指针。

首元结点是指链表中存储第一个数据元素的结点。

头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。

它可以对空表、非空表以及首元结点的操作进行统一处理。

2.2 填空题。

解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。

(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。

单链表中逻辑上相邻的元素的物理位置不一定紧邻。

(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。

(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。

2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。

2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。

解:2.5 画出执行下列各行语句后各指针及链表的示意图。

L=(LinkList)malloc(sizeof(LNode)); P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是__________________。

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