算法题目和答案.docx

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

1. 根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。要求新生成的链表中不允许有重复元素。 算法如下 ListNode * Merge ( ListNode * L1, ListNode * L2 ) {//根据两个带表头结点的有序单链表L1和L2, 生成一个新的有序单链表 ListNode *first = new ListNode; ListNode *p1 = L1-link, *p2 = L2-link, *p = first, *q; while ( p1 != NULL p2 != NULL ) { q = new ListNode; if ( p1-data == p2-data ) { q-data = p1-data; p2 = p2-link; p1 = p1-link; } else if ( p1-data p2-data ) { q-data = p1-data; p1 = p1-link; } else { q-data = p2-data; p2 = p2-link; } p-link = q; p = q; } while ( p1 != NULL ) { q = new ListNode; q-data = p1-data; p1 = p1-link; p-link = q; p = q; } while ( p2 != NULL ) { q = new ListNode; q-data = p2-data; p2 = p2-link; p-link = q; p = q; } p-link = NULL; return first; } 2. 设有一个线性表 (e0, e1, …, en-2, en-1) 存放在一个一维数组A[arraysize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为 (en-1, en-2, …, e1, e0)。 数组原地逆置算法 参数表中给出数组A[ ] 及指定的数组中前n个元素,函数执行后从A[ ] 中得到数组原地逆置后的结果。 Templateclass T void inverse ( T A[ ], int n ) { T tmp; for ( int I = 0; I = ( n-1 ) / 2; I++ ) { tmp = A[I]; A[I] = A[n-I-1]; A[n-I-1] = tmp;} } 3. 设有两个整数类型的顺序表A(有 m个元素)和B(有n个元素),其元素均以从小到大的升序排列。试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C的元素也以从小到大的升序排列。 合并两个升序排列的顺序表的算法 参数表给出参加运算的三个顺序表A、B与C。从C中得到执行结果。 算法中用到顺序表的4个共有函数:Length( ) 求表的当前长度;maxLength( ) 求表的最大允许长度;getData(k) 提取第k个元素的值;setData(k) 修改第k个元素的值。 Template class T void merge ( SeqListint A, SeqListint B, SeqListint C ) { int m = A.Length( ), n = B.Length( ), mpn = m + n; if ( mpn C.maxLength( ) ) { cerr “合并后表的长度超出表的最大允许长度” endl; exit (1); } int I = 0, j = 0, k = 0, av = A.getData(I), bv = B.getData(j); while ( I m j n ) if ( av = bv ) { C.setData(k++, av); av = A.getData(++I); } else { C.setData(k++, bv); B.getData(++j); } if ( I m ) while ( k mpn ) { C.setData(k++, av); av = A.getData(++I); } else while ( k mpn ) { C.setData(k++, bv); B.getData(++j); } } 4. 已知一个带表头结点的单链表中包含有三类字符(数字字符、字母字符和其他字符),试编写一个函数,构造三个新的单链表,使每个单链表中只包含同一类字符。要求使用原表的空间,表头结点可以另辟空间。 算法如下

文档评论(0)

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

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

1亿VIP精品文档

相关文档