当前位置:问答库>考研试题

2018年新疆维吾尔自治区培养单位新疆理化技术所408计算机学科专业基础综合之数据结构考研核心题库

  摘要

一、算法设计题

1. 设单链表的表头指针为h ,结点结构由data 和next 两个域构成,其中data 域为字符型。写出算法dc(h,n) ,判断该链表的前n 个字符是否中心对称。例如xyx ,xyyx 都是中心对称。

【答案】算法如下:

//h是带头结点的n 个字符元素的单链表,本算法判断链表是否中心对称

//i记下结点个数,s 是字符栈

//P是链表的工作指针,指向待处理的当前元素

//链表前一半元素入栈

//恢复最后的i 值

//若n 是奇数,后移过中心结点

//测试

是否中心对称

//链表中心对称

//链表不中心对称

//算法结束

2. 写出一趟快速排序算法。

【答案】算法如下:

一趟快速排序算法,枢轴记录到位,并返回其所在位置

3. 设要求按

是一个记录构成的数组,是一个整数数组,其值介于1〜100之间,现

的内容调整A 中记录的次序,比如当B[l]=ll 时,则要求将A[l]的内容调整到A[ll]

中去。规定可使用的附加空间为O(1)。

【答案】算法如下:

//A是100个记录的数组,B 是整型数组,本算法利用数组B 对A 进行计数排序

//若B[i]=i 则A[i]正好在自己的位置上,则不需要调整

//B[j]和B[k]交换

//r0是数组A 的元素类型,A[j]和A[k]

交换

//完成了一个小循环,第i 个已经安排好

//算法结束

4. 编写一算法,利用叶结点中的空指针域将所有叶结点链接为一个带有头结点的双链表,算法返回头结点的地址。

【答案】算法如下:

全局变量链表头指针

若bt 不空

中序遍历左子树

叶结点

第一个叶结点

生成头结点

头结点的左链空,右链指向第一个结点

第一个叶结点左链指向头结点,pre 指向当前叶结点

中序遍历右子树

最后一个叶结点的右链置空(链表结束标记

)

结束

当前叶结点链入双链表

树中的所有叶结点链成带头结点的双链表

5. 设有两个栈S 1,S 2都采用顺序栈方式,并且共享一个存储区的操作算法。

【答案】找的定乂:

两栈共享顺序存储空间所能达到的最多元素数

//假设元素类型为整型

; //栈空间

//top为两个栈顶指针

//S是如上定义的结构类型变量,为全局变量

(1)入栈操作:

为了尽量利用

空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S 1,S 2有关入栈和出找

//入栈操作。i 为栈号,i =〇表示左栈Sl ,i =l 表示右栈s2,x 是入栈元素。入栈成功返回1,否则返回

(2)出栈操作

//出栈算法。i 代表栈号,i =0时为s1栈,i =l 时为s2栈。出栈成功返回出栈元素,否则返﹣

1

//算法结束

二、应用题

6. 设输入序列为2,3,4,5,6,利用一个栈能得到序列2,5,3,4,6吗? 栈可以用单链表实现吗?

【答案】不能得到序列2,5,3,4,6。因为根据输入序列,2进桟之后,2出栈,3,4,5