1. 一个顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(108 )。
从100开始,第二个102
2.c++当中,对两个数组 a 和 b 进行如下初始化(a数组比b数组长)
char
a[] =
"ABCDEF"
;
char
b[] = {
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
第一个是 字符串,第二个是字符数组 ,字符串以'\0'为结束符号,字符数组不用。它们长度相 同,但是占的内存字节数是不一样的
3.数组A的每个元素需要4个字节存放,数组有8行 10列,若数组以行为主顺序存放在内存SA开始的存储区中,则A中8行5列的元素的位置是(SA+296)
8行5列元素的位置,指的是起始位置,即上个元素的终止位置
4.若二维数组 a 有 m 列,则计算任一元素 a[i][j] 在数组中的位置公式为( i*m+j+1 )。
(假设 a[0][0] 位于数组的第一个位置上)
文字游戏,该位置为题中自设
5.从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中最快的方法是(B)
A.快速排序 B.堆排序 C.归并排序 D.基数排序
快速排序:选取一个基准数,序列最左边和最右边分别设置一个探针i,j。先从右往左找一个小于基准数的数,再从左往右找一个大于基准数的数,然后交换他们。继续从右向左重复以上过程,直至两探针相遇。最后基准数与两探针相遇位置的数进行交换。一轮排序结束后,基准数将序列分为两部分,左边的数都小于基准数,右边的数都大于基准数。平均复杂度为O(nlogn),最坏为O(n^2)。 **********************************************
堆排序:不稳定排序,复杂度O(nlogn)。升序采用大顶堆(每个结点的值都大于或等于其左右孩子结点的值),降序采用小顶堆。从最后一个非叶子结点开始,从左至右,从下至上调整成堆结构。一轮排序后,无序序列被构造成了一个堆,堆顶(根结点)元素为该趟排序序列最大或最小值,然后将堆顶元素与末尾元素进行交换。对剩余结点继续作上述调整。 **********************************************
归并排序:时间复杂度O(nlogn)。将待排序序列分成两组,只需使两组分别有序,然后将两组有序数列合并完成排序。采用递归分解数列,当分出来的组只有一个数据时认为该组有序,然后依次合并相邻小组。
**********************************************
基数排序:稳定排序。时间复杂度O(d(n+r))。r为基数,d为位数。依次对各个位进行排序,位数不足的补齐。分为最低位优先法(LSD)和最高位优先法(MSD)。分配: 先从个位开始,根据位值分别放入0-9号桶中。收集:将桶中的数据按顺序放到数组中。同一桶中按放入顺序取出(稳定排序)
6.线性表采用链式存储时,其地址连续与否均可以
线性表顺序表物理存储上必须连续,在初始化的时候就申请了一块连续的内存,链表逻辑上连续,物理上只是用指针链接内部元素,指针指向下一个结点,指针本身并不一定连续。
7.设数组a[]作为循环队列SQ的存储空间,数组的长度为m,f为队头指示,r为队尾指示,则执行出队操作的语句为 f = (f+1)%m
循环队列的相关条件和公式:
队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度
1.队空条件:rear==front
2.队满条件:(rear+1) %QueueSIze==front
3.计算队列长度:(rear-front+QueueSize)%QueueSize
4.入队:(rear+1)%QueueSize
5.出队:(front+1)%QueueSize
8.已知定义如下代码段 ,则以下哪个选项结果为5。a['e' - s]
int
a[] = {1, 2, 3, 4, 5, 6, 7, 8};
char
s =
'a'
, e, i;
e i 为声明变量,不是字符
不懂
1.数组指针和指针数组有什么区别:
- 数组指针只是一个指针变量,它占有内存中一个指针的存储空间
- 指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间
选的对,但没学过
2.时间复杂度
3.循环队列的相关条件及公式
4.稀疏矩阵