数据结构--字符串

写一个二分查找
第十一章 15题
二分查找:
二分查找算法也称折半查找,基本思想就是折半,和平时猜数字游戏一样,比如猜的数字时67,猜测范围是0-100,则会先猜测中间值50,结果小了,所以就会从50-100猜测,中间值为75,结果大了,又从50-75猜测中间值,一直到猜中为止。因此,二分查找有一个限制就是原先数组需要是一个有序数组。

// An highlighted block
def binarysearch(a,num):
    length = len(a)
    low = 0
    high = length - 1
    while low <= high:
        mid = int(low+((high-low)/2))
        if a[mid]< num:
            low=mid+1
        elif a[mid]>num:
            high=mid-1
        else:
            return mid
    return -1

if __name__=='__main__':
    b=[1,3,4,8,22,65,73,90]
    print(b)
    a=binarysearch(b,22)
    print(a)

----2020/3/12

----在下列关于“字符串”的陈述中,不正确的描述是()

正确答案: C
字符串是一种特殊的线性表
字符串可以连续存储,也可以链式存储
字符串的长度必须大于零
‘’空串”与“空白串”不是同一个含义

解析:字符串:是有零个或多个字符组成的有序序列,是计算机处理的最基本的非数值数据。 S=‘a1a2a3…an’ (n ≥0)
字符串的值中每个字符ai(0 ≤i ≤n)可以是字母、数字或其他字符组成的序列,组成线性表的每个元素就是一个单字符,所以是一种特殊的线性表,A正确。
串是特殊的线性表,故其存储结构与线性表的存储结构类似,只不过组成串的结点是单个字符而已。连续存储包括静态定长存储和动态堆分配存储;串值也可用单链表存储,简称为链串。所以实际应用中为了提高空间利用率,可使每个结点存放多个字符(这是顺序串和链串的综合 (折衷) ),称为块链结构。
空串有自己的串长度和内容,即:“长度为0,内容为空”。C错误。
空串是长度为0,内容为空;空白串是包含一个或多个空白字符‘ ’(空格键)的字符串。所以不是同一含义。D正确。

----判断下列说法是否正确:设有两个串S1和S2,求S2在SI中首次出现位置的运算称为求子串。( )

正确答案: B
正确
错误
解析:属于模式匹配

----2020/3/13

----以下数据结构中,哪一个是线性结构()?
正确答案: D
广义表
二叉树
稀疏矩阵

解析:线性结构是一个有序数据元素的集合。
数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。
相对应于线性结构,
非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。

----假设有两个串 A 和 B ,求 B 在 A 中首次出现的位置的操作,我们称为( )。

正确答案: B
连接
模式匹配
求子串
求串长

解析:模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。

----以下选项中非法的C语言字符常量是?
正确答案: D
‘\007’
‘\b’
‘a’
“\09”

解析:D选项中’\09’,\0表示后面的字符是八进制数。又出现9所以是非法的。

----已知串S= ‘babab ’ , 其 Next 数值序列为

正确答案: C
01112
01233
01123
01223
解析:。。。。

首先介绍2个概念,字符串的前缀和后缀(这里的前缀是不包括最后一个字符的子串,后缀是不包含第一个字符的子串)。
拿题目中的字符串a=’‘babab’'举例,
首先第一位0,第二位1。这个是固定的。
第三位,字符串是“bab”,这时候“bab”的前缀有b,ba;后缀有ab,b,可以看出前后缀相等的最长的字符串只有b,因为b的长度是1,所以这里第三位的next值就是1。
到了第四位,字符串是“baba”,前缀是b,ba,bab;后缀是aba,ba,a。这里可以看出前后缀相等的最长的字符串是ba,长度是2,因此第四位的next值是2。
到了第五位,字符串是“babab”,前缀是b,ba,bab,baba;后缀是abab,bab,ab,b。这里可以看出前后缀相等的最长的字符串是bab,长度是3,因此第五位的next值是3.

----2020/3/14

----串长度是指串中不同字符的个数()
正确答案: B

解析:串长度是指串中所有字符的个数。

----请问在64位平台机器下sizeof(string_a),sizeof(string_b)大小分别是()

1.char *string_a=(char )malloc(100sizeof(char));
2.char string_b[100];

正确答案: A
8 100
100 8
100 100
8 8
解析:string_a是一个char型的指针,在64位系统中sizeof(char*)=8
string_b是一个char型的数组,在64位系统中sizeof(char)=1,共100值因此为100

----字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数是()
正确答案: D
1024
1018
55
50

解析:总的子串个数为 10+9+8+7+。。+1 = 55
其中w(两次), ww, q, ., 有重复
55 - 5 = 50。

----在下列表述中,()是错误的
正确答案: A B D
含有一个或多个空格字符的串称为空串
对n(n>0)个顶点的网,求出权最小的n-1条边便可构成其最小生成树
选择排序算法是不稳定的
平衡二叉树的左右子树的结点数之差的绝对值不超过1

解析:A选项:长度为0 的串为空串,即为“” 。由多个空格字符构成的字符串称为空格串
B选项:如果权值最小的n-1条边构成了环的话,就不能构成最小生成树
D选项:平衡二叉树的左右子树高度之差的绝对值不超过1.
C选项:选择排序包括直接选择排序和堆排序,都是不稳定的算法
选择排序,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

----设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数为()
正确答案: D
2n-1

(n²/2)+(n/2)
(n²/2)+(n/2)-1
(n²/2)-(n/2)-1
解析:含有n个不同字符的字符串的非空子串的个数为C(n + 1, 2) = n * (n + 1) / 2
子串(包括空串)为 n * (n + 1) / 2 + 1
非空真子子串(不包括空串和跟自己一样的子串)为 n *(n + 1)/ 2 - 1

----下面关于字符串的描述正确的是:【多选】( )
正确答案: B C
通过String s1=new String(“abc”)和String s2=“abc”,则s1==s2为true。
“abc”+“def"则会创建三个字符串对象,第三个是"abcdef”。也就是说,在Java中对字符串的一切操作,都会产生一个新的字符串对象。
StringBuffer是线程安全的,它比String快。
StringBuilder是线程安全的,它比String快

解析:1、三者执行速度:StringBuilder > StringBuffer > String ;
2、StringBuilder:线程非安全的;
3、StringBuffer:线程安全的;
4、用String操作字符串时,实际上是在不断地创建新对象,而原来的对象会作为垃圾被回收;

----2020/5/10

----下面关于串的叙述中,哪一个是不正确的?( )

正确答案: B
串是字符的有限序列
空串是由空格构成的串
模式匹配是串的一种重要运算
串既可以采用顺序存储,也可以采用链式存储

解析:长度为零的串,即“”,叫空串;而空格组成的串叫空格串。

----两个长度不相同的串有可能相等()
正确答案: B

解析:其实判断两个字符串的逻辑就是:
先判断长度是否相等,不相等则结果直接为不相等;
长度相等才继续判断是否对应位置上的每个字符串是否相等,如果所有对应位置字符都相等,结果为相等,否则为不相等。

----串中任意个字符组成的子序列称为该串的子串。
正确答案: B

正确
错误
解析:子串定义:串中任意个连续的 字符 组成的子序列

----串’ababaaababaa’的next数组为

正确答案: C
012345678999
012121111212
011234223456
012301232234

解析:在这里插入图片描述

----假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)

正确答案: A
86,1011
70,1000
86,0001
70,0010
92,1000
92,0100

解析:长度计算为(2+3)*4+(4+6+7)3+151=86在这里插入图片描述
所以B的编码(也就是3)为1011

----在这里插入图片描述
正确答案: A
12
13
16
以上都不对

解析:在这里插入图片描述

----String str = new String(“abc”),“abc”在内存中是怎么分配的?

正确答案: A C


字符串常量区
寄存器

解析:应该是AC,即是堆和字符串常量池中,当你new String(“abc”)时,其实会先在字符串常量区生成一个abc的对象,然后new String()时会在堆中分配空间,然后此时会把字符串常量区中abc复制一个给堆中的String,故abc应该在堆中和字符串常量区

----下面选项中合法的字符常量是?
正确答案: B
“X”
‘X’
‘abc’
’ \ ’

解析:字符常量是用单引号括起来的一个字符。A选项中,使用双引号标示字符串常量,所以是错误的;C选项中,'abc’是字符串,字符常量只能是单个字符,不能使字符串;D选项中,以反斜杠" \ "开头的是转义字符。因此B选项正确。

----下面 是"abcd321ABCD"的子串。

正确答案: D
abcd
321ab
“abc ABC”
“21AB”

解析:A和D看起来都对,但是区别在于D有引号而A没有引号

----设串长为n,模式串长为m,则KMP算法所需的附加空间____。

正确答案: A
O(m)
O(n)
O(m*n)
O(nlog2m)

解析:KMP算法时间复杂度为O(m+n),空间复杂度为O(m)。 因为KMP算法涉及到next数组的存储,且next数组是基于模式串长度计算的。

----已知串S=′aaab′,其Next数组值为()
正确答案: A
0123
1123
1231
1211

解析:在这里插入图片描述

----字符串′ababaabab′的nextval为()
正确答案: A

(0,1,0,1,0,4,1,0,1)
(0,1,0,1,0,2,1,0,1)
(0,1,0,1,0,0,0,1,1)
(0,1,0,1,0,1,0,1,1)

解析:-------在这里插入图片描述

----用 0 - 9 这 10 个数字组成一个首尾相连的字符串,每个数字可以重复出现多次,并且字符串中任意 2 个数字都相邻出现过。此字符串最小长度是()
正确答案: D

47
48
49
50
解析:,数字0必须与其他9个数字相邻,则0最少出现5次。每个数字的地位均等,根据对称性,50

----在一个存放字符串的数组char p_str[],要把字符串中第4个字符的值改为’a’,正确的做法是?

正确答案: A B
p_str[3]=‘a’
*(p_str+3)=‘a’
p_str[4]=‘a’
*(p_str+4)=‘a’

解析:A,B
数组名是指针,p_str[3] == *(p_str+3)。

----有字符数组 a[80] 和 b[80],则正确的输出语句是( )。
正确答案: A

puts(a); puts(b);
printf("%s,%s", a[], b[]);
putchar(a, b);
puts(a, b);
解析:printf(“格式控制字符串”, 输出列表); 如:printf("%s", string);
putchar(字符数据); 如:char a_c=‘h’;putchar(a_c);
puts(字符串); 如:puts(“hello girl”);

----判断下述语句的对错:MFC中CString是类型安全的类。

正确答案: A

解析:类型安全就是说,如果两个类型直接要相互转换,必须要显示的转换,不能偷偷摸摸的只用一个等于号就隐式转换了

----哈弗曼编码是一种无损二进制熵编码算法,其加权路径长度最小,字符串“alibaba”的二进制哈弗曼编码有___位(bit)
正确答案: C
11
12
13
14

解析:哈弗曼树又叫做最优二叉树,是权值越大的点离根节点越近,导致整个树权值最小-----


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值