题目
1、线性表的特点是每个元素都有一个前驱和一个后继。 ( )
2、线性表的顺序存储结构是一种( )的存储结构。
A.随机存取 B.顺序存取 C.索引存取 D.散列存取
3、下述( )是顺序存储结构的优点。
A.存储密度大 B.插入运算方便 C.删除运算方便 D.无需大片连续存储空间
4、两个有序顺序表分别是具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( )。
A.n B.m C.n-1 D.m+n
5、删除顺序表中的第1个数据元素a0的时间复杂度是O(n)。 ( )
6、在n个节点的顺序表中, 算法的时间复杂度是O(1)的操作是 ( )。
A.访问第i个结点(l≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点后插入一个新结点((1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
7、下面( )不是线性表的特性。
A.除第一个元素外, 每一个元素都有前驱
B.除最后一个元素外, 每一个元素都有后继
C.线性表是数据元素的有限序列
D.线性表的长度等于n, 并且n不等于0
8、二维数组A[10][20]按行优先顺序存储,每个元素占4个存储单元, A[1][1]的存储地址是1000, A[5][6]的存储地址是______。
9、已知长度为n的线性表采用顺序存储结构。写一算法, 删除线性表中所有值为x的元素。请先对算法思想作简要文字说明, 再写出算法具体代码。
10、设计一个高效算法,将顺序表L的所有元素逆置。
答案
1、错误
除第一个元素外,每个元素有且仅有一个直接前驱。
除最后一个元素外,每个元素有且仅有一个直接后继。
2、A
3、A
4、A
这时第一个有序表(长度为n)的最后一个值即最大值小于第二个有序表(长度为m)的第一个值即最小值,此时比较次数为n。
5、正确
若有n个元素的话,此时,移动了n-1个元素。
6、A
A选项访问第i个结点((1≤i≤n),也就是L. data[i-1]
访问第i个结点的直接前驱(2≤i≤n),也就是L. data[i-2]
时间复杂度都为O(1)
B选项插入新结点需要移动n-i+1个元素,时间复杂度为O(n)
C选项删除一个结点需要移动n-i个元素,时间复杂度为O(n)
D选项排序没有给出排序方法, 所以时间复杂度不确定
7、D
线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。
8、1340
1000+((5-1)×20+(6-1))×4=1340
9、解法一:用k记录顺序表L中等于x的元素个数,边扫描L边统计k,并将不等于x的元素前移k个位置, 最后修改L的长度。
void del _x_1(SqList &l,ElemType x){
int k=0;i=0;
while(i<L. length){
if(L. data[i]==x)
k++;
else
L. data[i-k]=L. data[i];
i++;
}
L. length=L. length-k; }
解法二:用k记录顺序表L中不等于x的元素个数(即需要保存的元素个数)。边扫描L边统计k,并将不等于x的元素向前移动k个位置,最后修改L的长度。
void del_x_2(SqList &L, ElemType x){
//本算法实现删除顺序表L中所有值为x的数据元素
int k=0;
for(i=0:i<L.length;i++){
if(L. data[i]!=x){
L. data[k]=L. data[i];
k++;
} }
L.length=k; }
10、算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i](0<=i<=L.length/2),将其与后半部分的对应元素L.data[L.length-i-1]进行交换。
void Reverse(SqList &L){
ElemType temp;
for(i=0;i<L. length/2;i++){
temp=L.data[i];
L. data[i]=L. data[L. length-i-1];
L. data[L. length-i-1]=temp; } }