2017年青岛农业大学数据结构(加试)考研复试核心题库
● 摘要
一、应用题
1. 如果两个串含有相等的字符,能否说它们相等?
【答案】仅从两串含有相等的字符,不能判定两串是否相等,两串相等的充分必要条件是两串长度相等且对应位置上的字符相同(即两串串值相等)。
2. 用单链表保存m 个整数,节点的结构为(data , link ), 且点而删除其余绝对值相等的节点。
例如若给定的单链表head 如下
删除节点后的head 为
要求
(1)给出算法的基本思想 (2)使用c 或
语言,给出单链表节点的数据类型定义。
语言描述算法,关键之处给出注释。
(3)根据设计思想,采用c 或【答案】(1)算法思想:
定义一个大小为n 的布尔数组flag ,初始时所有的元素都赋值为false , 用来标识遍历过程中是否出现元素绝对值为flag 的节点。然后遍历链表,遍历过程中,每一个当前结点data 域的绝对值,则将flag 位置为真(true )所对应的flag 位:若为真,则删除该结点;若为假(false )。
(2)节点的数据结构定义如下:
(3)
全局数组标志节点的绝对值是否出现过
(n 为正整数)。现要求
设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节
(4)说明所涉及算法的时间复杂度和空间复杂度。
则删除该节点
如果此绝对值已经在节点值的绝对值中出现过
否则,将flag 中对应的位置置为true ,并将指针指向下一个元素
,申请大小(4)只遍历一次链表,所以时间复杂度为0 (m ) (m 为单链表中元素的个数)
为n 的数组,所以空间复杂度为0 (n ) (n 为节点绝对值的最大值)。
3. 设度为m 的树采用多重链表存储,毎个结点有m+1个域,其中有1个数据域,m 个指向孩子的指针。 则空指针的数目是多少?说明这种存储方式的利弊。
【答案】(1)空指针数目:n (n>0)个结点的m 度树共有nm 个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有nm-(n-1)=n(m-l )+1个。
(2)利弊:这种存储结构统一,便于处理但空链域造成存储效率低。
4. 将下列出三棵树组成的森林转换为二叉树(只要求给出转换结果)。
图1
【答案】森林转换为二叉树分以下三步:
(1)连线(将兄弟结点相连,各树的根看作兄弟)。
(2)切线(保留最左边子女为独生子女,将其他子女分支切掉)。 (3)旋转(以最左边树的根为轴. 顺时针向下旋转45度)。 所以由上面三棵树转换得到的二叉树如图2所示:
图2
5. 在二叉树的Llink-Rlink 存储表示中,引入“线索”的好处是什么?
【答案】在二叉链表表示的二叉树中,引入线索的目的主要是便于査找结点的前驱和后继,因为若知道各结点的后继,二叉树的遍历就非常简单。利用二叉链表结构查结点的左右子女非常方便. 但其前驱和后继是在遍历中形成的。为了将非线性结构二叉树的结点排成线性序列,利用结点的空链域,左链为空时作为前驱指针,右链为空时作为后继指针。再引入左右标记ltag 和rtag ,规定:当ltag=0时,lchild 指向左子树,当ltag=1时,lchild 指向前驱:当rtag=0时,rchild 指向右子树,当rtag=l时,rctiild 指向后继。这样,在线索二叉树(特别是中序线索二叉树)上遍历就消除了递归,也不使用栈(利用后序线索二叉树査后扔继续要栈)。
6. 设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略?
【答案】(1)首次适配法
从链表头指针开始查找,找到第一个大于等于所需空间的结点即分配。首次适配法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表头。
(2)最佳适配法
链表结点大小增序排列,找到第一个大于等于所需空间的结点即分配。最佳适配法适用于请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以利用的内存碎片,同时保留那些很大的内存块以备将来可能发生的大内存量的需求,分配与回收均需查询。
(3)最差适配法
链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空间插入到链表适当位置。最差适配法适合请求分配内存大小范围较窄的系统,分配时不查询,回收时查询,以便插入适当位置。
相关内容
相关标签