数据结构基础题(第一篇)
2015-09-05 11:44
344 查看
1)阅读下列函数说明和C代码,将应填进(n)处的字句写在答题纸的对应栏内。
【说明】设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向先驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0.每当在链表上进行一次L.Locate(x)操纵时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
解答如下:
(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)希尔排序和快速排序,在第一次扫描时的详细过程
【说明】设有一个带表头结点的双向循环链表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)希尔排序和快速排序,在第一次扫描时的详细过程
相关文章推荐
- 数据结构 - 指针,数组,结构体
- 数据结构之反黄牛火车票订票系统
- 数据结构在软件编程中的地位
- 单链表的基本操作-数据结构
- PTA 数据结构与算法题目集 5-1 最大子列和问题
- 2014找工作总结-机会往往留给有准备的人
- 数据结构学习之直接插入排序
- 数据结构--图的相关操作实现
- 数据结构学习之选择排序
- 数据结构之单链表 C++实现
- 中国大学MOOC-陈越、何钦铭-数据结构 Maximum Subsequence Sum
- 【数据结构】图
- 数据结构必须掌握 栈---压栈和出栈
- Android开发中高效的数据结构用SparseArray代替HashMap
- 2015.09.04 数据结构笔记
- 堆数据结构
- 数据结构---数组(5)
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 数据结构学习之路-第二章:一元多项式的表示及相加
- 半边数据结构及其使用