数据结构题目 第二章

题目

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;                                                                                                        }                                                                                                                                                   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值