n/2
n
(n+1)/2
(n-1)/2
第1题:
A.删除单链表中的第一个元素
B.删除单链表中的尾结点
C.在单链表的第一个元素前插入一个新结点
D.在单链表的最后一个元素后插入一个新结点
第2题:
从一个具有n个结点的单链表中查找值为x的结点时,在查找成功的情况下,需平均比较(45)个结点。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
第3题:
A、O(n)
B、O(1)
C、O(n2)
D、O(n-1)
第4题:
在一个n个结点的单链表中查找某个元素,若查找成功,则平均比较次数为( )。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
第5题:
从具有n个结点的二叉查找树中查找一个元素时,在最坏情况下进行成功查找的时间复杂度为(51)。
A.O(n)
B.O(1)
C.O(log2n)
D.O(n2)
第6题:
从一个具有n个结点的单链表中查找其值等于k的结点时,在查找成功的情况下,需平均比较 ______个结点。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
第7题:
对于二叉查找树(Binary Search Tree),若其左子树非空,则左子树上所有结点的值均小于根结点的值;若其右子树非空,则右子树上所有结点的值均大于根结点的值。左、右子树本身就是两棵二叉查找树。因此,对任意一棵二叉查找树进行(61)遍历可以得到一个结点元素的递增序列。在具有n个结点的二叉查找树上进行查找运算,最坏情况下的算法复杂度为(62)。
A.先序
B.中序
C.后序
D.层序
第8题:
在具有n个结点的单链表中,实现()的操作,其算法的时间复杂度是O。
A.求链表的第i个结点
B.在地址为P的结点之后插入一个结点
C.删除表头结点
D.删除地址为P的结点的后继结点
第9题:
在具有101个元素的顺序表中查找值为x的元素结点时,平均比较元素的次数为()。
A.50
B.51
C.100
D.101
第10题:
阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 4-1 (a) 所示,删除第 3 个元素结点后的单链表如 图 4-1 (b) 所示。图4-1
define SUCCESS 0 define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node ,*LinkList; 【C 代码】 LinkList GetListElemPtr(LinkList L ,int i) { /* L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点: 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if (i<1 ∣∣ !L ∣∣ !L->next) return NULL; k = 1; P = L->next; / *令p指向第1个元素所在结点*/ while (p && (1) ) { /*查找第i个元素所在结点*/ (2) ; ++k; } return p; } Status DelListElem(LinkList L ,int i ,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令p指向第i个元素的前驱结点*/ if (i==1) (3) ; else p = GetListElemPtr(L ,i-1); if (!p ∣∣ !p->next) return ERROR; /*不存在第i个元素*/ q = (4) ; /*令q指向待删除的结点*/ p->next = q->next; /*从链表中删除结点*/ (5) ; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }