网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构练习题(有答案).doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1章 绪 1.1 有下列几种二元组表示的数据结构,试画出它们分别对应的图形表示,并指出它们分别属于何种结构。 (1) A= ( D,R ),其中,D = { a1,a2,a 3,a4 }, R={ } (2) B= ( D,R ),其中,D = { a,b,c,d,e}, R={ (a,b),(b,c),(c,d),(d,e)} (3) C= ( D,R ),其中,D = { a,b,c,d,e,f,g}, R={ (d,b),(d,g),(b,a),(b,c),(g,e),(e,f)} (4) K= ( D,R ),其中,D = { 1,2,3,4,5,6}, R={ 1,2,2,3,2,4,3,4,3,5,3,6,4,5,4,6} (1) 集合 (2) 线性表 (3) 树 (4) 图 1.2 设n为正整数,求下列各程序段中的下划线语句的执行次数。 (1) i=1; k=0 while(i=n-1) { k+=10*i ; i++; } (2) for (int i=1; i=n; i++) for (int j=1; j=n; j++) { c[i][j]=0; for (int k=1; k=n; k++) c[i][j]=c[i][j]+a[i][k]*b[k][j] } 解: (1) n-1 (2) (3) x=0; y=0; for (int i=1; i=n; i++) for (int j=1; j=i; j++) for (int k=1; k=j; k++) x=x+y; (3) 1.3 指出下列个算法的功能,并求其时间复杂度。 (1) int sum1(int n) { int p=1,s=0; for (int i=1;i=n; i++) { p*= i; s+=p;} return s; } (2) int sum2 (int n) { int s=0; for ( int i=1; i=n; i++) { int p=1; for (int j=1; j=i; j++) p*=j; s+=p; } return s; } 解: (1) , T(n)=O(n) (2) , T(n)=O(n2) 1.4 算法设计 有3枚硬币,其中有1枚是假的,伪币与真币重量略有不同。如何借用一架天平,找出伪币?以流程图表示算法。 上机练习题 要求:给出问题分析、算法描述、源程序及运行截图,在线提交。 1. 设 a, b, c为3个整数,求其中位于中间值的整数。 第2章 线性表 1. 设计算法:在顺序表中删除值为e的元素,删除成功,返回1;否则,返回0。 int SqlistT::DeleteElem( T e ) { for (i=1; i=length; i++) // 按值顺序查找 * i可从0开始 if (elem[i-1]= =e) // 找到,进行删除操作 { for ( j=i; jlength; j++) // ai至an依次前移 Elem[j-1] = elem[j]; length - - ; // 表长减一 return 1 ; //删除成功,返回 1 } return 0 ; // 未找到,删除不成功,返回 0 } 2. 分析顺序表中元素定位算法 int SqListT::Locate ( T e ) 的时间复杂度。 解:设表长为n,等概率下,每个元素被定位的概率为:p=1/n 定位成功第i个元素,需比较i次 3.对于有头结点的单链表,分别写出定位成功时,实现下列定位语句序列。 (1) 定位到第i个结点ai; p=head; j=0; while ( p ji ) { p=p-next; j++;} (2) 定位到第i个结点的前驱ai-1; p=head; j=0; while ( p ji-1 ) { p=p-next; j++;} (3) 定位到尾结点; p=head; while ( p -next ) p=p-next; (4) 定位到尾结点的前驱。 p=head; while ( p-next-next ) p=p-next; 4.描述一下三个概念的区别:头指针,头结点,首元结点。并给予图示。 头指针:是一个指针变量,里面存储的是链表中首结点的地址,并以此来标识一个链表。 头结点:附加在第一个元素结点之前的一个结点,头指针指向头结点。 首元结点:指链表中的第一个元素结点。 5. 对于无头结点单链表,给出删除第i个结点

文档评论(0)

xina171127 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档