选择题

1.串是一种特殊的线性表,其特殊性体现在(  )。

A.可以顺序存储               B.数据元素是一个字符

C.可以链式存储               D.数据元素可以是多个字符

答案:B

2.串下面关于串的的叙述中,(  )是不正确的?

A.串是字符的有限序列          B.空串是由空格构成的串

C.模式匹配是串的一种重要运算  D.串既可以采用顺序存储,也可以采用链式存储

答案:B 解释:空格常常是串的字符集合中的一个元素,有一个或多个空格组成的串成为空格串,零个字符的串成为空串,其长度为零。 

3.串“ababaaababaa”的next数组为(  )。

A.012345678999   B.012121111212   C.011234223456    D.0123012322345

答案:C 

4.串的长度是指(  )。

A.串中所含不同字母的个数       B.串中所含字符的个数

C.串中所含不同字符的个数       D.串中所含非空格字符的个数

答案:B 解释:串中字符的数目称为串的长度。

5.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(  )。

A.808            B.818             C.1010             D.1020

答案:B 解释:以行序为主,则LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。

6.二维数组为a[6][10],每个数组元素占用4个存储单元,若按行优先顺序存放的数组元素,a[0][0]的存储地址为860,则a[3][5]的存储地址是______。

A. 1000

B. 860

C. 1140

D. 1200

答案 C 1000  LOC[3,5]=[(3-0)*(9-0+1)+(5-0)]*4+860=1000   切记这里是a[6][10],指得是0-5,0-9

7.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(  )。

A.BA+141        B.BA+180         C.BA+222         D.BA+225

答案:B 解释:以列序为主,则LOC[5,8]=[(8-1)*(8-1+1)+(5-1)]*3+BA=BA+180。 公式题

8.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(  )。

A.13             B.32              C.33               D.40

答案:C  (1+2+3+4+5+6+7+5=33)

9.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i<j)的位置k的关系为(  )。

A.i*(i-1)/2+j      B.j*(j-1)/2+i      C.i*(i+1)/2+j      D.j*(j+1)/2+i

答案:B (因为i<j,i>j则选择A,因为数组下标从1开始,不是从0开始,不用考虑减去1)

10.一个n阶对称矩阵A[1..n,1..n]采用压缩存储方式,将其下三角+主对角部分元素按行优先存储到一维数组B[1..m]中,则A[i][j](i≥j)元素在B中的位置k是______。

A. j(j-1)/2+i

B. j(j-1)/2+i-1

C. i(i-1)/2+j

D. i(i-1)/2+j-1

答案 C. i(i-1)/2+j

11.二维数组A的每个元素是由10个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素(    )的起始地址相同。设每个字符占一个字节。

A.A[8,5]         B.A[3,10]         C. A[5,8]          D.A[0,9]

答案:B 解释:设数组从内存首地址M开始顺序存放,若数组按行先存储,元素A[8,5]的起始地址为:M+[(8-0)*10+(5-1)]*1=M+84;若数组按列先存储,易计算出元素A[3,10]的起始地址为:M+[(10-1)*9+(3-0)]*1=M+84。故选B。

12.一个n阶对称矩阵A[1..10,1..10]采用压缩存储方式,将其下三角+主对角部分元素按行优先存储到一维数组B[0..m]中,则A[8][5]元素在B中的位置k是______。

A. 32

B. 37

C. 45

D. 60

答案A 32  8*(8-1)/2+5-1(下标从0 开始 所以减去1)

13.一个n阶对称矩阵A[1..10,1..10]采用压缩存储方式,将其上三角+主对角部分元素按行优先存储到一维数组B[0..m]中,则A[5][8]元素在B中的位置k是______。

A. 10

B. 37

C. 45

D. 60

答案 B 37  公式直接得

14.设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为(  )。

A.(i-1)*n+j       B.(i-1)*n+j-1      C.i*(j-1)         D.j*m+i-1

答案:A 解释:特殊值法。取i=j=1,易知A[1,1]的的下标为1,四个选项中仅有A选项能确定的值为1,故选A。

设有二维数组floata[5] [4]采用以行为主的存储方式,每个元素的长度为4个字节,起始地址为1000,则数组元素a[3] [3]的内存地址为多少?

15.数组A[0..4,-1..-3,5..7]中含有元素的个数(  )。

A.55            B.45             C.36            D.16

答案:B 解释:共有5*3*3=45个元素。

16.广义表A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A)))))的值为(  )。

A.(g)            B.(d)             C.c            D.d

答案:D 解释:Tail(A)=(b,(c,d),(e,(f,g)));Tail(Tail(A))=( (c,d),(e,(f,g))); Head(Tail(Tail(A)))= (c,d);Tail(Head(Tail(Tail(A))))=(d);Head(Tail(Head(Tail(Tail(A)))))=d。  切记取尾时尾部一定是个表!

17.广义表((a,b,c,d))的表头是(  ),表尾是(  )。

A.a              B.( )             C.(a,b,c,d)      D.(b,c,d)

答案:C、B 解释:表头为非空广义表的第一个元素,可以是一个单原子,也可以是一个子表,((a,b,c,d))的表头为一个子表(a,b,c,d);表尾为除去表头之外,由其余元素构成的表,表为一定是个广义表,((a,b,c,d))的表尾为空表( )。

18.设广义表L=((a,b,c)),则L的长度和深度分别为(  )。

A.1和1          B.1和3          C.1和2          D.2和3

答案:C 解释:广义表的深度是指广义表中展开后所含括号的层数,广义表的长度是指广义表中所含元素的个数。根据定义易知L的长度为1,深度为2。再如(a,((a,b)),(a,b,c)) 长度为3,深度为3(笔记很详细)

19.一个稀疏矩阵采用压缩后,和直接采用二维数组存储相比会失去______ 特性。

A. 顺序存储

B. 随机存取

C. 输入输出

D. 以上都不对

答案 B

20.m行n列的稀疏矩阵采用十字链表表示时,其中循环单链表的个数为______。

A. m+1

B. n+1

C. m+n+1

D. MAX{m,n}+1

21.以下属于数组的基本运算的是( )。

A. 插入元素

B. 删除元素

C. 读指定位置的元素

D. 以上都不是

答案 C. 读指定位置的元素  数组的基本运算只有元素的存和取,前者是更新指定元素的值,后者是读指定元素的值,每个元素由其下标确定位置。

22.设二维数组a[1..5][1..8],若按行优先的顺序存放数组的元素,则a[4][6]元素的前面有( )个元素。

A. 6

B. 28

C. 29

D. 40

答案 C 29 该数组的行、列号从1开始,当按行优先的顺序存储时,a[4][6]元素的前有1~3行,每行8-1+1=8个元素,小计24个元素,在第6行中,a[4][6]元素的前有a[4][1..5]共5个元素,所以a[4][6]元素的前面有24+5=29个元素。

23.设二维数组a[1..5][1..8],若按列优先的顺序存放数组的元素,则a[4][6]元素的前面有( )个元素。

A. 6

B. 28

C. 29

D. 40

答案 B 28 解析 该数组的行、列号从1开始,当按列优先的顺序存储时,a[4][6]元素的前有1~5列,每列5-1+1=5个元素,小计25个元素,在第6列中,a[4][6]元素的前有a[1..3][6]共3个元素,所以a[4][6]元素的前面有25+3=28个元素。

24.在二维数组中,每个数组元素同时处于( )个向量中。

A. 0

B. 1

C. 2

D. n

答案 C 2 解析 在二维数组中,每个数组元素同时处于两个向量,即行向量和列向量中。这里的向量就是一维数组对应的线性表。

25.将一个n×n的对称矩阵A的下三角部分按行存放在一个一维数组B中,
A[0][0]存放在B[0]中,那么第i行的对角元素A[i][i]在B中的存放位置是(  )

A.(i+3)×i/2
B.(i+1)×i/2
C.(2n-i+1)×i/2
D.(2n-i-l)×i/2
答案 A B[0] = A[0][0],i=0,在第0个位置,ABCD均符合 B[2] =  A[1][1] ,i=1,在第2个位置,只有A符合再试一下B[5] = A[2][2],i=2,在第5个位置,也只有A符合,或者[i][i]前面有i行,一共有1+2+....+i个元素,然后第i行第i个,总共是(1+i)i/2 + i + 1,由于下标从B[0]开始,所以还要-1就是(i+3)i/2

26.稀疏矩阵一般的压缩存储方式有两种,即​()。(2)
A. 二维数组和三维数组
B. 三元组和散列
C. 三元组和十字链表
D. 替换为错散列和十字链表误项

答案 C. 三元组和十字链表

27.带行表的三元组表是稀疏矩阵的一种 ()

A.顺序存储结构

B.链式存储结构

C.索引存储结构

D.散列存储结构

答案 A.顺序存储结构

28.广义表与稀疏矩阵都是线性表的扩展,它们的共同点为()。

A. 都可以用链接结构与顺序结构存储
B. 无共同点
C. 都是递归结构
D. 数据元素本身是一个数据结构

答案 D. 数据元素本身是一个数据结构

29.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空,且不同于S本身)的个数为( )。

答案 D  部分答案为n(n+1)/2-1也是对的 两者是相等的

解析:使用归纳法

如S字符串为”abcdefg”,长度为7。则S中的包含的互不相同的字串如下:

1.长度为6的个数为2:”abcdef”和”bcdefg”

2.长度为5的个数为3:”abcde”,”bcdef”,”cdefg”

......

6.长度为1的个数为7:”a”,”b”,”c”,”d”,”e”,”f”,”g”,

其个数总和就是2+3+4+5+6+7 = (1+2+3+..+7) – 1 = 7x(7+1)/2 – 1(减1是减去原字符串自身).

可得扩展,其中:
1+2+3+…+n = (1+n) + (2+(n-1)) + (3+(n-2)) + …(首尾两项相加的和都是n+1,共 n/2个)
= n(n+1)/2

注:上面的公式还需要减1,因为只需要从2累加到n,字符串本身不算。

故答案为:  n(n+1)/2-1

判断题

1.数组是同类型元素的集合。

错误  数组是由同类型元素构成,但不同于集合,每个元素都有自已的位置,其中可能存在相同的元素。

2.数组可看成线性表的一种推广,因此与线性表一样,其基本运算有插入和删除等。

错误  数组可看成线性表的一种推广,但插入和删除不是其基本运算。

3.数组只能采用顺序存储结构

错误  数组是一种逻辑结构,主要的基本运算是存、取元素,所以最适合采用顺序存储结构,但并不能说数组只能采用顺序存储结构

4.二维数组A[-3..5,0..10]中共有80个元素。

错误  其元素个数=[5-(-3)+1]×[10-0+1]=99。

5.定义二维数组A[1..8,0..10],起始地址为LOC,每个元素占2个存储单元,在以行序为主序的存储方式下,某数据元素的地址为LOC+50,则在以列序为主序的存储方式下,该元素的存储地址为LOC+36。

错误  这里m=8,n=11,k=2。在以行序为主序时,设该元素为ai,j,有LOC(ai,j)=LOC+[(i-1)×n+j] ×k=LOC+50,即11i+j=36,由于1≤i≤8,0≤j≤10,由此推出i=3,j=3。 在以列序为主序时,LOC(ai,j)=LOC+[j×m+i-1]×k,所以LOC(a3,3)=LOC+52。

6.用一维数组存储特殊矩阵,可以简化对矩阵的存取操作。

错误 主要用于数据压缩。

稀疏矩阵的压缩方法主要有: 1:三元组顺序表 (行下标,列下标,值) 2:行逻辑链接的顺序表。 3:十字链表。(最常用)

两个串相等的充分必要条件是两个串长度相等且对应位置字符相同。

应用题

(1)已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next和nextval函数值。

答案:

模式串t的next和nextval值如下:


j           1  2  3  4  5  6  7  8  9  10 11 12
t串         a  b  c  a  a  b  b  a  b  c  a  b
next[j]     0  1  1  1  2  2  3  1  2  3  4  5
nextval[j]  0  1  1  0  2  1  3  0  1  1  0  5

(2)设目标为t=“abcaabbabcabaacbacba”,模式为p=“abcabaa”

① 计算模式p的naxtval函数值;

② 不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程。

答案:

① p的nextval函数值为0110132。(p的next函数值为0111232)。

② 利用KMP(改进的nextval)算法,每趟匹配过程如下:

第一趟匹配: abcaabbabcabaacbacba

abcab(i=5,j=5)

第二趟匹配: abcaabbabcabaacbacba

abc(i=7,j=3)

第三趟匹配: abcaabbabcabaacbacba

a(i=7,j=1)

第四趟匹配: abcaabbabcabaac bacba

(成功)                                                   abcabaa(i=15,j=8)

(3)数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。求:

① 存放该数组所需多少单元?

② 存放数组第4列所有元素至少需多少单元?

③ 数组按行存放时,元素A[7,4]的起始地址是多少?

④ 数组按列存放时,元素A[4,7]的起始地址是多少?

答案:

每个元素32个二进制位,主存字长16位,故每个元素占2个字长,行下标可平移至1到11。

(1)242   (2)22   (3)s+182   (4)s+142

(1) 数组中一共有11*11=121个元素,总共占字长:121*2(每个元素2个字长)=242
(2) 第四列有11个元素,所需单元:11*2(每个元素字长)=22
(3) a[7,4] 实际上就是第9行第4列!该元素起始地址:s+((7-(-1))*11+(4-1))*2=s+182
(7-(-1) ) * 11 + (4-1) 是在该元素之前的元素个数 ,*2就是每个元素占2个字长
该元素地址就等于 起始元素地址+在该元素之前元素所占的地址空间
(4) 这个与3是类似的,只是计算该元素之前的元素个数 的方法不一样!((7-1)*9-(-1+1)+(4-(-1)))*2=s+142

(4)请将香蕉banana用工具 H( )—Head( ),T( )—Tail( )从L中取出。

L=(apple,(orange,(strawberry,(banana)),peach),pear)

答案:H(H(T(H(T(H(T(L)))))))

数据结构-串、数组和广义表相关推荐

  1. [数据结构与算法] 串,数组和广义表

    串偏向于算法,数组和广义表偏向于理解 第四章 串.数组和广义表 4.1 串的定义 4.2 案例引入 4.3 串的类型定义,存储结构及运算 4.3.1 **串的类型定义** 4.3.2 串的存储结构 4 ...

  2. 数据结构05数组和广义表

    第五章 数组 和 广义表 数组和广义表可以看成是线性表在下述含义上的扩展:表中的数据元素本身也是一个数据结构. 5.1 数组的定义 n维数组中每个元素都受着n个关系的约束,每个元素都有一个直接后继元素 ...

  3. 数据结构之数组与广义表

    目录 联系 数组 广义表 联系 数组和广义表可看作一种扩展的线性数据结构,其特殊性在于数据元素的构成上.从组成线性表的元素角度看,数组是由具有某种结构的数据元素构成,广义表则是由单个元素或子表构成的. ...

  4. 数据结构:数组和广义表

    数组 数组这部分内容在写<线性表>的的时候介绍过,所以这里就略过一部分内容(略过的内容在这里),写一写前边没写过的. 由于数组中各元素具有统一的类型,并且数组元素的下标一般具有固定的上界和 ...

  5. C语言数据结构学习——数组和广义表

    数组和广义表 数组 数组定义 特点 常见运算及声明方式 数组的顺序表示和实现 矩阵的压缩存储 概念 稀疏矩阵 对称矩阵 三角矩阵 广义表 数组 数组定义 数组(Array)是有序的元素序列.若将有限个 ...

  6. 六、考研数据结构笔记——数组与广义表

    一.数组的定义 一维数组:就是线性表,前面有 二维数组:准备考研的应该都知道,就是一个矩阵. 数组一旦被定义其,维数(行)和维界(列)就不能改变.只会读取加修改元素. 二.二维数组的按行(列)优先 事 ...

  7. 【数据结构】数组和广义表

    感觉数组这一段没讲什么太多的东西. 先是讲了下定义,就是每个维度上都有对应的前驱后继,首尾元素例外.操作只有初始化 销毁 取元素 修改元素.然后讲了下适合用顺序存储结构,多维情况下根据下标(j1 j2 ...

  8. 【数据结构总结】第四章:串、数组和广义表(线性结构)

    第四章:串.数组和广义表(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅 ...

  9. 《数据结构》-第四章 串、数组和广义表(习题)

    第四章 串.数组和广义表练习题 本章考点较少易于掌握,对于串的重点考点为串的模式匹配算法:数组的主要考点为数组下标与存储地址计算和特殊矩阵的压缩存储方法:针对广义表的考点主要为在广义表中取原子项(表) ...

  10. 数据结构:串、数组和广义表

    串 线性结构:线性表.栈和队列.串与数组和广义表 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集.在基本操作上,串和线性表有很大差别.线性表的基本操作主要以单个元素作为操作对象,如查 ...

最新文章

  1. Eclipse中10个最有用的快捷键组合
  2. 车联网空间巨大 解决网络安全问题乃当务之急
  3. Quibi:我轻轻地咬一口 你最爱的Netflix和TikTok
  4. NetFramework各个版本的特性笔记
  5. leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)
  6. 百度DuerOS与高通合推手机语音交互解决方案,谁会欢喜谁要愁?
  7. scala中的协变和逆变
  8. 传统城域网架构遇瓶颈 引入NFV成有效解法
  9. Scintilla教程(7): 多选以及滚动
  10. 安装好vmware后界面默认英语如何修改成中文或者其他语言
  11. 关于VScode中如何修改默认的中文注释格式(包括去除斜体和修改颜色)
  12. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
  13. 禅与摩托车维修艺术 摘选
  14. .shape()与.reshape()函数
  15. CTU Open Contest 2017 Pond Cascade
  16. python基础时间日历_Python基础(九): 时间日历
  17. 说说你对事件委托的理解?
  18. 2.5 linux存储的基本管理
  19. mysql分表的原则_mysql分表规则(转)
  20. 批量调整WPS中插入的图片大小

热门文章

  1. 《单片机原理及应用》(B)课程教学大纲
  2. 同花顺_代码解析_交易系统_J09_18
  3. python 漏洞扫描器_SRCHunter Python开源漏洞扫描器
  4. 胜为蓝牙适配器驱动_胜为UDC-324A/B/C/D/E蓝牙适配器驱动
  5. 安卓融云SDK的使用,会话列表,1v1发起单聊
  6. 剑指offer(1)(讲解极其详细版)
  7. element input=number 限制输入长度,输入数字的大小和禁止输入e
  8. 3263: 6.导弹对对碰
  9. KIDS采购销售管理系统
  10. 【物联网】华为云物联网平台-基于C示例代码的快速体验