Data02习题解答分析.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data02习题解答分析

数据结构 * 第二章 线性表习题 1、编写一个算法,删除线性表A中所有值为b的元素。假定A中有n(0)个元素,采用顺序存储结构。 2、编写一个算法,使用最少的交换次数,将线性表A中所有奇数值元素保存在下标低的一端,偶数值元素保存在下标高的一端。假定A中有n(0)个元素,采用顺序存储结构。 3、编写一个算法,将元素b插入到线性表A中。假定A中有n(0)个元素,采用顺序存储结构,并且A是一个非递增表。 * 4、线性表A=(a1,a2,…,am)和B=(b1,b2,…bn)分别有m和n个元素,采用链式存储结构。编写一个算法,将A和B合并成: C=(a1,b1,a2,b2,…,am,bm ,bm+1,… bn) 或者 C=(a1,b1,a2,b2,…,an,bn ,an+1,… am) 5、编写一个算法,将有序链表A和B合并成新的链表C。表A、B、C的表头指针为HA、HB和HC。 * 习题解答 1、编写一个算法,删除线性表A中所有值为b的元素。A中有n(0)个元素,采用顺序存储结构。 思路1 设置一个循环变量i,从1开始判断每个元素A[i],如果等于b,则删除A[i],将i+1到表尾的所有元素向前移动一个单元,并修正表长(减1),然后从当前i开始继续判断每个元素A[i],直到将表中所有的元素都判断完为止。 * i = 1 A[i] = b A[j-1] = A[j] i = N 是 否 j = i+1 j = N 是 否 j = j+1 N = N-1 是 i = i+1 否 结束 删除第i个元素 A[i]是当前元素 N是表长,可变 流程: * void DeleteAll(A, N, b) { /* A是存储线性表的数组,N为表长,b是待删除的元素*/ for (i = 1, i=N, i++) if (A[i] == b) { for (j = i+1,i= N, j++) A[j-1] = A[j]; /*删除*/ N = N -1; /*修改表长*/ } } //算法结束// 算法1 这种方式有无问题? * # include stdio.h int DeleteAll(int A[], int n, int b) { int i,j; for(i=0; in; i++) if (A[i]==b) { for (j=i; jn; j++) A[i]=A[i+1]; n=n-1; } return(n); } void main() { int A[]={23,20,35,20,20,35,75,12,20,20,80,100}; int n=12, b=20,i; for (i=0; in; i++) printf(%4d,A[i]); printf(\n); n = DeleteAll(A, n, b); for (i=0; in; i++) printf(%4d,A[i]); printf(\n); } 删除连续多个相同元素,将有遗漏 # include stdio.h int DeleteAll(int A[], int n, int b) { int i,j; for(i=0; in; i++) if (A[i]==b) { for (j=i; jn-1; j++) A[j]=A[j+1]; n=n-1; } return(n); } 连续多个相同元素,删除第一个后 i++ 操作将跳过后面的一个b * void DeleteAll(A, N, b) { // A存储线性表的数组,N表长,b删除元素*/ i = 1; while (i=N) { // 小于表长 // if (A[i] == b) { for (j = i+1, j=N, j++) A[j-1] = A[j]; //删除// N = N -1; //修改表长// } else i++; } //循环结束// } //算法结束// 算法时间复杂度为 O(n2),有无可提高的? * # include stdio.h int DeleteAll(int A[], int n, int b) { int i=0, j; while (in ) if (A[i]==b) { for (j=i; jn; j++) A[i]=A[i+1]; n=n-1; } else i++; return(n); } void main() { int A[]={23,2

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档