数据结构串和数组练习题

news2025/7/10 4:59:49

串和数组

一 填空题

  1. 不包含任何字符(长度为0)的串称为 空串 ;由一个或多个空格(仅由空格符)组成的串称为 空白串

  2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为 3

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

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

  5. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 1000+[8*5+7]6 ;若按行存储时,元素A14的第一个字节地址为 [8(1-0)+(4-0)]×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为 [6×(7-0)+(4-0)]×6+1000)=1276

(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)

  1. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950
  • 不考虑0行0列,利用列优先公式: LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L
    • 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950
  1. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标列下标元素值

8…求下列广义表操作的结果:
(1)GetHead【((a,b),(c,d))】== (a, b) ; //头元素不必加括号

(2)GetHead【GetTail【((a,b),(c,d))】】== (c,d) ;
GetTail【((a,b),(c,d))】=((c,d))
GetHead【GetTail【((a,b),(c,d))】】=GetHead【((c,d))】=(c,d)

(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】== b ;
GetHead【((a,b),(c,d))】=(a,b)
GetTail【GetHead【((a,b),(c,d))】】=(b)
GetHead【GetTail【GetHead【((a,b),(c,d))】】】=b

(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】== (d) ;
GetTail【((a,b),(c,d))】=((c,d))
GetHead【GetTail【((a,b),(c,d))】】=(c,d)
GetTail【GetHead【GetTail【((a,b),(c,d))】】】=d

二 单选题

  1. 串是一种特殊的线性表,其特殊性体现在:( B )
    A.可以顺序存储 B.数据元素是一个字符
    C.可以链式存储 D.数据元素可以是多个字符
  • 解析:s为串名,用双引号括起来的字符序列为串值(引号本身不属于串的内容),ai(1<=i<=n)是一个任意字符,也称为串的元素(即数据元素),是构成串的基本单位,i是它在整个串中的序号,n为串的长度,表示串中所包含的字符个数。
  • 串的数据元素,也就是串的基本单位在这里是一个字符,而非多个字符。
  • 多个字符的话,那就不叫数据元素,而叫做串的子串了,子串又是由多个数据元素组成的有限序列。
  1. 设有两个串p和q,求q在p中首次出现的位置的运算称作:( B )
    A.连接 B.模式匹配 C.求子串 D.求串长

  2. 设串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))的结果串是:( D )
    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
  1. 假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 ( A ) 。(无第0行第0列元素)
    A.16902 B.16904 C.14454 D.答案A, B, C均不对
  • 解析:(57列×60行+31行)×2字节+10000=16902
  1. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:( B )
    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
  • 解析:注意数组下标从1开始。 下三角中的元素aij前面有i-1行,共有i*(i-1)/2个元素,aij是它所在行中的第j个,所以选择k=i(i-1)/2+j
  1. 有一个二维数组 A ,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数 组元素A[0,1]的第一个字节的地址是0。
  • 存储数组A的最后一个元素的第一个字节的地址是 A 。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 BC 。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 DE
    供选择的答案:
    A~E:①28 ② 44 ③ 76 ④ 92 ⑤ 108 ⑥ 116 ⑦ 132 ⑧ 176 ⑨ 184 ⑩ 188
    A,B,C,D,E=8, 3, 5, 1, 6
  1. 有一个二维数组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

三 计算题

  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’
  1. (P60 4-18)用三元组表表示下列稀疏矩阵:
    在这里插入图片描述
    在这里插入图片描述
  2. (P60 4-19)下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
    解:(1)为6×4矩阵,非零元素有6个。   (2)为4×5矩阵,非零元素有5个
    在这里插入图片描述

四 算法设计题

  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和tail 
      StrAssign(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);运行时会出现什么结果?
  1. 写出将字符串反序的递归或递推算法,例如字符串为“abcsxw”,反序为“wxscba”(注:这也是严题集4.10③ 编写对串求逆的递推算法)
  • 请注意递归和递推的区别!递推是由“小”到“大”递进; 递归是由“大”到“小”嵌套。
    算法思路:
    ① 假定用单链表结构存储字符串;if没有到尾部字符就不停调用自身函数,直至到达末尾,再从尾部返回并打印字符;否则就打印当前字符并返回。
Invert(stringlistnode *p){
	if(!p)return(0);
	else Invert(p->next);
	printf(%c”, p->data)
}
//如果当前串长为0,则return(-1)否则开始递归:
if  //串没有到末尾,则P=P->next; 再调用invert(s);
else printf(p->data);
return
```
严题集4.10③答案:
```cpp
void String_Reverse(Stringtype s,Stringtype &r)//求s的逆串r 
{ 
  StrAssign(r,''); //初始化r为空串 
  for(i=Strlen(s);i;i--) 
  { 
    StrAssign(c,SubString(s,i,1)); 
    StrAssign(r,Concat(r,c)); //把s的字符从后往前添加到r中  这是递推算法。
  } 
}//String_Reverse
```


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows内核--CreateProcess到内核NtCreateProcess(2.3)

CreateProcessA vs CreateProcessW A和W后缀代表ANSI和UNICODE版本。早期&#xff0c;Windows为了兼容之前ANSI版本&#xff0c;为了推广UNICODE版本&#xff0c;所以做出了两套API. 注意&#xff0c;并不是所有Windows API都有*A和*W两套&#xff0c;只有API参数包含"字符…

[附源码]java毕业设计社区生鲜电商平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

linux文件上传和下载、别名设置以及环境变量

一、文件上传和下载 1.sftp &#xff08;1&#xff09;它类似于ftp传输协议&#xff0c;属于ssh&#xff0c;但它进行加密传输&#xff0c;相对FTP来讲有更高的安全性 &#xff08;2&#xff09;用法 [rootserver ~]# ssh root10.0.0.3 The authenticity of host 10.0.0.3 …

虚基类设计 c++

一个例子 首先大家看一个定义的一个虚基类 所谓的虚基类&#xff0c;是指类内包含virtual关键字定义的成员函数 class Abstract_base { public:virtual ~Abstract_base();virtual void interface() const 0;virtual const char* mumble() const {return m_mumble;} protect:ch…

Echarts:制作词云

Echarts是一个开源的可视化图表库&#xff0c;支持丰富的图表&#xff0c;官网中还有大量示例可以选择使用、参考。 其中比较好玩、有趣的是词云&#xff0c;词云就是用关键词组成的一朵云&#xff0c;更广泛的定义是&#xff0c;由关键词组成的任意一种图案均称为词云。因此&…

opencv 空域变换

图像变换是基于像素的映射&#xff0c;区别是像素是怎么映射的。灰度变换的话是通过点对点的映射&#xff0c;也就是变换后的像素点之和当前的像素点有关&#xff08;gramma变换、对数变换等等&#xff09;&#xff0c;依次来进行对比度拉伸。而空间滤波变换后的像素点是和当前…

LeetCode - 354 俄罗斯套娃信封问题

题目来源 354. 俄罗斯套娃信封问题 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个…

GreenPlum6.x之测试数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、generate_series是什么&#xff1f;二、使用步骤1.建张测试表2.插入简单的测试数据3.查看数据分散情况4.通过SQL测试性能总结前言 提示&#xff1a;这里可以…

浅谈一下:Java当中的构造方法

从前面的所学的知识&#xff0c;我们可以发现&#xff1a;实列化一个对象以后&#xff0c;如果要为这个对象的属性赋值&#xff0c;那么必须直接访问对象的属性或者调用setXxx()方法&#xff0c;如果需要在实列化对象的同时就为这个对象的属性进行赋值&#xff0c;可以通过构造…

【考研复试】计算机专业考研复试英语常见问题四(优缺点/观点/观念篇)

相关链接&#xff1a; 【考研复试】计算机专业考研复试英语常见问题一&#xff08;家庭/家乡/学校篇&#xff09;【考研复试】计算机专业考研复试英语常见问题二&#xff08;研究方向/前沿技术/本科毕设篇&#xff09;【考研复试】计算机专业考研复试英语常见问题三&#xff0…

程序员这个身份,比你想象的还值钱!

看到这个标题先别急着喷我&#xff01; 虽然现在“程序员”已经被吐槽饱和了&#xff0c;但目前小厂依旧求贤若渴&#xff0c;大厂一些门槛比较高的算法岗还是抛出了不少HC&#xff01; 并且年年薪水涨&#xff0c;年年新人倒挂&#xff0c;校招白菜总包薪资近40w的不在少数&am…

从入门到项目实战 - vue2 与 vue3 中实现全局事件总线

VUE组件跨通信vue2 与 vue3 中实现全局事件总线上一节&#xff1a;《Vue中的 虚拟 Dom 》| 下一节&#xff1a;《Vue 组件常见的数据访问方式总结 》jcLee95 邮箱 &#xff1a;291148484163.com CSDN 主页&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.300…

【物理应用】基于Matlab模拟极化雷达回波

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

服务器安装Ubuntu20及系统扩容

文章首发及后续更新&#xff1a;https://mwhls.top/4060.html&#xff0c;无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评&#xff0c;非常感谢&#xff01; 参考&#xff1a;Ubuntu20.04安装详细图文教程&#xff08…

C++初阶作业 String类作业详解

作者&#xff1a;小萌新 专栏&#xff1a;C初阶作业 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;会梳理一遍博主做过了String类题目 并且较为详细的讲解出来 _ String类的特性和使用 题目一 考察c_str&#xff08;&#xff09;…

黑塞矩阵理解

文章目录1&#xff1a;一元泰勒展开公式2&#xff1a;二元泰勒展开公式3&#xff1a;二元函数的黑塞矩阵4&#xff1a;多元函数的黑塞矩阵其他链接1&#xff1a;一元泰勒展开公式 举例&#xff1a;f(x) 3x 2x 5 在x0或x1处的泰勒展开 当x0时&#xff1a; 当x1时&#xff…

m基于MATLAB的上行链路MIMO关键技术的研究与性能分析

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 多输入多输出(MIMO)天线技术的巨大潜力为新一代无线通信技术的研究提供了广阔的舞台。近年来&#xff0c;多用户的MIMO研究逐渐成为热点问题。针对多用户的MIMO&#xff0c;天线选择和用…

Allegro如何输出EMN文件操作指导

Allegro如何输出EMN文件操作指导 Allegro支持输出emn文件以供其他结构软件导入以查看实物效果 比如Proe,Soild work等等 下面介绍如何输出EMN文件 选择 File-export-IDF 出现一个对话框 File Name Type选择PTC,并且勾选Use Fillter 点击Fillter, 过滤掉不需要的东西,比…

快速排序、求和、模拟阶乘并利用vscode c++和matlab对程序进行计时

一、软件性能获取 分别使用 Matlab 工具和C语言获得计算下列算法的最大时间&#xff0c;最小时间及平均时间,以及相应的软件功耗&#xff1a; 1.1 一维数组排序 数组选择一万个&#xff0c;使用快速排序。处理器为英特尔i5-7200U&#xff0c;2.5GHz&#xff0c;热设计功耗为…

智慧水务解决方案-最新全套文件

智慧水务解决方案-最新全套文件一、建设背景1、安全水务&#xff0c;监管提效2、清洁水务&#xff0c;防污治污3、节能水务&#xff0c;降本增效4、民生水务&#xff0c;体验先行二、建设思路三、建设方案四、获取 - 智慧水务全套最新解决方案合集一、建设背景 建设智慧水务的…