抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。它通常是指对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据的操作的集合。
抽象数据类型一般可以由数据对象、数据关系及基本操作来定义。故选B。
数据结构的存储结构是和相应的数据在内存中的物理地址之间的关系有关。而逻辑结构只是描述数据之间的关系(三大逻辑结构的一种)。
举例说明:
线性表(元素之间的逻辑关系是线性的)可以是顺序存储的方式,即所有元素相邻存放,在物理地址上是连续的(存储结构);
而对于链式存储的线性表,他的所有元素之间不一定是线性相连的,可能是第一个结点(元素)的地址为0x123,而第二个元素又出现在物理地址0x100上。
也就是说逻辑结构是线性的但是存储结构不一定就是线性的。
A、B选项均涉及存储结构。
C选项是单纯的逻辑结构。
D选项,顺序表定义了data数组和length长度,其中length长度显然不能表示存储结构,所以顺序表的存储结构必然通过data数组体现。
顺序查找适用于查找顺序存储或链式存储的线性表,平均比较次数是N/2。
长度为1,2,3,4,5,6,7,8的子串个数分别为:
8,7,6,5,4,3,2,1。
所以子串总个数:8+7+…+1=36。
这类题是有规律的:假设字符串长度为n,则
(1)空串为1个
(2)然后就是长度为1,2,3,…,n的子串个数分别为:n,(n-1),(n-2),…,1所以子串总个数为:1+n*(n+1)/2,显然这是个奇数。
但本题中因为长度为1的字符串有重复,所以长度为1的字符串个数为6,题目中要求的是非空子串,所以总数为34,选D。
最坏情况下,A、B、C三种方法的时间复杂度都为O( n 2 n^2 n2),而选择排序法又可以分为直接选择和堆排序,若为堆排序,时间复杂度为O(n l o g 2 n log_{2}n log2n)。
for (i = n-1; i>=1; i--)
for(j=1; j<=i; j++)
if (A[j] > A[j+1])
A[j]与A[j+1]交换
最坏情况下,if判断语句满足,当外循环和内循环都同时进行时,for语句双重嵌套,最坏时间复杂度为O( n 2 n^2 n2)。
散列存储,又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。散列法存储的基本思想是:由节点的关键码值决定节点的存储地址。
算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n))。它表述随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作时间复杂度。
快速转置时:
1)初始化所有列的非零元素的个数统计为O(n);
2)统计每一列的非零元素个数(t);
3)接着求每一列第一个非零元素的首位置(n);
4)最后对每一个非零个数转置(t)。
总共时间:2*(n+t),于是,时间复杂度为:O(n+t)。