知识大全 数据结构考研分类复习真题 第十章 答案[48]
Posted 结点
篇首语:老板给了我份说炒就炒的鱿鱼,我给了板来了份说滚就滚的旅行。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第十章 答案[48]相关的知识,希望对你有一定的参考价值。
[题目分析]根据定义 DEAP是一棵完全二叉树 树根不包含元素 其左子树是一小堆(MINHEAP 下称小堆) 其右子树是一大堆(MAXHEAP 下称大堆) 故左右子树可分别用一维数组l[]和r[]存储 用m和n分别表示当前两完全二叉树的结点数 左右子树的高度差至多为 且左子树的高度始终大于等于右子树的高度
我们再分析插入情况 当均为空二叉树或满二叉树(m= h )时 应在小堆插入 小堆满(二叉树)后在大堆插入 即当m>=n且m<> h 且ëlog mû ëlog nû<= 在小堆插入 否则在大堆插入
最后分析调堆情况 在小堆m处插入结点x后 若x的值不大于大堆的m/ 结点的值 则在小堆调堆 否则 结点x与大堆的m/ 结点交换 然后进行大堆调堆 在大堆n处插入结点x后 若x不小于小堆的n结点 则在大堆调堆 否则 结点x与小堆的n结点交换 然后进行小堆调堆
在DEAP中插入结点 后的结果如图
先插入到大堆 因为 小于小堆中对应位置的 所以和 交换 交换后只需调整小堆 从叶子到根结点 这时 大堆不需调整 因为插入小堆 时 要求 必须小于对应大堆双亲位置的 否则 要进行交换
void InsertDEAP(int l[] r[] m n x) //在DEAP中插入元素x l[]是小堆 r[]是大堆 m和n分别是两堆的元素个数 x是待插入元素 if (m>=n && m<> h && ëlog mû ëlog nû<= )// 在小堆插入x h是二叉树的高度 m++; //m增 if (x>r[m/ ]) //若x大于大堆中相应结点的双亲 则进行交换 l[m]=r[m/ ]; c=m/ ; f=c/ ; while (f> && r[f]<x) //调大堆 r[c]=r[f]; c=f; f=c/ ; r[c]=x; //结束调大堆 else //调小堆 c=m; f=c/ ; while (f> && l[f]>x) l[c]=l[f]; c=f; f=c/ ; l[c]=x; else //在大堆插入x n++; //n增 if (x<l[n]) //若x小于小堆中相应结点 则进行交换 r[n]=l[n]; c=n; f=c/ ; while (f> && l[f]>x) //调小堆 l[c]=l[f]; c=f; f=c/ ; l[c]=x; //结束调小堆 else //调大堆 c=n; f=c/ ; while (f> && r[f]<x) r[c]=r[f]; c=f; f=c/ ; r[c]=x; //结束InsertDEAP算法
cha138/Article/program/sjjg/201311/23171相关参考
第章排序答案 一选择题 DDDBBBCEACCDFDCADFB(ACF)(BDE)CDABDDDCAACCBCCACDCBCBDDADAAACBCCBABACBDDDDCEGBCCBBACAD
cha138/Article/program/sjjg/201311/23202
typedefstructnode ElemTypedata; structnode*prior*next; node*DLinkedList; void TwoWa
()冒泡排序(HCQPAMSRDFXY) ()初始步长为的希尔排序(PACSQDFXRHMY) ()二路归并排序(HQCYAPMSDRFX) ()快速排序(FHCDPAMQRSYX) 初始
加()%()=个虚段 总读写次数为*wpl=次 类似叙述()()()略cha138/Article/program/sjjg/201311/23190
PROCEDURE StraightInsertSort(VARR:listtype;n:integer); VARij:integer; BEGIN FORi:=TOnDO&nb
二判断题 √××××××××××××√√×××××××××√×√×××√ 部分答案解释如下 错误例如冒泡排序是稳定排序将按冒泡排序排成升序序列第一趟变成此时就朝向最终位置的相反方向移动 错
typedefstruct intnum;floatscore;RecType; voidSelectSort(RecTypeR[]intn) for(i=;i<n;i++) //选
建立堆结构: () () ()
voidBiInsertSort(RecType R[]intn) //二路插入排序的算法 intd[n+];