刷题7

1:n 个字符构成的字符串,假设每个字符都不一样,问有多少个子串(B)
A:n+1
B:n(n+1)/2 + 1
C:2^n-1
D:n!
解析:长度为1的字符串有n个,长度为2的字符串n-1个,长度为3的字符串n-2…所以n+(n-1)+(n-2)+…+1长度为n(n+1)/2空串:1个,所以最后结果为n(n+1)/2+1
2:若有以下定义和语句:

	int a[0]={1,2,3,4,5,6,7,8,9,10},*p=a;

则不能表示a数组元素的表达式是 (B)
A:*p
B:a[10]
C:*a
D:a[p-a]
解析:A:*p指的是a数组的首地址,a[10]数组下标越界,错误;C:*a也指向第一个元素a[p-a]相当于a[0],所以B错误
3:以下哪些不是链表的特征(A、C、D)
A:数据在内存中一定是连续的
B:插入或删除时,无需移动其他元素
C:可以随机访问表内的元素
D:需要事先估计存储空间
解析:链表不需要内存地址空间连续;不能随机访问元素,先找到前一个元素,前一个元素的next指针指向下一个元素地址空间,不需要预先估计地址空间随机查找可用空间
4:在具有 n 个结点的单链表中,实现(A)的操作,其算法的时间复杂度都是 O
(n)。
A:遍历链表或求链表的第 i 个结点
B:在地址为 P 的结点之后插入一个结点
C:删除开始结点
D:删除地址为 P 的结点的后继结点
解析:遍历的时间复杂度为O(n),求链表第i个结点时先遍历到前i-1个结点,所以时间复杂度也为O(n)
5:需要频繁的插入删除操作使用什么结构比较合适(C)
A:数组
B:队列
C:链表
D:栈
解析:链表在插入和删除比较方便,只需要改变指针指向。因为需要频繁的插入和删除,所以用链表比较合适
6:当一个二叉排序树左右子树都不为空时,二叉排序树中的最大值在二叉排序树的何处(B)
A:根节点
B:叶子节点
C:父节点
D:兄弟节点
解析:因为左右子树都不能为空,并且二叉排序树左子树结点小于根节点,根节点小于右字树结点,所以一般最大值是右字树结点,并且为叶子节点
7:若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( B)。
A:9
B:11
C:15
D:不确定
解析:二叉树度为零的结点是度为2的结点数加1,所以度为2的结点为10个 则度为零的结点是11个,所以选B
8:n个结点的线索二叉树上含有的线索数为(B)
A:2n
B:n+1
C:n-1
D:n
解析:n个结点的线索二叉树,每个节点都有指向左右孩子的两个指针域,则共有2n个指针,而n个结点共有n-1条分支,所以共有2n-(n-1)个空指针域,即n+1条线索
9:在给定文件中查找与设定条件相符字符串的命令为(C)
A:find
B:gzip
C:grep
D:sort
解析:grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它表示全局正则表达式版本,它的使用权限是所有用户。 而find只能匹配单个字符,find会找到匹配的字符的第一个,并返回它位置的首地址,后面匹配的字符串则不会被查找。gzip是GUNzip的缩写,是一个GNU自由软件的文件压缩程序;
10:下列选项中,能正确定义数组的语句是(B)。
A:int num[0…2008];
B:int num[]={2008};
C:int N = 2008;int num[N];
D:#define N 2008;int num[N];
解析:D中宏定义后面不需要分号,C中不可以在int num[]中存放一个变量。

猜你喜欢

转载自blog.csdn.net/g_l_xz/article/details/83110829