您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础题(第一篇)

2015-09-05 11:44 344 查看
1)阅读下列函数说明和C代码,将应填进(n)处的字句写在答题纸的对应栏内。

【说明】设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向先驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0.每当在链表上进行一次L.Locate(x)操纵时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

【函数】

void Locate(int &x)
{
< 结点类型说明 >
*p = first->next;
while (p != first &&   (a) ) p = p->next;
if (p != first)
{
(b) ;
< 结点类型说明 >
*current = p;
current->prior->next = current->next;
current->next->prior = current->prior;
p = current->prior;
while (p != first && (c) ) p = p->prior;
current->next = (d) ;
current->prior = p;
p->next->prior = current;
p->next = (e) ;
}
else
printf(“Sorry. Not find!\n”);  \*没找到*\
}


解答如下:

(a) p->data!=x

(b) p->freq++

(c) current->freq>p->freq

(d) p->next

(e) current

2)有一个用数组 C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为?

解答:公式为 (m+r-f)mod m

3)假设要存储一个数据集,数据维持有序,对其的操作只有插入、删除和顺序遍历,综合存储效率和运行速度,下列哪种数据结构是最适合的是?

A) 数组

B) 链表

C) 哈希表

D) 队列

解答:选择“链表”,即选择B)

4)就分类算法所用的辅助空间而言,堆分类、快速分类和归并分类的关系是?

A) 堆分类<快速分类<归并分类

B) 堆分类<归并分类<快速分类

C) 堆分类>归并分类>快速分类

D) 堆分类>快速分类>归并分类

解答:在分类算法里,堆分类的辅助空间为O(1),快速分类的辅助空间为O(nlogn),归并分类的辅助空间为O(n),由于O(n)>O(nlogn)>O(1),所以按所需的辅助空间从大到小排序时得到:

  堆分类<快速分类<归并分类

  即选择A)

  

5) 在堆排序算法中我们用一个数组A来模拟二叉树T,如果该A[0]存放的是T的根节点,那么A0”>K的父亲节点是?

A) (K-1)/2

B) K/2

C) (K+1)/2

D) 都不对

解答:

  a)如果二叉树从1,2,3,…,n进行编号,则节点i 的父节点编号为[i/2](向下取整);

  b)如果二叉树从0,1,2,…,m进行编号,则节点i的父节点编号为[(i-1)/2] (向下取整);

  注意节点的起点编号,前者为1,后者为0,所以公式要进行相应的调整,由于题目编号的起点为A[0]即以0开始,所以父节点编号为(k-1)/2,即选A)

6)关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell的排序法,则一趟扫描的结果是? ;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是? 。

解答:前者为QACSQDFXRHMY,后者为FHCDQAMQRSYX;

  6.1)希尔排序,步长n,然后每次减半,直到最后为1。即 n/2 –>n/(2^2) –> n/(2^3) –> 1。比如当步长n=4时,那么步长依次减半,即 4 –> 2 –> 1。

  题目所给为4,因此,上来1,5,9号元素(即QQR)进行比较,在这三个位置上进行排序,即还是QQR

然后2,6,10号元素(即HAD)进行比较,在这三个位置上进行排序,即变成了ADH,

  依次排序后面的,即可获得QACSQDFXRHMY。

  6.2)快排,主要看排序时,从后往前和从前往后的比较过程中,加不加等号。

  以第一个元素为pivot,从后往前,遇到第一个比pivot小的,则换到前面,然后从前面开始往后遍历,遇到第一个比pivot大的则换到后面,此题答案对应的是没有等号的情况,即严格大才会换位置。

故为 FHCDQAMQRSYX

如图(1)所示:




图(1)希尔排序和快速排序,在第一次扫描时的详细过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: