湖南大学(867)数据结构笔记
湖南大学数据结构实验

HUNAN UNIVERSITY数据结构实验报告题目:实验5四则运算表达式求值学生姓名谢毅学生姓名冯吉禹学生姓名吕志远学生学号20110806109学生学号20110806110学生学号20110806114专业班级信息安全1101班指导老师夏艳完成日期2013 年04 月 19日一.需求分析1、利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值。
2、输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。
输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
输入:21+23*(12-6)输出:21 23 12 6 -*+一.概要设计抽象数据类型1.使用二叉树来实现2.本程序包含四个基本模块①主程序模块:建树的过程②没有括号时的输入③有括号时的输入○4后序输出三﹑算法(C++)物理数据类型建树的时候对于优先级比较高的符号最为子结点插入,对于优先级比较低的则作为父结点插入,数据直接插入在字符的左右子结点位置。
/*问题描述四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。
基本要求使用二叉树来实现。
实现提示利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值。
输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。
输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。
*/#include<iostream.h>#include <stdio.h>/*二叉树的节点类*/class Node{public:int num;//元素char c;//操作符Node* lc;//左指针Node* rc;//右指针Node* pa;//父指针Node(int num,Node* lc=NULL,Node* rc=NULL){this->num=num;this->lc=lc;this->rc=rc;}Node(char c,Node* lc=NULL,Node* rc=NULL){this->c=c;this->lc=lc;this->rc=rc;}bool isLeaf(){return (lc==NULL)&&(rc==NULL);}};void Nomal(char &t,char &c,Node* &one,Node* &two);//正常输入void UNomal(char &t,char &c,Node* &one,Node* &two);//带括号输入void BHVisit(Node* root);/*二叉树类*/class TwoTree{private:Node* root;//根节点Node* present;//当前表达式节点public:TwoTree(){root=NULL;present=root;}Node* getroot(){return root;}bool gt(Node* two,Node* present)//比较优先级的函数{char ct=two->c;char cp=present->c;if(ct=='*'||ct=='/')if(cp=='+'||cp=='-')return true;return false;}void insert(Node* one,Node* two=NULL)//向插入的方法{cout<<" 要插入了 "<<one->num<<" "<<two->c<<endl;if(root==NULL){root=two;root->lc=one;one->pa=root;present=root;return;}if(two->c=='\n'){present->rc=one;one->pa=present;return;}if(gt(two,present))//如果输入的操作符的优先等级大于当前指针的优先级{two->lc=one;one->pa=two;present->rc=two;two->pa=present;present=two;return;}present->rc=one;while(!gt(two,present)&&present!=root)//如果输入的操作符的优先等级不大于当前指针的优先级{present=present->pa;//指向父节点}if(gt(two,present))//如果输入的操作符的优先等级大于当前指针的优先级{two->lc=present->rc;present->rc->pa=two;present->rc=two;two->pa=present;present=two;return;}else{two->lc=present;present->pa=two;root=two;present=two;}}};void main(){TwoTree tt;Node* root;Node* one;Node* two;char c,t;int index=0;cout<<"请输入一个中缀表达式"<<endl;while(1){t=getchar();cout<<t<<endl;if(t!='(')Nomal(t,c,one,two);elseUNomal(t,c,one,two);tt.insert(one,two);if(c=='\n')break;}root=tt.getroot();BHVisit(root);return;}void Nomal(char &t,char &c,Node* &one,Node* &two) {int num;num=t-'0';cout<<num<<"--------"<<endl;c=getchar();one=new Node(num);two=new Node(c);}void UNomal(char &t,char &c,Node* &one,Node* &two) {int num;TwoTree ttp;while(1){t=getchar();num=t-'0';cout<<num<<"+++++++++++"<<t<<endl;c=getchar();if(c==')'){char cp='\n';c=getchar();one=new Node(num);two=new Node(cp);ttp.insert(one,two);break;}one=new Node(num);two=new Node(c);ttp.insert(one,two);}one=ttp.getroot();two=new Node(c);}void BHVisit(Node* root)//后序遍历函数{if(root==NULL)return;BHVisit(root->lc);BHVisit(root->rc);if(root->isLeaf())cout<<root->num<<" ";elsecout<<root->c<<" ";}六.算法的时间复杂度:整个程序的时间复杂度是O(n).七.实验心得谢毅:本次实验相对上次实验来说难度提升比较大,刚开始的时候觉得无从下手,后来翻阅了书上的关于树的内容,并且和同学们经过了讨论,终于想出了这次实验的建树方式。
数据结构详细笔记

数据结构详细笔记数据结构是计算机科学中非常重要的一个概念,它可以帮助我们更有效地组织和管理数据。
在本文中,我将详细介绍各种常见的数据结构及其特点和应用场景。
一、线性表线性表是最简单也是最常见的数据结构之一。
它是由一系列具有相同类型的元素组成的序列,其中每个元素都有一个前驱元素和一个后继元素,除了第一个元素没有前驱元素,最后一个元素没有后继元素。
常见的线性表有数组、链表和栈。
1. 数组数组是一种在内存中连续存储的数据结构,可以通过下标来访问其中的元素。
它的优点是访问速度快,缺点是插入和删除操作比较慢。
2. 链表链表是通过指针将一组零散的内存块连接起来形成的数据结构,它的节点可以不连续存储。
链表的优点是插入和删除操作比较快,缺点是访问速度相对较慢。
3. 栈栈是一种后进先出(LIFO)的线性表,它只允许在表的一端进行插入和删除操作。
常见的应用场景有函数调用、括号匹配等。
二、队列队列是一种先进先出(FIFO)的线性表,类似于现实生活中的排队。
它有两个指针,分别指向队头和队尾。
常见的队列有普通队列、双端队列和优先队列。
1. 普通队列普通队列是最基本的队列形式,只能在队头删除元素,在队尾插入元素。
常见的应用场景有任务调度、消息队列等。
2. 双端队列双端队列是允许从两端插入和删除元素的队列。
它可以作为栈和队列的结合体,常见的应用场景有回文判断、迷宫问题等。
3. 优先队列优先队列是一种按照元素优先级进行插入和删除操作的队列。
常见的应用场景有任务调度、图像压缩等。
三、树树是一种非线性的数据结构,它由若干个具有层次关系的节点组成。
树的每个节点可以有多个子节点,但每个子节点只能有一个父节点。
常见的树有二叉树、二叉搜索树和平衡树。
1. 二叉树二叉树是每个节点最多有两个子节点的树结构。
它的遍历方式有前序遍历、中序遍历和后序遍历。
常见的应用场景有表达式计算、文件系统等。
2. 二叉搜索树二叉搜索树是一种特殊的二叉树,它的左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。
数据结构考研笔记整理(全)

数据结构考研笔记整理(全)数据结构考研笔记整理数据结构是计算机科学中非常重要的一门课程,对于计算机专业的学生来说,考研复习过程中对数据结构的准备非常关键。
因此,我们需要系统地整理数据结构的相关知识点,以便更好地理解和掌握。
一、线性表线性表是数据结构中最基本的一种数据结构,它是一种有序的数据元素的集合。
常见的线性表有顺序表和链表。
1. 顺序表顺序表是将数据元素存放在一块连续的存储空间中,通过元素的下标来访问。
具有随机访问的特点,但插入和删除操作比较麻烦。
适用于查找操作频繁的场景。
2. 链表链表是将数据元素存放在任意的存储空间中,通过指针来连接各个元素。
具有插入和删除操作方便的特点,但不支持随机访问。
适用于插入和删除操作频繁的场景。
二、栈和队列栈和队列是特殊的线性表,它们都具有先进先出的特点。
1. 栈栈是一种特殊的线性表,只能在表的一端进行插入和删除操作,即“先进后出”。
常见的应用有函数调用的过程中的参数传递、表达式求值等。
2. 队列队列也是一种特殊的线性表,只能在表的一端进行插入操作,而在另一端进行删除操作,即“先进先出”。
常见的应用有任务调度、缓冲区管理等。
三、树树是一种非常重要的非线性数据结构,它由节点和边组成。
树具有层次结构,常见的树结构有二叉树、二叉搜索树和平衡二叉树等。
1. 二叉树二叉树是每个节点最多有两个子树的树结构,包括左子树和右子树。
二叉树的遍历方式有前序遍历、中序遍历和后序遍历。
2. 二叉搜索树二叉搜索树是一种特殊的二叉树,它的左子树中的所有节点都小于根节点,右子树中的所有节点都大于根节点。
具有快速查找和插入的特点。
3. 平衡二叉树平衡二叉树是一种特殊的二叉搜索树,它的左右子树的高度差不超过1。
通过旋转操作可以保持树的平衡性。
四、图图是一种非常复杂的非线性数据结构,它由顶点和边组成。
图可以分为有向图和无向图,常见的图算法有深度优先搜索和广度优先搜索。
1. 深度优先搜索深度优先搜索是一种用于遍历或搜索图和树的算法,它从一个节点开始,尽可能深地访问每个节点的所有子节点,直到没有子节点为止。
数据结构笔记期末总结

数据结构笔记期末总结一、概述在本学期的学习中,我们主要学习了数据结构及其相关的算法。
数据结构是计算机科学的基础,是任何程序设计的基础。
它研究如何组织和存储数据,以及如何高效地访问和操作数据。
在学习过程中,我们通过理论讲解、实验操作、编程实践等方式加深了对数据结构的理解和应用能力的提升。
本文将对本学期所学的内容进行总结,以期对数据结构的学习有一个全面的回顾与总结。
二、线性结构1. 数组数组是一种线性结构,它将相同数据类型的元素按照一定的顺序排列,并按照一定的规则访问这些元素。
在数组中,每个元素都有一个索引,通过索引可以快速地访问数组中的元素。
数组的优点是存储效率高,支持随机访问;缺点是插入和删除操作比较低效。
2. 链表链表是由一系列节点组成的线性结构,每个节点包含一个数据元素和一个指向下一个节点的指针。
链表分为单向链表和双向链表,单向链表的每个节点只有一个指针,指向下一个节点;双向链表的每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。
链表的优点是插入和删除操作高效,支持动态扩容;缺点是访问元素的效率较低。
3. 栈栈是一种具有特定操作规则的线性结构,它的特点是先进后出。
栈有两个基本操作:入栈和出栈。
入栈操作将一个元素放入栈顶,出栈操作将栈顶元素移除。
栈的应用场景很多,比如函数调用栈、表达式求值等。
4. 队列队列是一种具有特定操作规则的线性结构,它的特点是先进先出。
队列有两个基本操作:入队和出队。
入队操作将一个元素放入队尾,出队操作将队头元素移除。
队列的应用场景很多,比如任务调度、消息传递等。
三、非线性结构1. 树树是一种非线性结构,它由节点组成,节点之间存在一对多的层次关系。
树的基本概念包括根节点、叶子节点、父节点、子节点等。
树的应用场景很多,比如文件系统、数据库索引等。
2. 二叉树二叉树是一种特殊的树,它的每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树的遍历方式有前序遍历、中序遍历和后序遍历。
2022年湖南大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年湖南大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、已知广义表LS=((a,b,c),(d,e,f)),用head和tail数取出LS中原子e 的运算是()。
A.head(tail(LS))B.tail(head(LS))C.head(tail(head(tail(LS))))D.head(tail(tail(head(LS))))2、下述文件中适合于磁带存储的是()。
A.顺序文件B.索引文件C.哈希文件D.多关键字文件3、连续存储设计时,存储单元的地址()。
A.一定连续B.一定不连续C.不一定连续D.部分连续,部分不连续4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动若提前完成,那么整个工程将会提前完成6、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、下列选项中,不能构成折半查找中关键字比较序列的是()。
数据结构知识点总结

数据结构知识点总结数据结构是计算机科学中非常重要的一个概念,它是指一组数据的组织方式,以及对这组数据进行操作的方法。
数据结构可以分为线性结构和非线性结构两种。
下面将对常见的数据结构进行总结,希望能对读者有所帮助。
一、线性结构1. 数组:数组是一种最基本的数据结构,它可以存储一组具有相同类型的数据。
数组的访问时间复杂度为O(1),但插入和删除的时间复杂度较高,为O(n)。
2. 链表:链表是由一系列的节点组成,每个节点包含数据以及指向下一个节点的指针。
链表的访问时间复杂度为O(n),但插入和删除的时间复杂度较低,为O(1)。
3. 栈:栈是一种具有后进先出(LIFO)特点的数据结构,只能在栈顶进行插入和删除操作。
栈的访问、插入、删除的时间复杂度均为O(1)。
4. 队列:队列是一种具有先进先出(FIFO)特点的数据结构,只能在队尾插入元素,在队头删除元素。
队列的访问、插入、删除的时间复杂度均为O(1)。
5. 双向链表:双向链表是在链表的基础上发展而来的数据结构,每个节点不仅包含指向下一个节点的指针,还包含指向上一个节点的指针。
双向链表的插入和删除操作时间复杂度为O(1)。
二、非线性结构1. 树:树是一种由节点和边组成的数据结构,每个节点可以有多个子节点。
树有很多种类型,如二叉树、AVL树、红黑树等。
树的遍历可以分为前序遍历、中序遍历、后序遍历和层序遍历等。
2. 图:图是一种由顶点和边组成的数据结构,每个顶点可以与其他顶点相连。
图可以分为有向图和无向图,常用的应用场景有社交网络和地图导航等。
图的遍历可以分为深度优先搜索和广度优先搜索等算法。
3. 堆:堆是一种特殊的树结构,具有以下特点:每个节点的值都大于等于(或小于等于)其子节点的值,且左子树和右子树都是堆。
堆常用来实现优先队列,常见的堆有二叉堆和斐波那契堆。
4. 哈希表:哈希表是一种根据关键码值(Key value)而直接进行访问的数据结构,通过将关键码值映射到表中的某个位置来实现访问的。
湖南大学数据结构期末复习

2019/11/12
19
(1)JK触发器组成的3位异步二进制减法计数器 (用CP脉冲下降沿触发)。
仿真
图5-16 3位异步二进制减法计数器
二进制计数器是结构最简单的计数器,但应用很 广。
2.按数字的变化规律
加法计数器:随着计数脉冲的输入作递增计数的电路
称作加法计数器。
减法计数器:随着计数脉冲的输入作递减计数的电路
称作减法计数器。
加/减计数器:在加/减控制信号作用下,可递增计数, 也可递减计数的电路,称作加/减计数器,又称可逆计数器。。
触发器状态保持不变;
当低位向高位进位时,令高位触发器的T=1,触
发20器19/1翻1/12 转,计数加1。
4
(2)当低位全1时再加1,则低位向高位进位。 1+1=1 11+1=100 111+1=1000 1111+1=10000
…… 可得到T的表达式为:
T0=J0=K0=1
T1=J1=K1= Q0
2019/11/12
15
④ 时序图
图5-13 3位二进制加法计数器的时序图
2019/11/12
16
⑤ 状态转换图
圆圈内表 示Q2Q1Q0
的状态
用箭头表 示状态转 换的方向
图5-14 3位二进制加法计数器的状态转换图
2019/11/12
17
⑥ 结论
如果计数器从000状态开始计数,在第八个计 数脉冲输入后,计数器又重新回到000状态,完成 了一次计数循环。所以该计数器是八进制加法计 数器或称为模8加法计数器。
数据结构高分笔记(试读版)

目录第一章绪论. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 1.1针对考研数据结构的代码书写规范以及C&C++语言基础. . . . . . . . ... .1 1.1.1考研综合应用题中算法设计部分的代码书写规范. . . . . . . . . . .. .11.1.2考研中的C&C++语言基础杂谈. . . . . . . . . . . . . . . . . . . .. .3 1.2算法的时间复杂度与空间复杂度分析基础. . . . . . . . . . . . . . . . . (12)1.2.1考研中的算法时间复杂度杂谈. . . . . . . . . . . . . . . . . . . . .121.2.2例题选讲. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121.2.3考研中的算法空间复杂度分析. . . . . . . . . . . . . . . . . . . .14 1.3数据结构和算法的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . .14 1.3.1数据结构的基本概念. . . . . . . . . . . . . . . . . . . . . . . . .141.3.2算法的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . .15 习题心选. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (16)习题心讲. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (18)第二章线性表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . (21)2.1线性表的基本概念与实现. . . . . . . . . . . . . . . . . . . . . . . .21 2.2线性表的基本操作. . . . . . . . . . . . . . . . . . . . . . . . . . ..26 2.2.1线性表的定义. . . . . . . . . . . . . . . . . . . . . . . . . . . .262.2.2顺序表的算法操作. . . . . . . . . . . . . . . . . . . . . . . . . .282.2.3单链表的算法操作. . . . . . . . . . . . . . . . . . . . . . . . . .312.2.4双链表的算法操作. . . . . . . . . . . . . . . . . . . . ..352.2.5循环链表的算法操作. . . . . . . . . . . . . . . . . . . . . . . . .37 ▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (37)真题仿造答案与讲解. . . . . . . . . . . . . . . . . . . . . . . . .. . . ..38 习题心选. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (39)习题心讲. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (43)第三章栈、队列和数组. . . . . . . . . . . . . . . . . . . . . . . ..54 3.1栈和队列的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . ..54 3.1.1栈的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . (54)3.1.2队列的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . .54 3.2栈和队列的存储结构、算法与应用. . . . . . . . . . . . . . . . . . . . . .. .55 3.2.1本章所涉及的数据结构定义. . . . . . . . . . . . . . . . . . . . .553.2.2顺序栈的基本算法操作. . . . . . . . . . . . . . . . . . . . . . ..563.2.3链栈的基本算法操作. . . . . . . . . . . . . . . . . . . . . . .. . .583.2.4栈的应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593.2.5顺序队的算法操作. . . . . . . . . . . . . . . . . . . . . . . . . .633.2.6链队的算法操作. . . . . . . . . . . . . . . . . . . . . . . . . ..65 3.3特殊矩阵的压缩存储. . . . . . . . . . . . . . . . . . . . . . . . ..67 ▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..69 真题仿造答案与讲解:. .. . . . . . . . . . . . . . . . . . . . . . . . . . .69 习题心选. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (72)习题心讲. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. (76)第四章树和二叉树. . . . . . . . . . . .. . . . . . . . . .. . . . . . . ..85 4.1树的基本概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85 4.1.1树的定义. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .854.1.2树的基本术语. . . . . . . . . . . . . . . . . . . . . . . . . . . .854.1.3树的存储结构. . . . . . . . . . . . . . . . . . . . . . . . . . . .86 4.2二叉树. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..87 4.2.1 二叉树的定义. . . . . . . . . . . . . . . . . . . . . . . . . . . .874.2.2 二叉树的主要性质. . . . . . . . . . . . . . . . . . . . . . . . . .884.2.3 二叉树的存储结构. . . . . . . . . . . . . . . . . . . . . . . . . .894.2.3 二叉树的遍历算法. . . . . . . . . . . . . . . . . . . . . . . . ..904.2.4 线索二叉树的基本概念和构造. . . . . . . . . . . . . . . . . . . .98 4.3树和森林. . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3.1孩子兄弟存储结构. . . . . . . . . . . . . . . . . . . . .. . . . .1014.3.2 森林与二叉树的转换. . . . . . . . . . .. . . . . . .. 1024.3.3树和森林的遍历. . . . . . . . . . . . . . . . . . . . . . . . .102 4.4树与二叉树的应用. . . . . . . . . . . . .. . . . . . . . . .104 4.4.1 二叉排序树与平衡二叉树. . . . . . . . . . . . . . . . . .1044.4.2 哈夫曼树和哈夫曼编码. . . . . .. . . . . . . . . . . . .104 ▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . . .. . . .107 真题仿造答案与解析:. . . . . . . . . . . . . . . . . . . . . . . .107 习题心选. . . . . . . . . . . . . . . . . . . .. . . . . . . . . .108 习题心讲. . . . . . . . . . . . . . . . . . . . . . . . . . .. ..113 第五章图. . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . .127 5.1图的基本概念. . . . . . . . . . . . . . . . . . ... . . . .. . .127 5.2图的存储结构. . . . . . . . . . . . . . . . . . .. . . . .. ..1285.2.1邻接矩阵. . . . . . . . . . . . . . . . . . . . . . . . . .1285.2.2邻接表. . . . . . . . . . . . . . . . . . . . . . . . . . .1305.3图的遍历算法操作. . . . . . . . . . . . . . . . . . . . . . .1315.3.1深度优先搜索遍历(DFS). . . . . . . . . . . . . . . . . . . .1315.3.2广度优先搜索遍历(BFS). . . . . . . . . . .. .. . . . . .1325.3.3 例题选讲. . . . . . . . . . . . . . . . . . . . . . . .1345.4最小(代价)生成树. . . . . . . .. . . . . . . . . . . . . ..1365.4.1普里姆算法和克鲁斯卡尔算法. . . . . . . . . . . . . .. .. .1365.4.2例题选讲. . . . . . . . . . . . . . . . . . . . . . .1405.5最短路径. . . . . . . . . . . . . . . . . . . . . . . . . ..1415.5.1 迪杰斯特拉算法. . . . . . . . . . . . . . . . . . . . .1415.5.2 弗洛伊德算法. . . . . . . . . . . . . . .. . . . . . ..1485.6拓扑排序. . . . . . . . . . . . . . . . . . . . . . . . . .1505.6.1 AOV网. . . . . . . . . . . . . . . . . . . . . . . . . . .1505.6.2拓扑排序. . . . . . . . . . . . . . . . . . . . .. . . . . .1505.6.3例题选讲. . . . . . . . . . . . . . .. . . . . ..1525.7关键路径. . . . . . . . . . . . . . . . . .. . . . . . (153)5.7.1 AOE网. . . . . . . . . . . . . . . . . . . ..1535.7.2 关键路径. . . . . . . . . . . . . . . . . . . . . . . . .153▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . .. . . . .156 真题仿造答案解析:. . . . . . . . . . . . . . . . . . . . . . . (157)习题心选. . . . . . . . . . . . . . . . . . . . .. . . . . . . . .159 习题心讲. . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . .. . ..164 第六章内部排序. . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 6.1排序的基本概念. . . . . . . . . . . . . . . . . . .. . . . . . .177 6.1.1排序. . . . . . . . . . . . . . . . . . . .. . (177)6.1.2稳定性. . . . . . . . . . . . . . . . . . . . . . .1786.1.3排序算法的分类. . . . . . . . . . .. . . . . . . . . . . . .178 6.2插入类排序. . . . . . . . . . . . . . . . . . . .. . . . . . . .179 6.2.1直接插入排序. . . . . . . . . . . . . . . . . ..1796.2.2折半插入排序. . . . . . . . . . . . . .. . . . .1806.2.3希尔排序. . . . . . . . . . . . . . . . . . . . .. . . . ... . ..181 6.3交换类排序. . . . . . . . . . . . . . . . . .. . . . . .183 6.3.1起泡排序. . . . . . . . . . . . . . . . . . . . (183)6.3.2快速排序. . . . . . . . . . . . . . . . . . . . . . . . .184 6.4 选择类排序. . . . . . . . . . . . . . . . . . . .. . . . . .186 6.4.1简单选择排序. . . . . . . . . . . . . . . . . . . . . . .1866.4.2堆排序. . . . . . . . . . . . . . . . . . . . . . .1876.5二路归并排序. . . . . . . . . . . . . . . . . .. . . .. .190 6.6基数排序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..191 排序知识点小结:. . . . . . . . . . . . . . . . . . . . . ... .195 ▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . . . . .196 真题仿造答案与解析:. . . . . . . . . . . . . . . . . . . . . . . . . . .196 习题心选. . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 习题心讲. . . . . . . . . . . . . . . . . . . . . . . . . . . .. ..201 第七章查找. . . . . . . . . . . . . . . . . . . . . . .. . . . .210 7.1查找的基本概念、顺序查找法、折半查找法. . . . . . .. . . . . . ..210 7.1.1查找的基本概念. . . . . . . . . . . . . . . . . . . .2107.1.2顺序查找法. . . . . . . . . . . . . . . . . . . . . .2117.1.2折半查找法. . . . .. . .. . . . . . . . . . . . . . . . .2127. 2二叉排序树、平衡二叉树. .. . . . . . . . . . . . .. . . . .2147.2.1 二叉排序树. . . . . . . . . . . . . . . . . . . . . .2147.2.2平衡二叉树. . . . . . . . . . . . . . . . . . . . . .2177.3 B-树及其基本操作、B+树的基本概念. . . . . . . . . . . . . . . . .2217.3.1 B-树的基本概念. . . . . . . . . . . . . . . . . . . . .2217.3.2 B-树的基本操作. . . . . . . . . . . . . . . . . . . .2227.3.3 B+树的基本概念. . . . . . . . . . . . . . . . . . . . . .2267.4散列(Hash)表. . . . . . . . . . . . . . . . . . . . . . ..2287.4.1 散列(Hash)表的概念. . . . . . . . . . . . . . . .2287.4.2 散列(Hash)表的建立方法以及冲突解决方法. . . . . . . . .. .2287.4.3 散列(Hash)表的性能分析. . . . . . . . . . . . . . . . . . . . ..232▲真题仿造. . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 真题仿造答案与解析:. . . . . . . . . . . . . . . . . . . . ..234 习题心选. . . . . . . . . . . . . . . . . . . . . . .. . . . . .236 习题心讲. . . . . . . . . . . . . . . . . . . . . . .. . . . .. . .240 2010年计算机考研试题. . . . . . . . . . . . . . . . . . . . . 251 2009年计算机考研试题. . . . . . . . . . . . . . . . . . . . . 256 作者的话:大部分同学在学习数据结构时,想必对数据结构课本里的伪代码多多少少有点不是很清楚,特别是自己在动手编写算法的时候,明明知道算法的思路,但是编写出来的程序就是不标准,可能在考试的时候就会吃大亏。