数据结构与算法10
数据结构与算法复习题10(C语言版)
习9解答判断题: 1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。
答:FALSE (错。
链表表示的有序表不能用折半查找法。
)2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。
答:FALSE (错。
因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。
)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。
( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。
答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。
答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。
A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3 答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。
A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。
A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。
表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。
答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。
数据结构与算法 试题及答案
绪论一、填空题1、数据的逻辑结构是数据元素之间的逻辑关系,通常有下列4类:集合_、线性结构_、树型结构_、图状结构_。
2、数据的存储结构是数据在计算机存储器里的表示,主要有4种基本存储方法:顺序存储_、链式存储_、索引存储_、散列存储_。
二、选择题1、一个算法必须在执行有穷步之后结束,这是算法的(B )。
A、正确性B、有穷性C、确定性D、可行性2、算法的每一步必须有确切的定义,也就是说,对于每步需要执行的动作必须严格、清楚地给出规定,这是算法的(A)。
A、正确性B、有穷性C、确定性D、可行性3、算法原则上都是能够有机器或人所完成的。
整个算法好象是一个解决问题的“工作序列”,其中的每一步都是我们力所能及的一个动作,这是算法的(D)A、正确性B、有穷性C、确定性D、可行性三、简单题1、什么是数据结构?什么是算法?两者有什么关系?什么是数据结构?数据结构是按某种逻辑关系组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语言并按一定的存储表示方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合。
什么是算法?广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”两者有什么关系?算法与数据结构关系密切。
选择的数据结构是否恰当直接影响算法的效率;而数据结构的优劣由算法的执行来体现。
2、什么是复杂度和空间复杂度?时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。
3、数据的逻辑结构分几种?存储结构又有哪几种?数据的逻辑结构:结构定义中的“关系”,描述的是数据元素之间的逻辑关系;包括线性结构(线性表、栈、队、串、数组)和非线性结构(图形结构、树形结构);数据的存储结构(物理结构):数据结构在计算机中的表示(又称映像),包括数据元素的表示和关系德表示。
有顺序存贮(向量存贮)、链式存贮、索引存贮、散列存贮。
线性表1、一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5 个元素的地址是( B)。
源代码--数据结构与算法(Python版)chap10 排序
交换类
(2)快速排序 快速排序采用分而治之(Divide and Conquer)
的策略将问题分解成若干个较小的子问题,采用 相同的方法一一解决后,再将子问题的结果整合 成最终答案。快速排序的每一轮处理其实就是将 这一的基准数定位,直到所有的数都排序完成 为止。
21
快速排序的基本步骤:
1. 选定一个基准值(通常可选第一个元素); 2. 将比基准值小的数值移到基准值左边,形
14
• 交换类
交换类排序的基本思想是:通过交换无序序列 中的记录得到其中关键字最小或最大的记录,并将 其加入到有序子序列中,最终形成有序序列。交换 类排序可分为冒泡排序和快速排序等。
15
交换类
(1)冒泡排序 两两比较待排序记录的关键字,发现两
个记录的次序相反时即进行交换,直到没有 反序的记录为止。因为元素会经由交换慢慢 浮到序列顶端,故称之为冒泡排序。
3. 最后对这个组进行插入排序。步长的选法 一般为 d1 约为 n/2,d2 为 d1 /2, d3 为 d2/2 ,…, di = 1。
11
【例】给定序列(11,9,84,32,92,26,58,91,35, 27,46,28,75,29,37,12 ),步长设为d1 =5、d2 =3、 d3 =1,希尔排序过程如下:
for i in range(1,len(alist)):
#外循环n-1
for j in range(i,0,-1):
#内循环
if alist[j]<alist[j-1]:
alist[j],alist[j-1]=alist[j-1],alist[j] #交换
li=[59,12,77,64,72,69,46,89,31,9] print('before: ',li) insert_sort(li) print('after: ',li)
数据结构答案 第10章 排序学习与指导
第10章排序10.1 知识点分析1.排序基本概念:(1)排序将数据元素的任意序列,重新排列成一个按关键字有序(递增或递减)的序列的过程称为排序。
(2)排序方法的稳定和不稳定若对任意的数据元素序列,使用某个排序方法,对它按关键字进行排序,若对原先具有相同键值元素间的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;反之,则称为不稳定的。
(3)内排序整个排序过程都在内存进行的排序称为内排序,本书仅讨论内排序。
(4)外排序待排序的数据元素量大,以致内存一次不能容纳全部记录,在排序过程中需要对外存进行访问的排序称为外排序。
2.直接插入排序直接插入排序法是将一个记录插到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。
3.二分插入排序二分插入排序法是用二分查找法在有序表中找到正确的插入位置,然后移动记录,空出插入位置,再进行插入的排序方法。
4.希尔排序希尔排序的基本思想是:先选取一个小于n的整数d1作为第一个增量,把待排序的数据分成d1个组,所有距离为d1的倍数的记录放在同一个组内,在各组内进行直接插入排序,每一趟排序会使数据更接近于有序。
然后,取第二个增量d2,d2< d1,重复进行上述分组和排序,直至所取的增量d i=1(其中d i< d i-1 < ……< d2< d1),即所有记录在同一组进行直接插入排序后为止。
5.冒泡排序冒泡法是指每相邻两个记录关键字比大小,大的记录往下沉(也可以小的往上浮)。
每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此为止;到所有记录都不发生下沉时,整个过程结束。
6.快速排序快速排序法是通过一趟排序,将待排序的记录组分割成独立的两部分,其中前一部分记录的关键字均比枢轴记录的关键字小;后一部分记录的关键字均比枢轴记录的关键字大,枢轴记录得到了它在整个序列中的最终位置并被存放好。
第二趟再分别对分割成两部分子序列,再进行快速排序,这两部分子序列中的枢轴记录也得到了最终在序列中的位置而被存放好,并且它们又分别分割出独立的两个子序列……。
数据结构与算法各章试题
一、选择题1. 算法的计算量的大小称为计算的()。
A.效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于()A.问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(1),它必须具备(2)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性4.一个算法应该是()。
A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C.5. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是() (1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为()两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是()。
A.循环队列 B. 链表 C. 哈希表 D. 栈9.以下数据结构中,哪一个是线性结构()?A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串10.以下那一个术语与数据的存储结构无关?()】A.栈 B. 哈希表 C. 线索树 D. 双向链表11.在下面的程序段中,对x的赋值语句的频度为()】FOR i:=1 TO n DOFOR j:=1 TO n DOx:=x+1;A. O(2n) B.O(n) C.O(n2) D.O(log2n)12.程序段 FOR i:=n-1 DOWNTO 1 DOFOR j:=1 TO i DOIF A[j]>A[j+1]THEN A[j]与A[j+1]对换;其中 n为正整数,则最后一行的语句频度在最坏情况下是()A. O(n)B. O(nlogn)C. O(n3)D. O(n2) 】13.以下哪个数据结构不是多型数据类型()】A.栈 B.广义表 C.有向图 D.字符串14.以下数据结构中,()是非线性数据结构】A.树 B.字符串 C.队 D.栈15. 下列数据中,()是非线性数据结构。
数据结构与算法复习题10(C语言版)
习10解答判断题:1.排序的功能是将一个数据元素(或记录)的任意序列,重新排成一个按关键字有序的序列。
( )答:TRUE2.直接插入排序的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
( )答:TRUE3.使用简单选择排序方法无论记录的初始排列如何,所需进行的关键字间的比较次数相同。
( )答:TRUE4.用希尔(Shell)方法排序时,若关键字的初始排序杂乱无序,则排序效率就低。
()答:FALSE(希尔排序又称“缩小增量排序”,即每趟只对相同增量距离的关键字进行比较,这与关键字序列初始有序或无序无关)单选题:5.在对n个元素进行简单选择排序过程中,第i趟需从( )个元素中选择出最小值元素。
A.n-i+1 B. n-i C.i D. i+1答:A6. n个记录直接插入排序所需的记录最小比较次数是 ( )A. n-1B. 2(n-1)C. (n+2)(n-1)/2D. n答:A(注:如果初始记录序列就是一个符合要求的有序序列,则每趟操作只做一次比较,n-1趟操作仅需n-1次比较。
参见严蔚敏《(c语言版)数据结构》P.265) 7.若用起泡排序对关键字序列{18,16,14,12,10,8}进行从小到大的排序,所需进行的关键字比较总次数是()A.10 B. 15 C. 21 D. 34答:B (注:参见严蔚敏《(c语言版)数据结构》P.274, 此题所给的初始序列为“逆序”,需要进行n(n-1)/2 = 6×(6-1)/2 = 15次比较。
)8. 用起泡法对n个关键码排序,在最好情况下,只需做次比较;在最坏的情况下要做次比较。
答:n-1, n(n-1)/2 (注:参见严蔚敏《(c语言版)数据结构》P.273~274)9.在所有排序方法中,关键字比较次数与记录的初始排列无关的是( )。
A.希尔排序 B. 起泡排序 C. 插入排序 D.选择排序答:D10. 一组记录的关键字为(45,80,55,40,42,85),则利用堆排序的方法建立的初始堆为( )。
数据结构与算法课程设计计划书-2011-2012-2(10级).
计算机科学与工程学院集中性实践教学计划书( 2011-2012 学年第二学期课程名称:数据结构与算法课程设计专业:计算机科学与技术软件工程、网络工程班级:计算机科学与技术101-6软件工程101-4网络工程101-4课程负责人:李锡祚、王玲芬、李威指导教师分配情况:专业指导教师计算机科学与技术李威、李笑牛、张恒博、云健、刘爽、包书哲软件工程王玲芬、王鹏杰、王存睿、孙世昶、网络工程李锡祚、姜楠、王晓强、王波教学起止周:第1 至3 教学周一、教学目的与要求:数据结构与算法课程设计的目的是使同学们能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与算法基本知识和程序设计基本知识解决实际问题,培养基本的、良好的程序设计技能。
二、主要阶段、内容、时间及地点安排(以天为单位计:阶段与内容第1阶段:指导教师布置设计任务并解析有关题目的设计指标和任务的具体内容,学生选择题目,明确问题描述和要求,查阅资料。
(1天;各班长或学习委员将本班的选题表交给辅导教师,一人一题,每道题的选择人数原则上不能超过3人,第一天课程设计结束后,每名学生都要确定题目。
第2阶段:明确题目要求、确定数据结构、设计算法,编写程序、调试程序、测试程序(11天;第一周,学生应明确题目要求、确定数据的逻辑结构和存储结构、实现基本操作的编码与调试、实现主菜单。
第二周,完成核心算法的设计、编码与调试。
第三周,完成剩余任务的编码与调试,准备足够的测试数据,对软件进行测试与调试。
第3阶段:完成设计任务,准备验收、答辩(1天;第4阶段:答辩(上机演示,回答教师提问(1天;第5阶段:撰写课程设计报告(2天。
地点与时间地点:金石滩校区图书馆时间:计算机科学与技术:课程设计上机时间表周一周二周三周四周五第一周上午、下午上午第2大节、下午第二周上午、下午上午第2大节、下午第三周上午、下午上午第2大节、下午(验收软件工程:课程设计上机时间表周一周二周三周四周五第一周上午、下午上午、下午下午第二周上午、下午上午、下午下午第三周上午、下午上午、下午下午(验收网络工程:课程设计上机时间表周一周二周三周四周五第一周上午、下午上午下午上午第二周上午、下午上午下午上午第三周上午、下午上午下午上午(验收注:上午8:30~11:10下午1:40~4:20三、课程设计题目及具体要求:1.成绩管理问题描述:给出n个学生的考试成绩表,成绩表包括学生的学号、姓名、考试成绩(高等数学、英语、物理,设计一个简单的成绩管理程序。
数据结构与算法邓丹君课后题答案
数据结构与算法邓丹君课后题答案1.数据的运算描述是定义在数据的逻辑结构上的。
[判断题] *对(正确答案)错2.数据运算的实现是基于数据的逻辑结构的。
[判断题] *对错(正确答案)3.一个数据结构中,如果数据元素值发生改变,则它的逻辑结构也随之改变。
[判断题] *对错(正确答案)4.非线性结构中,每个元素最多只有一个前趋元素。
[判断题] *对错(正确答案)5.线性表中所有元素的数据类型必须相同。
[判断题] *对(正确答案)错6.线性表中的结点按前趋,后继关系可以排成一个线性序列。
[判断题] *对(正确答案)错7.线性表中每个元素都有一个前趋元素和一个后继元素。
[判断题] *对错(正确答案)8.线性表的长度是线性表占用的存储空间的大小。
[判断题] *对错(正确答案)9.线性表的逻辑顺序总与其物理顺序一致。
[判断题] *对错(正确答案)10.线性表的顺序存储结构优于链式存储结构。
[判断题] *对错(正确答案)11.顺序表具有随机存取特性,而链表不具有随机存取特性。
[判断题] *对(正确答案)错12.栈的定义不涉及数据的逻辑结构。
[判断题] *错(正确答案)13.栈和队列都是线性表,只是在插入和删除时受到了一些限制。
[判断题] *对(正确答案)错14.栈和队列都是限制存取端的线性表。
[判断题] *对(正确答案)错15.队列时一种对进队、出队操作的次序做了限制的线性表。
[判断题] *对错(正确答案)16.队列时一种对进队、出队操作的次数做了限制的线性表。
[判断题] *对错(正确答案)17.n个元素进队的顺序和出队的顺序总是一致的。
[判断题] *对(正确答案)错18.n个元素通过一个队列,其出队序列时唯一的。
[判断题] *对(正确答案)19.串是由有限个字符构成的序列。
() [判断题] *对(正确答案)错20.串中每个元素只能是字母。
[判断题] *对错(正确答案)21.一个串的长度至少为1. [判断题] *对错(正确答案)22.空串是只含有空格的串。
数据结构与算法复习题10(C语言版)讲课稿
数据结构与算法复习题10(C语言版)习题9解答判断题:1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。
答:FALSE (错。
链表表示的有序表不能用折半查找法。
)2.有n个数据放在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度不同。
答:FALSE (错。
因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL要比有序表的ASL小。
)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。
( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。
答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。
答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。
A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。
A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。
A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。
表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。
A .8 B. 3 C .5 D. 9答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。
数据结构第十、十一章:排序
14
9.2 交换排序
冒泡排序
排序过程
将第一个记录的关键字与第二个记录的关键字进行比较, 将第一个记录的关键字与第二个记录的关键字进行比较,若 为逆序r[1].key>r[2].key,则交换;然后比较第二个记录与 为逆序 ,则交换; 第三个记录;依次类推,直至第n-1个记录和第 个记录比较 个记录和第n个记录比较 第三个记录;依次类推,直至第 个记录和第 为止——第一趟冒泡排序,结果关键字最大的记录被安置在 第一趟冒泡排序, 为止 第一趟冒泡排序 最后一个记录上 对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的 个记录进行第二趟冒泡排序, 对前 个记录进行第二趟冒泡排序 记录被安置在第n-1个记录位置 记录被安置在第 个记录位置 重复上述过程,直到“ 重复上述过程,直到“在一趟排序过程中没有进行过交换记 录的操作” 录的操作”为止
按待排序记录所在位置
内部排序: 内部排序:待排序记录存放在内存 外部排序: 外部排序:排序过程中需对外存进行访问的排序
稳定排序和不稳定排序 假设Ki=Kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中Ri领先 假设 ( , , ),且在排序前的序列中 领先 ),且在排序前的序列中 于Rj(即i<j)。若在排序后的排序中Ri仍领先于 ,即那些具 ( )。若在排序后的排序中 仍领先于Rj, )。若在排序后的排序中 仍领先于 有相同关键字的记录,经过排序后它们的相对次序仍然保持不变, 有相同关键字的记录,经过排序后它们的相对次序仍然保持不变, 则称这种排序方法是稳定的;反之,若Rj领先于 ,则称所用的 则称这种排序方法是稳定的;反之, 领先于Ri, 领先于 方法是不稳定的。 方法是不稳定的。 按排序依据原则
4
例
《数据结构与算法》课后习题答案
2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。
(×)2.顺序存储的线性表可以按序号随机存取。
(√)3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
(×)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
(×)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
(√)7.线性表的链式存储结构优于顺序存储结构。
(×)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。
(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
(×)11.静态链表既有顺序存储的优点,又有动态链表的优点。
所以它存取表中第i个元素的时间与i无关。
(×)12.线性表的特点是每个元素都有一个前驱和一个后继。
(×)2.3.3 算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。
试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。
【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。
int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x) /*边找位置边移动*/{A[i+1]=A[i];i--;}A[i+1]=x; /*找到的位置是插入位的下一位*/(*elenum)++;return 1; /*插入成功*/}}时间复杂度为O(n)。
《数据结构与算法》第十章-排序习题
《数据结构与算法》第二部分习题精选一、填空题1. 大多数排序算法都有两个基本的操作:和。
2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较次。
(可约定为从后向前比较)3. 在插入和选择排序中,若初始数据基本正序,则选用;若初始数据基本反序,则选用。
4. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用;若初始记录基本无序,则最好选用。
5. 对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是。
若对其进行快速排序,在最坏的情况下所需要的时间是。
6. 对于n个记录的集合进行归并排序,所需要的平均时间是,所需要的附加空间是。
7.对于n个记录的表进行2路归并排序,整个归并排序需进行趟(遍),共计移动次记录。
二、单项选择题()1.将5个不同的数据进行排序,至多需要比较次。
A. 8 B. 9 C. 10 D. 25()2.排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为A. 希尔排序B. 冒泡排序C. 插入排序D. 选择排序()3.排序方法中,从未排序序列中挑选元素,并将其依次插入已排序序列(初始时为空)的一端的方法,称为A. 希尔排序B. 归并排序C. 插入排序D. 选择排序()4.对n个不同的排序码进行冒泡排序,在下列哪种情况下比较的次数最多。
A. 从小到大排列好的B. 从大到小排列好的C. 元素无序D. 元素基本有序()5.对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数为A. n+1 B. n C. n-1 D. n(n-1)/2 ()6.快速排序在下列哪种情况下最易发挥其长处。
A. 被排序的数据中含有多个相同排序码B. 被排序的数据已基本有序C. 被排序的数据完全无序D. 被排序的数据中的最大值和最小值相差悬殊()7.对有n个记录的表作快速排序,在最坏情况下,算法的时间复杂度是A.O(n) B.O(n2) C.O(nlog2n) D.O(n3)()8.若一组记录的排序码为(46, 79, 56, 38, 40, 84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为A. 38, 40, 46, 56, 79, 84 B. 40,38, 46 , 79, 56, 84C. 40, 38,46, 56, 79, 84 D. 40, 38,46, 84, 56, 79()9.在最好情况下,下列排序算法中排序算法所需比较关键字次数最少。
计算机专业基本数据结构与算法10分钟试讲课件
2.线性表的顺序存储结构 线性表的顺序存储结构具有以下基本特点: (1)线性表中所有元素所占的存储空间 是连续的。 (2)线性表中各元素在存储空间中是按 逻辑顺序依次存放的。 由此可以看出,在线性表的顺序存储结构 中,其前后件两个元素在存放空间中是紧 邻的,且前件元素一定存储在后件元素的 后面。 3.线性表的插入、删除运算
3)、有穷性:算法必须能执行有限个步 骤之后终止. 4)、有零个或多个输入、有一个或多 个输入 综上所述,算法是一个严谨地定义运算 顺序的规则,并且每一个规则都是有效 的、明确的,此顺序将在有限的次数终 止。
2.算法复杂度 算法的复杂度主要包括时间复杂度和空间复
杂度。 1)算法的时间复杂度
算法的时间复杂度是指执行算法所需要的 工作量。算法的工作量用算法执行的基本运算次 数来度量。 2)算法的空间复杂度
一般来说,一种数据的逻辑结构根据 需要可以表示成多种存储结构,常用 的存储结构有顺序、链接、索引等。 而采用不同的存储结构,其数据处理 的效率是不同的,因此,在进行数据 处理时,选择合适的存储结构是很重 要的。
2.数据结构的图形表示
一个数据结构除了用二元关系表示外, 还可以用直观的图形表示。在数据结构 的图形表示中,对于数据集合中的每一 个数据元素用中间标有值的方法方框表 示,一般称为数据结点,并简称为结点。 为了进一步表示个数据元素之间的前后 关系,对于关系中的每一个元组,用一 条有向线段从前件结点指向后件接点。
三、线性表及其顺序存储结构
1.线性表的基本概念
线性表是由n(n>=0)个数据元素a1,a2,a3,…an 组成的一个有限序列,表中的每一个数据元素, 除了第一个外,有且仅有一个前件,有且仅有 一个后件,或者可以表示为 ( a1,a2,a3,…an)。 其中a1,a2,a3,…an是数据元素,通常也称为线 性表的结点。
数据结构与算法习习题及答案
欢迎阅读第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。
(2(3A(4ABCD(5(66(1(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3(4(5(61(1()。
A(2ABCD(3个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的A(4ABCD(5AC(6)线性表L在()情况下适用于使用链式结构实现。
A.需经常修改L中的结点值B.需不断对L进行删除插入C.L中含有大量的结点D.L中结点结构复杂(7)单链表的存储密度()。
A.大于1 B.等于1 C.小于1 D.不能确定(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.n B.2n-1 C.2n D.n-1(9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i(10) 线性表L=(a1,a2,……a n),下列说法正确的是()。
A.每个元素都有一个直接前驱和一个直接后继B.线性表中至少有一个元素C.表中诸元素的排列必须是由小到大或由大到小D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。
智慧树知到《数据结构与算法》章节测试答案
智慧树知到《数据结构与算法》章节测试答案第一章1、在数据结构中,从逻辑上可以把数据结构分成()。
A:紧凑结构和非紧凑结构B:线性结构和非线性结构C:内部结构和外部结构D:动态结构和静态结构正确答案:线性结构和非线性结构2、在数据结构中,从存储结构上可以将之分为()。
A:动态结构和静态结构B:顺序存储和非顺序存储C:紧凑结构和非紧凑结构D:线性结构和非线性结构正确答案:顺序存储和非顺序存储3、某算法的时间复杂度是O(n^2),表明该算法的()。
A:执行时间与n^2成正比B:问题规模是n^2C:执行时间等于n^2D:问题规模与n^2成正比正确答案:执行时间与n^2成正比4、在下面的程序段中,x=x+1;的语句频度为()。
for( i=1;i<=n;i++) for( j=1;j<=n;j++) x=x+1;A:O(2n)B:O(n)C:O(n^2)D:O(log2n)正确答案:O(n^2)5、以下数据结构中,()是非线性数据结构。
A:树B:字符串C:队D:栈正确答案:树6、顺序存储,存储单元的地址()。
A:一定连续B:一定不连续C:不一定连续D:部分连续,部分不连续正确答案:一定连续7、评价一个算法性能好坏的重要标准是( )。
A:算法的正确性B:算法易于调试C:算法的时间和空间复杂度D:算法易于理解正确答案:算法的时间和空间复杂度8、若需要利用形式参数直接访问修改实参值,则应将形参说明为()参数。
A:值参数B:实地址C:指针D:地址参数正确答案:指针9、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
A:对B:错正确答案:错10、数据结构中评价算法的两个重要指标是算法的时间复杂度和空间复杂度。
A:对B:错正确答案:对第二章1、下述哪一条是顺序存储结构的优点()。
A:可方便地用于各种逻辑结构的存储表示B:插入运算方便C:删除运算方便D:存储密度大正确答案:存储密度大3、设某顺序表中第一个元素的地址是se(下标从1开始),每个结点占m个单元,则第i个结点的地址为()。
严蔚敏版《数据结构(C语言版)》-内部排序-第10章
high=mid-1 ; else low=mid+1 ;
}
/* 查找插入位置 */
for (j=i-1; j>=high+1; j--)
L->R[j+1]=L->R[j];
L->R[high+1]=L->R[0]; /* 插入到相
应位置 */
}
}
从时间上比较,折半插入排序仅仅减少了关键字的 比较次数,却没有减少记录的移动次数,故时间复杂度 仍然为O(n2) 。
待排序的记录类型的定义如下:
#define MAX_SIZE 100
Typedef int KeyType ;
typedef struct RecType
{ KeyType key ;
/* 关键字码 */
infoType otherinfo ; /* 其他域 */
}RecType ;
typedef struct Sqlist
③ 记录存储在一组连续地址的存储空间:构造另一 个辅助表来保存各个记录的存放地址(指针) :排序 过程不需要移动记录,而仅需修改辅助表中的指针, 排序后视具体情况决定是否调整记录的存储位置。
①比较适合记录数较少的情况;而②、③则适合 记录数较少的情况。
为讨论方便,假设待排序的记录是以①的情况存 储,且设排序是按升序排列的;关键字是一些可直接用 比较运算符进行比较的类型。
(n-1)(n+1)
2
移动次数:∑n (i+1)=
i=2
(n-1)(n+4)
2
一般地,认为待排序的记录可能出现的各种排列的
概率相同,则取以上两种情况的平均值,作为排序的关
智慧树知道网课《数据结构与算法(仲恺农业工程学院)》课后章节测试满分答案
第一章测试1【单选题】(10分)在数据结构中,从逻辑上可以把数据结构分为()两类。
A.紧凑结构和非紧凑结构B.线性结构和非线性结构C.动态结构和静态结构D.内部结构和外部结构2【单选题】(10分)数据的逻辑结构是()关系的整体。
A.数据项之间逻辑B.数据类型之间C.存储结构之间D.数据元素之间逻辑3【单选题】(5分)在计算机的存储器中表示数据时,物理地址和逻辑地址的相对位置相同并且是连续的,称之为()。
A.链式存储结构B.逻辑结构C.顺序存储结构4【单选题】(5分)在链式存储结构中,通常一个存储节点用于存储一个()。
A.数据元素B.数据项C.数据结构D.数据类型5【单选题】(5分)数据运算的执行()。
A.是根据存储结构来定义的B.必须用程序设计语言来描述C.效率与采用何种存储结构有关D.有算术运算和关系运算两大类6【单选题】(5分)数据结构在计算机内存中的表示是指()。
A.数据的逻辑结构B.数据的存储结构C.数据元素之间的关系D.数据结构7【单选题】(10分)在数据结构中,与所使用的计算机无关的是()。
A.存储结构B.物理结构C.逻辑结构和存储结构D.逻辑结构8【单选题】(10分)数据采用链式存储结构存储,要求()。
A.所有节点占用一片连续的存储区域B.节点的最后一个数据域是指针类型C.每个节点占用一片连续的存储区域D.每个节点有多少个后继,就设多少个指针域9【单选题】(10分)下列说法中,不正确的是()。
A.数据项是数据中不可分割的最小可标识单位B.数据项可由若干个数据元素构成C.数据可由若干个数据元素构成D.数据元素是数据的基本单位10【单选题】(5分)以下()不是算法的基本特性。
A.确定性B.长度有限C.可行性D.在确定的时间内完成11【单选题】(5分)在计算机中算法指的是解决某一问题的有限运算序列,它必须具备输人、输出、()。
A.可行性、有穷性和确定性B.易读性、稳定性和确定性C.可行性、可移植性和可扩充性D.确定性、有穷性和稳定性12【单选题】(5分)下面关于算法的说法正确的是()。
数据结构与算法复习题库含答案
数据结构复习题第一章概论一、选择题1、研究数据结构就是研究( D )。
A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是( A )。
A. 空间复杂度和时间复杂度 B. 正确性和简单性C. 可读性和文档性 D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。
A. 图B. 树C. 广义表D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。
A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是( C )。
fori0;im;i++forj0;jn;j++a[i][j]i*j;A. Om2B. On2C. Om*nD. Om+n6、算法是( D )。
A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。
A. OnB. Onlog2nC. On2D. Olog2n8、下面程序段的时间复杂度为( C )。
i1;whileinii*3;A. OnB. O3nC. Olog3nD. On39、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的( B )和运算等的学科。
A. 结构B. 关系C. 运算D. 算法10、下面程序段的时间复杂度是( A )。
is0;whilesni++;s+i;A. OnB. On2C. Olog2nD. On311、抽象数据类型的三个组成部分分别为( A )。
A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是(D)。
数据结构与算法(10):查找
× (high − low)
也就是将上述的比比例例参数1/2改进为自自适应的,根据关键字在整个有序表中所处的位置,让mid值 的变化更更靠近关键字key,这样也就间接地减少了了比比较次数。
基本思想:基于二二分查找算法,将查找点的选择改进为自自适应选择,可以提高高查找效率。当然, 插值查找也属于有序查找。
if __name__ == '__main__': LIST = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444] result = binary_search(LIST, 444) print(result)
3.3 斐波那契查找
在介绍斐波那契查找算法之前,我们先介绍一一下和它很紧密相连并且大大家都熟知的一一个概念—— ⻩黄金金金分割。 ⻩黄金金金比比例例又又称为⻩黄金金金分割,是指事物各部分间一一定的数学比比例例关系,即将整体一一分为二二,较大大部 分与较小小部分之比比等于整体与较大大部分之比比,其比比值约为1:0.618。 0.618倍公认为是最具有审美意义的比比例例数字,这个数值的作用用不不仅仅体现在诸如绘画、雕塑、 音音乐、建筑等艺术领域,而而且在管理理、工工程设计等方方面面有着不不可忽视的作用用。因此被称为⻩黄金金金分 割。 大大家记不不记得斐波那契数列列:1,1,2,3,5,8,13,21,34,55,89......(从第三个数开 始,后面面每一一个数都是前两个数的和)。然后我们会发现,随着斐波那契数列列的递增,前后两个 数的比比值会越来越接近0.618,利利用用这个特性,我们就可以将⻩黄金金金比比例例运用用到查找技术中。
算法与数据结构考研试题精析(第二版)第10章 排序
第10章排序一、选择题1.某内排序方法的稳定性是指( )。
【南京理工大学 1997 一、10(2分)】A.该排序算法不允许有相同的关键字记录 B.该排序算法允许有相同的关键字记录C.平均时间为0(n log n)的排序方法 D.以上都不对2.下面给出的四种排序法中( )排序法是不稳定性排序法。
【北京航空航天大学 1999 一、10 (2分)】A. 插入B. 冒泡C. 二路归并D. 堆积3.下列排序算法中,其中()是稳定的。
【福州大学 1998 一、3 (2分)】A. 堆排序,冒泡排序B. 快速排序,堆排序C. 直接选择排序,归并排序D. 归并排序,冒泡排序4.稳定的排序方法是()【北方交通大学 2000 二、3(2分)】A.直接插入排序和快速排序 B.折半插入排序和起泡排序C.简单选择排序和四路归并排序 D.树形选择排序和shell排序5.下列排序方法中,哪一个是稳定的排序方法?()【北方交通大学 2001 一、8(2分)】A.直接选择排序 B.二分法插入排序 C.希尔排序 D.快速排序6.若要求尽可能快地对序列进行稳定的排序,则应选(A.快速排序 B.归并排序 C.冒泡排序)。
【北京邮电大学 2001 一、5(2分)】7.如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。
()就是不稳定的排序方法。
【清华大学 1998 一、3 (2分)】A.起泡排序 B.归并排序 C.Shell排序 D.直接插入排序 E.简单选择排序8.若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选()排序为宜。
A.直接插入 B.直接选择 C.堆 D.快速 E.基数【中科院计算所 2000 一、5(2分)】9.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。
A. 快速排序B. 堆排序C. 归并排序D. 直接插入排序【中国科技大学 1998 二、4(2分)】【中科院计算所 1998 二、4(2分)】10.下面的排序算法中,不稳定的是()【北京工业大学 1999 一、2 (2分)】A.起泡排序B.折半插入排序C.简单选择排序D.希尔排序E.基数排序F.堆排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预定义
main() { int n,m,i,*w,*p; hufftree *ht,*q; huffcode *hc,*r; printf("please input the counter of the word\n"); scanf("%d",&n); getchar(); m=2*n-1; w=(int*)malloc(m*sizeof(int)); ht=(hufftree*)malloc(m*sizeof(hufftree)); printf("please input word and its weight one by one\n\n\n"); for(i=0,p=w,q=ht;i<n;i++,p++,q++) { printf("please input word and its weight\n"); q->code=getchar(); scanf("%d",p); getchar(); } 主函数1
AVL树的插入运算
• 情况三:q插在s的较高的子树上
• 情形3.1:LL旋转 • q插在s的左孩子的左子树上,设r是s的左孩子,这时,由 于以s为根的子树的平衡性被破坏,需用LL旋转重新恢复 二叉树的平衡性
• 将r的右孩子改为s的左子树,再使s成为r的右孩子,并将s 的平衡因子修正为0。r是新子树的根,他的平衡因子是0。
void change(hufftree *ht,huffcode *hc,int n) { 检验哈夫曼编码 char c[10]; int i,sign; huffcode *p; printf("if want to examine please input 1,else input 0\n"); scanf("%d",&sign); getchar(); while(sign) { printf("please input the code you want to examine:\n"); gets(c); for(i=0,p=hc;i<n;i++,p++) if(!strcmp(c,*p)) break; if(i>=n) printf("the code has fault!\n"); else printf("the word to the code is: %c\n",(ht+i)->code); printf("if want to coutinue examining please input 1,else input 0\n"); scanf("%d",&sign); getchar(); } }
hcode(ht,w,n); output(ht,n); hc=(huffcode*)malloc(m*sizeof(huffcode)); huffc(ht,hc,n); printf("the code is:\n"); for(i=0,q=ht,r=hc;i<n;i++,q++,r++) printf("%c %s\n",q->code,*r); change(ht,hc,n); }
主函数2
void hcode(hufftree *ht,int *w,int n)/*哈夫曼树*/ { int i,m,s[2]; hufftree *p; m=2*n-1; for(i=0,p=ht;i<n;i++,p++,w++) { p->weight=*w; p->parent=p->lchild=p->rchild=0; } for(;i<m;i++,p++) p->weight=p->parent=p->lchild=p->rchild=0; for(i=n;i<m;i++) { select(ht,i,s); (ht+s[0])->parent=i; (ht+s[1])->parent=i; (ht+i)->code='*',(ht+i)->lchild=s[0]; (ht+i)->rchild=s[1]; (ht+i)->weight=(ht+s[0])->weight+(ht+s[1])->weight; } }
LR双旋的情况
-1 1
2
插入一结点,A点不平衡
先右旋
原来的AVL树
再左旋
RL双旋的情况
-1
-2 1
先左旋
原来的AVL树
-1
插入一结点,A点不平衡 再右旋
AVL树的删除运算
• AVL树与二叉搜索树的删除运算是类似的。惟一的不同之 处是,在AVL树中执行1次二叉搜索树的删除运算,可能会 破坏AVL树的高度平衡性质,因此需要重新平衡。 • 设被删除结点为q,其惟一的儿子结点为v。结点q被删除后, 结点v取代了它的位置。从根结点到结点v的路径上,每个 结点处删除运算所进入的子树高度可能减1。因此在执行1 次二叉搜索树的删除运算后,需从结点v开始,沿此删除路 径向根结点回溯,修正平衡因子,调整子树高度,恢复被 破坏的平衡性质。
• 情形1:插入前,从根结点到新结点q的插入位置的路径上, 所有结点的平衡因子均为0,则插入后,须依次改变所经 过结点的平衡因子,并且将树的高度加1,插入操作即完 成。
• 情形2:若新结点q插在结点s较矮的子树上(s的平衡因子 BF为-1,并假定q插在s的左子树上),则插入后需令s的 平衡因子BF为0,插入算法即完成。
FILE *fp; fp=fopen(“xxx.txt”, “r”); For(…) { fscanf(fp, “%s”, variable1); fscanf(fp, “%d”, variable2); } Fclose(fp); FILE *fp; Fp=fopen(“xxx.txt”, “w”); For(…) { fprintf(fp, “%s”, variable1); fprintf(fp, “%d”, variable2); } Fclose(fp);
数据结构与算法
2
二叉平衡树
• 二叉平衡树又称AVL树,其或者是一棵空二叉树,或者是 具有下列性质的二叉树: ▫ 它的左,右子树高度之差的绝对值不超过1 ▫ 它的左,右子树都是二叉平衡树 • 二叉树结点的平衡因子:该结点的左子树的高度减去右子 树的高度。二叉平衡树的所有结点的平衡因子只可能是-1 ,0,1
AVL树的插入运算
• 插入一个新结点,势必会影响从根到新结点的路径上所有 结点的平衡因子值。如果新结点插在这条路径上某结点的 左子树上,那么该结点的平衡因子加1,否则减1。 • 如果插入前从根结点到新结点的插入位置的路径上所有结 点的平衡因子均为0,那么插入后这个树依然是二叉平衡 树,且整棵树的高度加1。 • 如果某个结点的平衡因子不为0,但自它而下直至新结点 的所有结点的平衡因子都为0。那么,插入新结点后,以 结点s为根的子树将是有可能不平衡的最小子树。
AVL树的删除运算
• P是被删除结点q的父节点,同时增加一个bool变量shorter 用来记录对双亲平衡性的影响
• 情况一: p的平衡因子为0 • 从p的子树上删除结点后,该子树二: 从p的较高的子树上删除一个结点 • 从p的较高的子树上删除一个结点后,该子树变矮,以p为 根的子树也随之变矮,但该子树本身仍是平衡树。一方面, 应将p的平衡因子置0,另一方面应继续考虑以p的双亲为 根的子树的平衡问题
void huffc(hufftree *ht,huffcode *hc,int n) { char *cd; int i,start,c,f; cd=(char*)malloc(n*sizeof(char)); *(cd+n-1)='\0'; for(i=0;i<n;i++) { start=n-1; for(c=i,f=(ht+i)->parent;f!=0;c=f,f=(ht+f)->parent) if((ht+f)->lchild==c) *(cd+(--start))='0'; else *(cd+(--start))='1'; *(hc+i)=(char*)malloc(n*sizeof(char)); strcpy(*(hc+i),cd+start); } free(cd); }
文件的读与写1
#include <fstream> ifstream infile; infile.open("FH_5_3tache_init1.txt"); for(i=0;i<N;i++) { infile>>tache1[i].ID ; for(j=0;j<Stage;j++) { infile>>tache1[i].Processing_time[j]; } for(j=0;j<Stage;j++) { infile>>tache1[i].Release_date[j]; } infile>>tache1[i].Due_date; } infile.close();
void select(hufftree *p,int j,int *s)/*查找j以前的两个权值最小的元素*/ { int i,m,n,mid,t; hufftree *q; m=n=MAX;/*m中存放最小,n的中存放次小的*/ for(i=0,q=p;i<j;i++,q++) if(q->parent==0) { if(q->weight<m) { mid=m; m=q->weight; n=mid; t=*s; *s=i; *(s+1)=t; }/*若找到最小的则交换*/ else if(q->weight<n) { n=q->weight; *(s+1)=i;} } }