https://www.cnblogs.com/longhai3/longhai

数据结构>>过程性考核

Posted on 2022-02-12 22:22  凡是过去,皆为序曲  阅读(478)  评论(0编辑  收藏  举报

一、选择题(15个题,每题2分,共计30分)

1、数据结构DS可以被定义成DS=(D,R),其中D表示(   B   )的集合,R表示(    C )的集合。

A 数据对象  B数据元素   C  关系  D 映像

2、计算机的算法指的是( B  ),它必须具备输入、输出和( CD   )等五大特性。

A 计算方法               B 解决问题的有限序列 

C 可行性、确定性和有穷性 D 可行性、确定性和有穷性

3、顺序表中第一个元素的存储地址是100,每个元素的长度为4,则第5个元素的地址是(   C )。

A.110            B.108         C.116          D.120

4、抽象数据类型的三个组成部分分别是(  A)

A 数据对象、数据关系和基本操作     B 数据元素、逻辑结构和存储结构

C 数据项、数据元素和数据类型       D 数据元素、数据结构和数据类型

5、算法分析的两个主要方面( A  )

A 空间复杂度和时间复杂度   B正确性和简单性  

C 可读性和文档性           D 数据复杂性和程序复杂性

6、顺序存储结构中的数据元素之间的逻辑关系由(  C )来表示的。

A 线性结构  B非线性结构   C 存储位置   D指针

7、下面程序的时间复杂为(  )

for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;}

   (A) O(n)       (B) O(n2)      (C) O(n3)         (D) O(n4)

8、设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为(  )。

   (A) q=p->next;p->data=q->data;p->next=q->next;free(q);

(B) q=p->next;q->data=p->data;p->next=q->next;free(q);

   (C) q=p->next;p->next=q->next;free(q);

   (D) q=p->next;p->data=q->data;free(q);

9、有链表L,在结点p和结点q之间插入一个结点s的语句是(   )

A s->next=q;  p=s;  B p->next=s ;  s=q;  C  s->next=q;  p->next=s;  D s=q;  p->next=s;

10、带有头结点的链表L,则判断链表为空的条件是(  没答案,L->next==NULL )

A L==NULL   B  L->next=NULL   C  l->next==NULL   D  L->next==null

11、用首插法和尾插法创建的链表,同样的输入顺序,在遍历链表的时候,关于链表元素的输出顺序说法错误的是(   )

A两者输出的顺序一致  B 两者输出的顺序互为逆序关系  C 首插法输出的顺序与输入的顺序相反 D尾插法输出的顺序和输入的顺序相同 

12、在一个长度为n的顺序表中,在第i个元素(1in+1)之前插入一个新元素时须向后移动(  )个元素。

A n-i  B n-i+1    C n-i-1  D i

13、在单链表的第i个结点后插入一个新结点(1in)的算法时间复杂度是(   )

A O(1)     B   O(n)    C O(n2)    D O(log2n)

14、对于单链表表示法,以下说法错误的是(    )

A数据域用于存储线性表的一个数据元素 

B指针域或链域用于存放一个指向本结点的直接后继结点的指针

C所有数据通过指针的连接而组织成单链表 

D NULL称为空指针,它不指向任何结点,只起标志作用

15、在线性表的下列运算中,不改变数据元素之间结构关系的运算是(   )

A 插入   B 删除   C 排序    D 定位

二、时间复杂度计算(2个题,每题5分,共计10分)

提示:最大语句频度就是执行次数最多的语句的执行次数

 

 1:答案:      n3                        和       O(n3)                  

2:答案:      log2n                        和         O(log2n )                

三、算法填空(2个题,每题15分,共计30分)

1、如下算法完成带头结点的单链表的初始化。(15分)

void initList(LinkList &L) { //初始化单链表

    L= (LinkList)malloc(sizeof(Lnode));                

    if(!L)

       exit(0);

           L->next=NULL;                 

}

2、如下算法完成删除顺序表L中所有元素x。(15分)

void deleteValue(SeqList &L, elemType x)

{

       int i,k=0;

    for(i = 0; i < L.Length; i++)        // 检测表中所有元素

        if(     L.elem[i]!=x       ) {          // 若元素不具有 x 值

            if(i!=k)                        //该元素前移

                   L.elem[k]=L.elem[i];       

            k++;

        }

    L.Length=k;

 }

三、算法设计(2个题,每题15分,共计30分)

1、删除顺序表中的最大值。(15分)

int deleteMax(SqList &L, ElemType &x)

{

   //删除顺序表 L 中具有最大值的元素。 如果删除成功, 则函数返回 1并通过引用

  //型参数 x 返回其值, 否则函数返回 0。

   if (L.length==0) {

        printf("这是空表!\n");

        return 0;

    }

    int i, max_i=0;               //假定0号元素的值最大

    for (i = 2; i <= L.length; i++)     //循环,寻找具有最大值的元素

        if (L.elem[i - 1] > L.elem[max_i])

            max_i = i-1;        //max_i 记忆当前具最大值元素的位置

    x = L.elem[max_i];

   L.length--;

    L.elem[max_i] = L.elem[L.length];

    return 1;

}

2、统计链表中元素e的个数。(15分)

int count(LinkList L,elemType e)

{

    LinkList p=L->next;

    int n=0;

    while(p)

    {

       if(p->data==e)

       n++;

       p=p->next;

    }

    return n;

}

 

随心,随记

https://www.cnblogs.com/w1hg/331817