数据结构数组和串自测题答案

合集下载

数据结构试卷及答案

数据结构试卷及答案

期末考试《数据结构》A 卷一、单项选择题(请将正确答案的字母填写在每 题对应的括号内,每小题1分,共20分)1、下面关于串的叙述中,哪一个是不正确的?()A .串是字符的有限序列B .空串是由空格构成的串C .模式匹配是串的一种重要运算D .串既可以采用顺序存储,也可以采用链式存储 2、设无向图的顶点个数为n ,则该图最多有()条边。

A . n-1B . n(n-1)/2C . n(n+1)/2D . 0 3、以下数据结构中,()是非线性数据结构。

A .树B .字符串C .队列D .栈4、下面关于线性表的叙述中,错误的是哪一个?()A .线性表采用顺序存储,必须占用一片连续的存储单元。

B .线性表采用顺序存储,便于进行插入和删除操作。

C .线性表采用链接存储,不必占用一片连续的存储单元。

D .线性表采用链接存储,便于插入和删除操作。

5、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front 和rear ,则当前队列中的元素个数为()。

A . (rear-front+m)%mB . rear-front+1C . (front-rear+m)%mD . (rear-front)%m6、在单链表指针为p 的结点之后插入指针为s 的结点,正确的操作是()。

A . p->next=s; s->next=p->next;B . s->next=p->next; p->next=s;C . p->next=s; p->next=s->next;D . p->next=s->next; p->next=s; 7、设栈的输入序列是1, 2, 3, 4,则()不可能是其出栈序列。

A .1,2,4,3 B .2,1,3,4C .1,4,3,2D .4,3,1,2,8、广义表(a,(b,c),d,e )的表头和表尾分别为()。

A . a 和(b,c),d,eB . (a )和(b,c),d,eC . a 和((b,c), d,e)D . (a) 和((b,c), d,e)得分评卷人二、判断题,在正确的题后括号内打“J”,在错误的题后括号内打“X”(每小题1分,共10分)1、算法是由若干条指令组成的有穷序列,而一个程序不一定满足有穷性。

数据结构自测题及答案

数据结构自测题及答案

数据结构自测题及答案**数据结构自测题及答案**一、选择题(每题2分,共10分)1. 数据结构是一种用于组织和管理数据的方式,它主要关注的是:A. 数据的存储和表示方式B. 数据的输入和输出方式C. 算法和数据的交互方式D. 数据处理的速度和效率2. 在数据结构中,数组是一种:A. 线性结构B. 树形结构C. 图形结构D. 集合结构3. 下列哪种数据结构是先进先出(FIFO)的:A. 栈B. 队列C. 链表D. 哈希表4. 在二叉树中,每个节点最多有几个子节点:A. 0B. 1C. 2D. 35. 下列哪种数据结构适合用于实现图的存储:A. 数组B. 链表C. 堆D. 散列表二、填空题(每题2分,共10分)1. 在栈中,最后一个进入栈的元素最先出栈,这种特点叫做**后进先出**。

2. 哈希表一般是通过**散列函数**将键映射到存储位置上。

3. 图中节点之间的关系可以用**边**来表示。

4. 在二叉搜索树中,左子树的值都小于根节点的值,右子树的值都大于根节点的值,这种特点叫做**二叉搜索树的性质**。

5. 在链表中,每个节点都包含一个指向下一个节点的**指针**。

三、判断题(每题2分,共10分)1. 队列是一种先进先出(FIFO)的数据结构。

(正确)2. 图是一种非线性的数据结构。

(正确)3. 二叉树是一种树形数据结构,每个节点最多有两个子节点。

(正确)4. 栈可以用数组和链表两种方式实现。

(正确)5. 哈希表的插入和查询操作的时间复杂度都为O(1)。

(错误)四、程序设计题(总分20分)请编写一个程序,实现以下功能:1. 定义一个结构体,用于表示学生信息,包含姓名、年龄和成绩三个字段。

2. 动态创建一个长度为5的数组,用于存储学生信息。

3. 通过键盘输入,依次为每个学生的姓名、年龄和成绩赋值,并存储到数组中。

4. 分别计算学生的平均年龄和平均成绩,并输出结果。

代码示例(C语言):```c#include<stdio.h>#include<stdlib.h>struct Student {char name[20];int age;float score;};int main() {struct Student* students = (struct Student*)malloc(5 * sizeof(struct Student));for (int i = 0; i < 5; i++) {printf("请输入第 %d 个学生的姓名:", i + 1);scanf("%s", students[i].name);printf("请输入第 %d 个学生的年龄:", i + 1);scanf("%d", &students[i].age);printf("请输入第 %d 个学生的成绩:", i + 1);scanf("%f", &students[i].score);printf("\n");}int totalAge = 0;float totalScore = 0.0;for (int i = 0; i < 5; i++) {totalAge += students[i].age;totalScore += students[i].score;}float avgAge = totalAge / 5.0;float avgScore = totalScore / 5.0;printf("平均年龄: %.2f\n", avgAge);printf("平均成绩: %.2f\n", avgScore);free(students);return 0;}```以上就是自测题及答案的全部内容。

数据结构题目及答案

数据结构题目及答案

数据结构题目及答案一、数组题目及答案题目一:给定一个整数数组nums和一个目标值target,请你在数组中找出和为目标值的两个整数,并返回它们的索引。

题目描述:给定一个整数数组nums,以及一个目标值target,请找出数组中两个数字的和等于目标值target,并返回它们的索引。

示例输入:nums = [2, 7, 11, 15], target = 9示例输出:[0, 1]解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回[0, 1]。

解题思路:1. 使用哈希表存储已经遍历过的数字及其索引;2. 遍历数组,对于每个元素,计算该元素与目标值的差值;3. 如果差值存在于哈希表中,则返回对应的索引;4. 如果不存在,则将当前元素加入哈希表中。

代码实现:```pythondef twoSum(nums, target):hashmap = {}for i, num in enumerate(nums):complement = target - numif complement in hashmap:return [hashmap[complement], i]hashmap[num] = ireturn []# 测试样例nums = [2, 7, 11, 15]target = 9print(twoSum(nums, target))```二、链表题目及答案题目二:给定一个链表,删除链表的倒数第N个节点,并返回链表的头节点。

题目描述:给定一个链表,删除链表的倒数第N个节点,并返回链表的头节点。

示例输入:1->2->3->4->5, N = 2示例输出:1->2->3->5解释:删除倒数第二个节点(4),得到链表1->2->3->5。

解题思路:1. 使用双指针技巧,使用两个指针pre和cur,其中cur指针先向前移动N个节点;2. 使用dummy节点作为头节点的前一个节点,以应对删除头节点的情况;3. cur指针到达链表的尾部时,pre指针的下一个节点即为要删除的节点;4. 删除节点后,返回dummy节点的下一个节点即为新链表的头节点。

数据结构(C语言)【经典题库】含答案

数据结构(C语言)【经典题库】含答案

数据结构(C语言)【经典题库】含答案数据结构(C语言)【经典题库】含答案数据结构是计算机科学中的重要基础,对于程序员和软件工程师来说,熟练掌握数据结构是必不可少的。

在C语言中,有许多经典的数据结构题目,通过解答这些题目,可以深入理解数据结构的原理和应用。

本文将介绍一些经典的数据结构题目,同时附上详细的答案。

一、数组题目1. 给定一个整型数组arr和一个整数target,找出数组中两个数的和为target的所有组合。

```C#include <stdio.h>void findPairs(int arr[], int n, int target) {int i, j;for (i = 0; i < n - 1; i++) {for (j = i + 1; j < n; j++) {if (arr[i] + arr[j] == target) {printf("%d, %d\n", arr[i], arr[j]);}}}}int main() {int arr[] = {2, 4, 6, 8, 10};int target = 14;int n = sizeof(arr) / sizeof(arr[0]);findPairs(arr, n, target);return 0;}```答案解析:使用两层循环遍历数组中的每对元素,判断它们的和是否等于目标值target,如果是则输出。

时间复杂度为O(n^2)。

2. 给定一个整型数组arr和一个整数k,求出数组中连续子数组的最大和。

```C#include <stdio.h>int maxSubArraySum(int arr[], int n) {int maxSum = arr[0];int currentSum = arr[0];for (int i = 1; i < n; i++) {currentSum = (currentSum + arr[i] > arr[i]) ? currentSum + arr[i] : arr[i];if (currentSum > maxSum) {maxSum = currentSum;}}return maxSum;}int main() {int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};int n = sizeof(arr) / sizeof(arr[0]);int maxSum = maxSubArraySum(arr, n);printf("最大和为:%d\n", maxSum);return 0;}```答案解析:使用动态规划的思想,定义两个变量`maxSum`和`currentSum`,分别表示当前的最大和和累加和。

数据结构习题(包含全部答案解析)

数据结构习题(包含全部答案解析)

数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。

A.结构B.关系 C.运算 D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。

A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。

A.找出算法的合理性 B.研究算法的输人与输出关系C.分析算法的有效性以求改进 D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态 C. A和B6.一个算法应该是()。

A.程序B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。

A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;nA. 2n B.n C.n2 D.log210.以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈11. 下列数据中,()是线性数据结构。

A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。

A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。

(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结点、顶点、记录等。

数据结构串和数组的习题答案

数据结构串和数组的习题答案
Βιβλιοθήκη 12.D 13.A 14.B
补充习题:
15.两维数组是一种非线性结构。( A)正确 B)不正确 )
16.数组A三维的长度分别为b3,b2,b1;每个数组元素占一个 存储单元;LOC[0,0,0]为基址。若以行序为主序,则元素 A[i][j][k]的地址为( )(其中0<=i<b3,0<=j<b2,0<=k<b1) A)LOC[0,0,0]+i*b2*b1+j*b1+k
B)任意个字母的序列 D)有限个字符的序列
C)串中所含字符的个数,且大于0
D)串中所含字符的个数
1.C 2.D 3.D
补充习题:
4.设有两个串p和q,求q在p中首次出现的位置的运算( A)连接 C)求子串 B)模式匹配 D)求串长 )存储方式最为节 ).
5.若某串的长度小于一个常数,则采用( 省空间。 A)链式 A)正确 A)正确 B)堆结构 B)不正确 C)顺序
(3,1,5),(3,2,-1),(4,5,4),(5,1,-3),则其转置矩阵的三元 组表中第3个三元组为( )。
A) (2,1,3)
C) (3,2,-1)
B) (3,1,5)
D) (2,3,-1)
14.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素 的行下标和列下标互换,就完成了对该矩阵的转置运算,这 种观点( ) A)正确 B)不正确
A)表达变得简单 B)减少不必要的存储空间的开销 C)去掉矩阵中的多余元素 D)对矩阵元素的存取变得简单
8.B 9.D 10.B 11.B
补充习题:
12.三元组表不包括( A) 行数 B) 列数 )。 C) 元素值 D) 元素总数
13.设已知一个稀疏矩阵的三元组如下:(1,2,3),(1,6,1),

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案数据结构(C语言版)习题参考答案1. 数据结构简介数据结构是计算机科学中重要的概念之一,它关注如何组织和存储数据,以便有效地进行访问和操作。

C语言是一种广泛应用于数据结构实现的编程语言。

本文将提供一些常见数据结构习题的参考答案,帮助读者理解和掌握数据结构的基本概念与实现。

2. 数组数组是一种线性结构,存储具有相同数据类型的元素。

以下是一些数组习题的参考答案:2.1 统计数组中某个元素出现的次数```int countOccurrences(int arr[], int n, int x) {int count = 0;for (int i = 0; i < n; i++) {if (arr[i] == x) {count++;}}return count;}```2.2 查找数组中的最大值和最小值```void findMinMax(int arr[], int n, int* min, int* max) { *min = arr[0];*max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < *min) {*min = arr[i];}if (arr[i] > *max) {*max = arr[i];}}}```3. 链表链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。

以下是一些链表习题的参考答案:3.1 反转链表```Node* reverseLinkedList(Node* head) {Node* prev = NULL;Node* curr = head;while (curr != NULL) {Node* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}```3.2 合并两个有序链表```Node* mergeLists(Node* list1, Node* list2) {if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}if (list1->data < list2->data) {list1->next = mergeLists(list1->next, list2);return list1;} else {list2->next = mergeLists(list1, list2->next);return list2;}}```4. 栈和队列栈和队列是两种重要的线性数据结构,栈支持后进先出(LIFO),队列支持先进先出(FIFO)。

数据结构串和数组习题

数据结构串和数组习题

C. 三元组和十字链表 D. 散列表和十字链表
4、一个非空广义表的表头(
)。
A. 不可能是子表
B. 只能是子表
C. 只能是原子
D. 可以是子表或原子
5、数组A[0..5,0..6]的每个元素占5个字节,将其按列优先次序存储在起始地址为1000
的内存单元中,则元素A[5][5]的地址是( )。
A. 1175
int i; for(i=0;i<s1->length&&i<s1->length;i++)
if(s->data[i]!=s2->data[i]) return s1->data[i]-s2->data[i];
return s1->length-s2->length; }
4、写出算法的功能。 int fun(sqstring *s,sqstring *t,int start){
A. 顺序的存储结构
B. 链式存储结构
C. 数 据 元 素 是
一个字符
D. 数据元素任意
4、设串长为 n,模式串长为 m,则 KMP 算法所需的附加空间为( )。
A. O(m)
B. O(n)
C. O(m*n)
D.
O(nlog2m)
5、空串和空格串( )。
A. 相同
B. 不相同
C. 可能相同
D. 无法确定
第四章 串
一、选择题
1、设有两个串S1和S2,求串S2在S1中首次出现位置的运算称作( )。
A. 连接
B. 求子串
C. 模式匹配 D. 判断子串
2、已知串S=’aaab’,则next数组值为( )。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串和数组自测卷答案姓名班级一、填空题(每空1分,共20分)1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。

(对应严题集4.1①,简答题:简述空串和空格串的区别)2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。

4. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。

5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。

6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。

7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。

(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)8. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。

答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89509. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。

二、单选题(每小题1分,共15分)( B )1.串是一种特殊的线性表,其特殊性体现在:A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符( B )2.设有两个串p和q,求q在p中首次出现的位置的运算称作:A.连接B.模式匹配C.求子串D.求串长( D )3.设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s 的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF解:con(x,y)返回x 和y 串的连接串,即 con(x,y)=‘ABCDEFGPQRST ’; subs(s, i, j)返回串s 的从序号i 开始的j 个字符组成的子串,则subs(s1, 2, len(s2))=subs(s1, 2, 5)=’ BCDEF’; subs(s1, len(s2), 2)=subs(s1, 5, 2)=’ EF’; 所以con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))=con(’ BCDEF’, ’ EF’)之连接,即BCDEFEF( A )4.假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。

(无第0行第0列元素)A.16902 B.16904 C.14454 D.答案A, B, C 均不对答:此题与填空题第8小题相似。

(57列×60行+31行)×2字节+10000=16902( B )5. 设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是:A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j6. 【91初程P78】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。

有一个二维数组A ,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。

存储器按字节编址。

假设存储数组元素A[0,1]的第一个字节的地址是0。

存储数组A 的最后一个元素的第一个字节的地址是 A 。

若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B 和 C 。

若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D 和 E 。

供选择的答案:A ~E :①28 ② 44 ③ 76 ④ 92 ⑤ 108 ⑥ 116 ⑦ 132 ⑧ 176 ⑨ 184 ⑩ 188 答案:ABCDE=8, 3, 5, 1, 67.【94程P12】 有一个二维数组A ,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。

那么,这个数组的体积是 A 个字节。

假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A 的最后一个元素的第一个字节的地址是 B 。

若按行存储,则A[2,4]的第一个字节的地址是 C 。

若按列存储,则A[5,7]的第一个字节的地址是 D 。

供选择的答案A ~D :①12 ② 66 ③ 72 ④ 96 ⑤ 114 ⑥ 120⑦ 156 ⑧ 234 ⑨ 276 ⑩ 282 (11)283 (12)288 答案:ABCD=12, 10, 3, 9三、简答题(每小题5分,共15分)1. 已知二维数组Am,m 采用按行优先顺序存放,每个元素占K 个存储单元,并且第一个元素的存储地址为Loc(a11),请写出求Loc(aij)的计算公式。

如果采用列优先顺序存放呢? 解:公式教材已给出,此处虽是方阵,但行列公式仍不相同;按行存储的元素地址公式是: Loc(aij)= Loc(a11) +[ (i-1)*m+(j-1) ] * K 按列存储的元素地址公式是: Loc(aij)= Loc(a11) +[ (j-1)*m+(i-1) ] * K⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=n n n n a a a a a a A ,2,1,2,21,21,13.【全国专升本资格考试】递归算法比非递归算法花费更多的时间,对吗?为什么?答:不一定。

时间复杂度与样本个数n 有关,是指最深层的执行语句耗费时间,而递归算法与非递归算法在最深层的语句执行上是没有区别的,循环的次数也没有太大差异。

仅仅是确定循环是否继续的方式不同,递归用栈隐含循环次数,非递归用循环变量来显示循环次数而已。

四、计算题(每题5分,共20分)1. 设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’, 求Replace(s,’STUDENT’,q) 和 Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))。

解:① Replace(s,’STUDENT’,q)=’I AM A WORKER’ ② 因为 SubString(s,6,2)=‘A ’;SubString(s,7,8)=‘ STUDENT ’ Concat(t,SubString(s,7,8))=’GOOD STUDENT’所以Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT ’2.用三元组表表示下列稀疏矩阵:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2000000000000005000000000006000000000000030008000000000000000000)1( ⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡-000003000000000500000000000009200000)2( 解:参见填空题4. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。

所以(1)可列表为: (2)可列表为:4. (P60 4-19)下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡16166354443131212221646)1( ⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡734653823942111554)2(解:(1)为6×4矩阵,非零元素有6个。

(2)为4×5矩阵,非零元素有5个五、算法设计题(每题10分,共30分)1. 编写一个实现串的置换操作Replace(&S, T , V)的算法。

解:int Replace(Stringtype &S,Stringtype T ,Stringtype V);//将串S 中所有子串T 替换为 V ,并返回置换次数 {for(n=0,i=1;i<=Strlen(S)-Strlen(T)+1;i++) //注意i 的取值范围if(!StrCompare(SubString(S,i,Strlen(T)),T)) //找到了与T 匹配的子串 { //分别把T 的前面和后面部分保存为head 和tailStrAssign(head,SubString(S,1,i-1));StrAssign(tail,SubString(S,i+Strlen(T),Strlen(S)-i-Strlen(T)+1)); StrAssign(S,Concat(head,V));StrAssign(S,Concat(S,tail)); //把head,V ,tail 连接为新串 i+=Strlen(V); //当前指针跳到插入串以后 n++; n++; }//if return n;}//Replace分析:i+=Strlen(V);这一句是必需的,也是容易忽略的.如省掉这一句,则在某些情况下, 会引起不希望的后果,虽然在大多数情况下没有影响.请思考:设S='place', T='ace', V='face',则省掉i+=Strlen(V);运行时会出现什么结果?2. 【全国专升本资格考试】写出将字符串反序的递归或递推算法,例如字符串为“abcsxw ”,反序为“wxscba ”(注:这也是严题集4.10③ 编写对串求逆的递推算法)请注意递归和递推的区别!递推是由“小”到“大”递进; 递归是由“大”到“小”嵌套。

相关文档
最新文档