1.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式最节省时间。
A 顺序表 B 双链表 C 带头结点的双循环链表 D 单循环链表
解析:只要确定了顺序表的起始位置,线性表中任一元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构
2.下列数据结构具有记忆功能的是?C
A 队列 B 循环队列 C 栈 D 顺序表
解析:
由栈的定义可知,栈是先进后出(或后进先出)的线性表,因此,栈具有记忆功能。
3.循环两列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是 (A)
A 队空:end1==end2; 队满:end1==(end2+1)modM
B 队空:end1==end2; 队满:end2==(end1+1)mod(M-1)
C 队空:end2==(end1+1)modM ; 队满:end1==(end2+1)modM
D 队空:end1==(end2+1)modM; 队满:end2==(end1+1)mod(M-1)
解析:
end1指向队头元素,那么可知出队的操作是先从A[end1]读数,然后end1再加1。end2指向队尾元素的后一个位置,那么可知入队操作是先存数到A[end2],然后end2再加1。若把A[0]储存第一个元素,当队列初始时,入队操作是先把数据放到A[0],然后end2自增,即可知end2初值为0;而end1指向的是队头元素,队头元素的在数组A中的下标为0,所以得知end1初值也为0,可知队空条件为end1== end2;然后考虑队列满时,因为队列最多能容纳M-1个元素,假设队列存储在下标为0到下标为M-2的M-1个区域,队头为A[0],队尾为A[M-2],此时队列满,考虑在这种情况下end1end2的状态,end1指向队头元素,可知end1=0,end2指向队尾元素的后一个位置,可知end2=M-2+1=M-1,所以可知队满的条件为end1==(end2+1)mod M,选A。
4.对递归程序的优化的一般的手段为(A)
A 尾递归优化 B 循环优化 C 堆栈优化 D 停止值优化
解析:
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。
5.以下数据结构说法,错误的是_C_?
A 红黑树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
B B+树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
C Hash表插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(n)
D 排序链表插入操作的平均时间复杂度为O(n),最坏时间复杂度为O(n)
解析:
6.将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是(D)
A 2n B 2n-1 C n-1 D n
解析:
eg: [1,2,3] [4,5,6]
只需要依次让1,2,3和4比较就好了,所以是三次也就是N次
7.设图G的相邻矩阵如下:
0 1 1 1 1
1 0 1 0 0
1 1 0 1 1
1 0 1 0 1
1 0 1 1 0
则G的顶点数和边数分别为(A)
A 5,8 B 4,10 C 5,6 D 4,5
解析:
图的矩阵的顶点数:矩阵的行数
边数:矩阵中1的个数除以2
8.小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;ppRYYGrrYB225不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
import java.util.*;
public class Main{
private static void Solution(String a,String b){
HashMap<Character,Integer> map1 = new HashMap<>();
HashMap<Character,Integer> map2 = new HashMap<>();
List<Character> l1 = new ArrayList<>();
List<Character> l2 = new ArrayList<>();
int flag = 0;
for(int i = 0;i<a.length();i++){
l1.