数据结构 串和数组 练习试题
数据结构题目及答案

数据结构题目及答案一、数组题目及答案题目一:给定一个整数数组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语言中,有许多经典的数据结构题目,通过解答这些题目,可以深入理解数据结构的原理和应用。
本文将介绍一些经典的数据结构题目,同时附上详细的答案。
一、数组题目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.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“software”,其子串的个数是()。
A.8 B.37 C.36 D.9二、填空题1.含零个字符的串称为______串。
任何串中所含______的个数称为该串的长度。
2.空格串是指__ __,其长度等于__ __。
3.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。
一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。
5.模式串P=‘abaabcac’的next函数值序列为________。
6.下列程序判断字符串s 是否对称,对称则返回1,否则返回0;如 f("abba")返回1,f("abab")返回0;int f((1)__ ______){int i=0,j=0;while (s[j])(2)___ _____;for(j--; i<j && s[i]==s[j]; i++,j--);return((3)___ ____)}7.下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。
void maxcomstr(orderstring *s,*t; int index, length){int i,j,k,length1,con;index=0;length=0;i=1;while (i<=s.len){j=1;while(j<=t.len){ if (s[i]= =t[j]){ k=1;length1=1;con=1;while(con)if (1) _ { length1=length1+1;k=k+1; }else (2) __;if (length1>length) { index=i; length=length1; }(3)__ __;}else (4) ___;}(5) __} }三、应用题1.描述以下概念的区别:空格串与空串。
数据结构串和数组的习题答案

补充习题:
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. 三元组和十字链表 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. 一个数组元素a[i]与________的表示等价。
A、 *(a+i)B、 a+iC、 *a+iD、 &a+i2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。
A、参数类型B、参数个数C、函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数A、指针B、引用C、值4. 下面程序段的时间复杂度为____________。
for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A、 O(m2)B、 O(n2)C、 O(m*n)D、 O(m+n)5. 执行下面程序段时,执行S语句的次数为____________。
for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)S;A、 n2B、 n2/2C、 n(n+1)D、 n(n+1)/26. 下面算法的时间复杂度为____________。
int f( unsigned int n ) {if ( n==0 || n==1 ) return 1; else return n*f(n-1);}A、 O(1)B、 O(n)C、 O(n2)D、 O(n!)二、填空题1. 数据的逻辑结构被分为__________、_________、__________和__________四种。
2. 数据的存储结构被分为__________、_________、__________和__________四种。
3. 在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着________、________和________的联系。
4. 一种抽象数据类型包括__________和__________两个部分。
5. 当一个形参类型的长度较大时,应最好说明为_________,以节省参数值的传输时间和存储参数的空间。
数据结构历年真题及解析题

数据结构历年真题及解析题一、选择题1. 下列关于数组的描述,正确的是()。
A. 数组在内存中是连续存放的。
B. 数组一经定义,其长度不可改变。
C. 数组的每个元素可以是不同的数据类型。
D. 数组可以通过下标随机访问元素。
答案:A、B、D2. 链表相比于数组的优势在于()。
A. 内存使用更高效。
B. 插入和删除操作更加方便。
C. 可以通过下标随机访问元素。
D. 存储空间可以动态分配。
答案:B、D3. 栈(Stack)的特点是()。
A. 先进先出(FIFO)。
B. 后进先出(LIFO)。
C. 只能在一端进行插入和删除。
D. 可以通过索引随机访问元素。
答案:B、C4. 队列(Queue)与栈的主要区别在于数据的()。
A. 存取方式。
B. 存储结构。
C. 操作速度。
D. 内存占用。
答案:A5. 二叉树的前序遍历的顺序是()。
A. 根-左-右。
B. 左-根-右。
C. 右-根-左。
D. 根-右-左。
答案:A6. 快速排序算法的时间复杂度在最坏情况下是()。
A. O(n)B. O(nlogn)C. O(n^2)D. O(n^3)答案:C7. 哈希表的冲突解决方法中,开放定址法的特点是()。
A. 通过增加哈希表的大小来解决冲突。
B. 通过链表来链接具有相同哈希值的元素。
C. 寻找表中下一个空闲位置来存储冲突元素。
D. 重新计算哈希值,直到找到空闲位置。
答案:C8. 图的遍历算法中,深度优先搜索(DFS)与广度优先搜索(BFS)的主要区别在于()。
A. DFS使用递归,BFS使用队列。
B. DFS使用栈,BFS使用递归。
C. DFS使用队列,BFS使用栈。
D. DFS和BFS都使用链表。
答案:A9. 堆(Heap)结构中,最大堆的性质是()。
A. 父节点的值小于子节点。
B. 父节点的值大于子节点。
C. 父节点的值等于子节点。
D. 没有固定的大小关系。
答案:B10. 动态规划算法通常用于解决()类型的问题。
A. 排序。
数据结构复习题带答案

第一趟:从第一个字符开始比较,失配时i=3,j=3
主 串
a
a
d
a
a
d
a
a
a
d
a
a
c
aaadaac
复习题
第二趟:next[3]=2,从模式串的第2个字符开始比较,失配时i=3,j=2
主 串
a
a
d
a
a
d
a
a
a
d
a
a
c
aaadaac
第三趟:next[2]=1,从模式串的第1个字符开始比较,失配时i=3,j=1
3、对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求 从顶点A到其他各顶点的最短路径和路径长度。
复习题
3、解:初始状态如下
顶点
A
B
C
D
E
Final
true
false
false
false
false
disk
0
10
18
∞
∞
path
-1
A
A
-1
-1
复习题
第一轮遍历后状态如下
顶点
A
B
C
D
E
Final
④ 快速排序和堆排序都不是稳定排序
复习题
5、将关键字序列(7、18、20、5、28、19、24、33)散列存 储到散列表中,散列表的存储空间是一个下标从0开始的一维 数组,散列函数为:H(key)=(key×3)MOD 7,处理冲突采 用线性探测再散列法,要求装填(载)因子为0.8: (1) 请画出所构造的散列表 (2) 分别计算等概率情况下查找成功和查找不成功的平均查找长 度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4~5章串和数组自测卷姓名班级
一、填空题(每空1分,共20分)
1. 称为空串;称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= , “/”的字符定位的位置为。
4. 子串的定位运算称为串的模式匹配;称为目标串,称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第次匹配成功。
6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为。
7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为;末尾元素A57的第一个字节地址为;若按行存储时,元素A14的第一个字节地址为;若按列存储时,元素A47的第一个字节地址为。
8. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为。
9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的、和。
10.求下列广义表操作的结果:
(1)GetHead【((a,b),(c,d))】=== ;
(2)GetHead【GetTail【((a,b),(c,d))】】=== ;
(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;
(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;
二、单选题(每小题1分,共15分)
()1. 串是一种特殊的线性表,其特殊性体现在:
A.可以顺序存储B.数据元素是一个字符
C.可以链式存储D.数据元素可以是多个字符
()2. 设有两个串p和q,求q在p中首次出现的位置的运算称作:
A.连接B.模式匹配C.求子串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
( )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 均不对
( ) 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+j
6. 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组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 答案:A =
B =
C =
D = E=
7. 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组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 答案:A =
B =
C =
D = E=
三、简答题(每小题5分,共15分)
1. 已知二维数组Am,m 采用按行优先顺序存放,每个元素占K 个存储单元,并且第一个元素的存储地址为Loc(a11),请写出求Loc(aij)的计算公式。
如果采用列优先顺序存放呢?
2. 递归算法比非递归算法花费更多的时间,对吗?为什么?
⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=n n n n a a a a a a A ,2,1,2,21,21,1
四、计算题(每题5分,共20分)
1. 【严题集4.3①】设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,
求Replace(s,’STUDENT’,q) 和Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))。
2. 用三元组表表示下列稀疏矩阵:
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2000000000000005000000000006000000000000030008000000000000000000)1( ⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡-000003000000000500000000000009200000)2(
3. 下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡16166354443131212221646)1( ⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡734653823942111554)2(
五、算法设计题(每题10分,共30分)
1. 【严题集4.12③】 编写一个实现串的置换操作Replace(&S, T, V)的算法。
2.【严题集5.18⑤】试设计一个算法,将数组An 中的元素A[0]至A[n-1]循环右移k位,并要求只用一
个元素大小的附加存储,元素移动或交换次数为O(n)
附加题:利用C的库函数strlen, strcpy(或strncpy)写一个算法void StrDelete(char *S,int t,int m) ,删除串S中从位置i开始的连续的m个字符。
若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均被删去。
提示:strlen是求串长(length)函数:int strlen(char s); //求串的长度
strcpy是串复制(copy)函数:char *strcpy(char to,char from); //该函数将串from复制到串to中,并且返回一个指向串to的开始处的指针。