数据结构复习纲要
- 格式:doc
- 大小:115.50 KB
- 文档页数:27
复习提纲第一章数据结构概述基本概念与术语(P3)1.数据结构是一门研究非数值计算程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科.2.数据是用来描述现实世界的数字,字符,图像,声音,以及能够输入到计算机中并能被计算机识别的符号的集合2.数据元素是数据的基本单位3.数据对象相同性质的数据元素的集合4.数据结构包括三方面容:数据的逻辑结构.数据的存储结构.数据的操作. (1)数据的逻辑结构指数据元素之间固有的逻辑关系.(2)数据的存储结构指数据元素及其关系在计算机的表示( 3 ) 数据的操作指在数据逻辑结构上定义的操作算法,如插入,删除等. 5.时间复杂度分析--------------------------------------------------------------------------------------------------------------------1、名词解释:数据结构、二元组2、根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、线性结构、树形结构和图状结构四种类型。
3、常见的数据存储结构一般有四种类型,它们分别是___顺序存储结构_____、___链式存储结构_____、___索引存储结构_____和___散列存储结构_____。
4、以下程序段的时间复杂度为___O(N2)_____。
int i,j,x;for(i=0;i<n:i++) n+1for(j=0;j<n;j++) n+1x+=i;------------------------------------------------------------------------------------------------------------------第二章线性表1.顺序表结构由n(n>=0)个具有相同性质的数据元素a1,a2,a3……,an组成的有穷序列//顺序表结构#define MAXSIZE 100typedef int DataType;Typedef struct{DataType items[MAXSIZE];Int length;}Sqlist,*LinkList;//初始化链表void InitList(LinkList *L){(*L)=(LinkList)malloc(sizeof(LNode));if(!L){cout<<”初始化失败!”;return;}(*L)->next=NULL;}//插入数据void InsertList(LinkList L,int pos,DataType x){LinkList p=L,q;int i=0;while(p&&i<pos-1){p=p->next;i++;}if(!p||i>pos-1){cout<<”插入位置错误”;return;}InitList(&q);q->next=p->next;p->next=q;q->data=x;}//销毁链表void DestoryList(LinkList L){LinkList t;while(L){t=L;L=L->next;free(t);}}//遍历链表void TraverseList(LinkList L){LinkList t=L;while(L){t=t->next;cout<<t->data<<” ”;}cout<<endl;}//删除元素void DeleteList(LinkList L,int pos){LinkList p=L,q;int i=0;while(p&&i<pos-1){p=p->next;i++;}if(!p||i>pos-1){cout<<”删除位置错误!!”;return;}q=p->next;p->next=q->next;free(q):}第三章栈和队列1.栈(1)栈的结构与定义(2)顺序栈操作算法:入栈、出栈、判断栈空等(3)链栈的结构与定义2.队列(1)队列的定义----------------------------------------------------------------------------------------------------------------1、一个栈的入栈序列为“ABCDE”,则以下不可能的出栈序列是()A. BCDAEB. EDACBC. BCADED. AEDCB2、栈的顺序表示仲,用TOP表示栈顶元素,那么栈空的条件是()A. TOP==STACKSIZEB. TOP==1C. TOP==0D. TOP==-13、允许在一端插入,在另一端删除的线性表称为____队列____。
数据结构复习提纲复习内容:基本概念掌握:数据结构,逻辑结构,存储结构;数据类型;算法;T(n),S(n)的理解。
要学习的数据结构定义形式:n(n〉=0)个数据元素的有限集合.将约束:1、数据元素本身.2、数据元素之间的关系。
3、操作子集。
大多有两种存储(表示、实现)方式:1、顺序存储。
2、链式存储.一、线性结构:1、线性表:n(n〉=0)个相同属性的数据元素的有限序列。
12种基本操作.顺序表:9种基本操作算法实现.单链表:11种基本操作算法实现。
(重点:插入、删除)顺序表与单链表之时间性能、空间性能比较.循环链表:类型定义与单链表同。
算法实现只体现在循环终止的条件不同。
双向链表:重点插入、删除算法。
2、操作受限的线性表有:栈、队列。
栈:顺序栈;链栈(注意结点的指针域指向)。
(取栈顶元素、入栈、出栈)队列:循环队列(三个问题的提出及解决);链队列(注意头结点的作用).(取队头元素、入队、出队。
链队列中最后一个元素出队)3、数据元素受限的线性表有:串、数组、广义表。
串:定长顺序存储;堆分配存储.块链存储(操作不方便)数组:顺序存储。
特殊矩阵的压缩存储;稀疏矩阵(三元组表示、十字链表)广义表:长度、深度.取表头(可以是原子也可以是子表);取表尾(肯定是子表)。
链式存储。
二、树型结构:1、树:n(n>=0)个数据元素的有限集合.这些数据元素具有以下关系:……。
(另有递归定义。
)术语;存储(双亲表示、孩子表示、孩子双亲表示、孩子兄弟表示)。
2、二叉树:n(n〉=0)个数据元素的有限集合。
这些数据元素具有以下关系:……。
(另有递归定义)5个性质(理解、证明;拓展)。
遍历二叉树(定义、序列给出、递归算法、非递归算法);遍历二叉树应用:表达式之前序表达式、后序表达式、中序表达式转换。
线索二叉树(中序线索二叉树)。
树森林与二叉树的转换。
树与森林的遍历.赫夫曼树及其应用:定义、构造、赫夫曼编码。
三、图形结构:n(n〉=0)个数据元素的有限集合。
数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述1. 数据结构的定义和作用2. 常见的数据结构类型3. 数据结构与算法的关系二、线性结构1. 数组的概念及其特点2. 链表的概念及其分类3. 栈的定义和基本操作4. 队列的定义和基本操作三、树结构1. 树的基本概念及定义2. 二叉树的性质和遍历方式3. 平衡二叉树的概念及应用4. 堆的定义和基本操作四、图结构1. 图的基本概念及表示方法2. 图的遍历算法:深度优先搜索和广度优先搜索3. 最短路径算法及其应用4. 最小生成树算法及其应用五、查找与排序1. 查找算法的分类及其特点2. 顺序查找和二分查找算法3. 哈希查找算法及其应用4. 常见的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序六、高级数据结构1. 图的高级算法:拓扑排序和关键路径2. 并查集的定义和操作3. 线段树的概念及其应用4. Trie树的概念及其应用七、应用案例1. 使用数据结构解决实际问题的案例介绍2. 如何选择适合的数据结构和算法八、复杂度分析1. 时间复杂度和空间复杂度的定义2. 如何进行复杂度分析3. 常见算法的复杂度比较九、常见问题及解决方法1. 数据结构相关的常见问题解答2. 如何优化算法的性能十、总结与展望1. 数据结构学习的重要性和难点2. 对未来数据结构的发展趋势的展望以上是数据结构复习资料的复习提纲知识要点归纳。
希望能够帮助你进行复习和回顾,加深对数据结构的理解和掌握。
在学习过程中,要注重理论与实践相结合,多进行编程练习和实际应用,提高数据结构的实际运用能力。
祝你复习顺利,取得好成绩!。
2010年复习提纲第一章数据、数据结构的概念;基本逻辑结构的种类;集合线性树形图状基本存储方式的种类;顺序链式散列索引算法、算法的时间复杂度以及其计算。
算法的五大特性:输入输出确定性有穷性有效性时间复杂度的计算:忽略常数与中间变量,循环套循环用乘法第二章线性表的概念;顺序存储和链接存储的线性表的数据结构、特性;顺序存储的特性:查找方便,不易扩充链接存储的特性:插入删除方便顺序存储和链接存储的线性表的基本算法:创建、插入、查找、删除等;链表的其他形式(带表头、循环、双向、双向循环等)的概念及基本算法(与一般链表的不同处)。
带表头:便于其后结点执行标准化操作循环:首尾相接双向:既可以查找前继又可以查找后继双向循环:结合以上两点链表逆转;第二章相关算法列举如下1.。
顺序线性表的插入Int sq_insert(int list[],int *p_n,int i,int x) { Int j;If(i<0||i>*p_n) return(1);If(*p_n==MAXSIZE) return(2);For(j=*p_n;j>I;j--)List[j]=list[j-1];List[i]=x;(*p_n)++;Return(0);} 2.顺序线性表的删除Int sq_delete(int list[],int *p_n,int i) {Int j;If(i<0||i>=*p_n) return(1);For(j=i+1;j<*p_n;j++)List[j-1]=list[j];(*p_n)--;Return(0);}3.链式线性表的创建NODE *create_link_list(int n){ int i;NODE *p,*q;NODE *p_head;if(n==0) return(NULL);p_head=new(NODE);p_head->data=-1;p=p_head;for(i=1;i<=n;i++){printf("请输入第%d个节点的值\n",i);q=new(NODE);scanf("%d",&(q->data));p->link=q;p=q;}q->link=NULL;return(p_head);/*返回的是假头*/ ※4.链式线性表的插入(i之后)Int insert(NODE* *p_head,int i,int a) { int n=0;NODE *p,*q,*r;p=*p_head;if(i<1) return(0);while((p!=NULL)&&(n<i)){If(p->data!=-1) n++;q=p;p=p->link;}r=new(NODE);r->data=a;r->link=q->link;q->link=r;}※5.链式线性表的删除int del(NODE* *p_head,int I) { NODE *p,*q;int n=0;p=*p_head;if(i<1) return(0);while((p!=NULL)&&(n<i)){If(p->data!=-1) n++;q=p;p=p->link;}if(p==NULL) return(0);q->link=p->link;delete(p);return(1);} 6.单链表的逆置NODE * reverse(NODE *head) {NODE *p,*q;P=head->next;Head->next=NULL;While(p){Q=p->next;p->next=head->next;head->next=p;p=q;}return(head);}7.试写一高效的算法,删除表中所有大于mink且小于maxk的元素Void Delete_between(int a[],int mink,int maxk){p=L;while(p->next->data<=mink) p=p->next;(本循环结束时p是最后一个不大于mink的元素)if(p->next)(如果还有比mink更大的元素){q=p->next;while(q->data<maxk) q=q->next;(本循环结束时q 是第一个不小于maxk 的元素)p->next=q;}}第三章栈与队列的概念;栈:只允许在一端进行插入和删除的线性表队列:只允许在一端进行插入,且只允许在另一端进行删除的线性表顺序栈和链栈的数据结构与基本算法;顺序队列(尤其是循环队列)和链队列的数据结构与基本算法;栈的应用算法;如何判断顺序栈的空与满、如何判断循环队列的空与满;判断顺序栈的空与满:若top的初始值是-1 则判空条件是if(top==-1) 判满条件是if(top==MAXN)若top的初始值是0 则判空条件是if(top==0) 判满条件是if(top==MAXN-1)判断循环队列的空与满{Head=0,tail=0;判断循环队列的空与满的条件都是if(head==tail)}中缀表达式与后缀表达式规则以及两者间的转换。
24考研数据结构大纲摘要:一、数据结构基本概念1.数据结构定义2.数据结构分类3.数据结构与算法的关系二、线性表1.线性表的定义2.线性表的运算3.线性表的操作三、栈与队列1.栈的定义与运算2.队列的定义与运算3.栈与队列的应用四、树与二叉树1.树的定义与分类2.二叉树的概念与性质3.二叉树的操作与遍历五、图1.图的定义与分类2.图的遍历3.最短路径问题与最小生成树六、排序算法1.排序算法的基本概念2.插入排序3.选择排序4.交换排序5.归并排序与堆排序七、查找算法1.查找算法的基本概念2.线性查找3.二分查找4.哈希查找正文:在24 考研的数据结构大纲中,首先介绍了数据结构的基本概念,包括数据结构的定义、分类以及与算法的关系。
数据结构是为了解决数据的存储、管理和操作问题而研究的一种数据组织方式。
接下来,大纲详细讲解了线性表、栈与队列、树与二叉树、图等基本数据结构。
线性表是一种线性数据结构,主要包括顺序表和链表;栈和队列是线性表的特殊形式,分别支持后进先出和先进先出的操作;树和二叉树是一种层次结构,具有良好的分支特性,可以用于表示具有层次关系的数据;图是一种多维结构,可以表示复杂的关系和网络。
此外,大纲还介绍了排序算法和查找算法。
排序算法是用于对数据结构中的数据进行排序的算法,包括插入排序、选择排序、交换排序、归并排序和堆排序等;查找算法是用于在数据结构中查找特定元素的算法,包括线性查找、二分查找、哈希查找等。
总之,24 考研数据结构大纲涵盖了数据结构的基本概念、基本数据结构以及常用算法,为考生提供了全面的复习指导。
第1章概论1.数据结构的作用、意义、基本概念和术语,要求达到“识记”层次。
1.1数据结构所研究的内容;在计算机科学中的作用和意义;Wirth关于程序的定义公式。
1.2数据、数据元素、数据对象、数据项、数据结构等概念的定义。
1.3数据的逻辑结构、存储结构及数据运算的含义及其相互关系。
1.4数据结构的两大类逻辑结构和四种常用的存储表示方法。
2.算法的描述和分析,要求达到“领会”层次。
2.1算法、算法的时间复杂度和空间复杂度等概念。
2.2一个完整算法需要满足的五个准则;算法与程序的关系。
2.3算法的分析方法;对于一般算法能分析其时间复杂度。
第2章线性表1.线性表的逻辑结构,要求达到“识记”层次。
1.1线性表的逻辑定义和性质。
1.2线性表上定义的基本运算。
2.线性表的顺序存储结构和基本运算,要求达到“领会”层次。
2.1顺序表的定义及特点。
2.2顺序表上进行插入和删除操作的实现及时间性能分析。
2.3理解求顺序表逆置和极值及定位两种算法的实现过程。
3.线性表链式存储结构的不同形式及基本运算,要求达到“领会”层次。
3.1单链表、循环链表、双向链表的定义及特点。
3.2单链表上实现建表、查找、插入和删除等基本算法,并分析其时间复杂度。
3.3用尾指针表示单循环链表的意义。
3.4双向链表上的插入和删除操作。
4.利用顺序表和链表设计算法解决应用问题,要求达到“综合应用”层次。
5.顺序表和链表的比较,要求达到“领会”层次。
第3章栈和队列1.栈的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
1.1栈的逻辑定义、特点及运算。
1.2顺序栈和链栈上实现进栈、退栈等基本运算。
1.3顺序栈的上溢和下溢问题,如何防止溢出。
2.队列的逻辑结构、存储结构及相关算法,要求达到“简单应用”层次。
2.1队列的逻辑定义、特点及运算。
2.2顺序循环队列的表述;队空和队满的判定;顺序循环队列上入队、出队等基本算法。
2.3链队列的表述;带头结点和不带头结点两种情况下链队列上的基本算法。
数据结构复习提纲第一章绪论1.基本术语:数据,数据元素,数据对象,数据结构及其分类。
2.什么是算法?算法的特性。
3.时间复杂度及其简单计算。
第二章线性表1.线性表的定义,线性表的存储结构常有哪几种?各有何优缺点?2.顺序表的类型说明及其基本操作算法的实现3.链表结构的类型说明及其基本操作算法的实现。
表空条件,申请结点,插入,删除操作语句。
第三章栈和队列1.栈的定义及其特点。
队列的定义及其特点。
2.顺序栈的类型说明及其算法实现。
栈空,栈满条件,入栈出栈操作语句。
3.循环队列的类型说明及其算法实现。
队空,队满条件,入队出队操作,计算队列的长度语句。
第五章数组与广义表1.二维数组的两种存储方式及地址计算。
2.矩阵的压缩存储,对称矩阵,三角矩阵的地址计算。
3.什么是稀疏矩阵?稀疏矩阵的两种存储结构,算法的实现。
4.广义表的定义。
广义表的两种存储结构,广义表的表头,表尾计算第六章树和二叉树1.树的概念与定义。
2.二叉树。
满二叉树,完全二叉树的定义,二叉树的性质及其证明。
3.二叉树的存储结构及其类型说明。
4.二叉树的三种遍历及其递归算法实现。
5.树的三种存储结构。
6.树,森林与二叉树的转换。
7.哈夫曼树的定义。
哈夫曼树的构造及其哈夫曼编码。
第七章图1.图的定义及其术语。
2.图的存储结构。
邻接表,邻接矩阵。
3.图的深度,广度遍历及其应用4.最小生成树的两种构造算法。
5.什么是AOV网?拓扑排序的定义及其方法。
6.求关键路径的算法及其计算。
7.从源点到其余各顶点的最短路径的算法及其计算。
8.各对顶点的最短路径的算法及其计算。
第九章查找1.顺序表的查找算法及其算法实现ASL计算。
2.有序表的查找算法及其算法实现。
ASL计算3.二叉排序树的定义,特点,构造及其查找算法的实现ASL 计算。
4.B-树的定义,插入,删除,构造。
5.哈希函数,哈希冲突的定义。
构造哈希函数的方法,解决冲突的方法。
6.给出哈希函数,哈希冲突的解决方法,构造哈希表ASL计算。
《数据结构》考前复习大纲本复习大纲按章分别叙述三方面的内容:1、考试大纲要求,2、复习考试知识点,3、应用举例。
为了方便考生复习,知识点还给出较详细的描述内容,举例题型也给出具体的分析过程和完整的参考答案。
第一章绪论考纲要求:1.数据的四种逻辑结构与四种存储结构(理解)2. 时间复杂度的估算及比较(掌握)知识点:1 、数据结构:研究是是数据元素之间抽象化的相互关系和这种关系在计算机中的存贮表示,并对每种结构定义各自的运算,设计出相应的算法,而且经过运算后所得的新结构一般仍然是原来的结构类型。
2、数据的四类基本组成形式:①集合中任何两个结点之间都没有逻辑关系,组成形式松散。
②线性结构中结点按逻辑关系一次排列形成一条“锁链”。
③树形结构具有分支、层次特性,其形态有点像自然界中的树。
④图状结构最复杂,其中的各个结点按逻辑关系互相缠绕,任何两个结点都可以邻接。
算法:是执行特定计算的有穷过程。
特点:·动态有穷·确定性·输入·输出·可行性。
1、以算法在所有输入下的计算量的最大值作为算法的计算量,这种计算量称为算法的最坏时间复杂性或最坏时间复杂度。
2、以算法在所有输入下的计算量的加权平均值作为算法的计算量,这种计算量称为算法的平均时间复杂性或者平均时间复杂度。
3. 时间复杂度从好到坏的级别依次是:常量阶O(1),对数阶O(log2n),线性阶O(n), 优化的平方阶O(n*log2n),平方阶O(N2),立方阶O(n3),指数阶O(2),阶乘阶O(n!)4、数据结构的基本任务可以概括为数据结构的设计和实现。
应用举例:设n为正整数,利用大"O"记号,将下列程序段的执行时间表示为n的函数。
(1) i=1; k=0;while(i<n){ k=k+10*i;i++;}分析:i=1; //1k=0; //1while(i<n) //n{ k=k+10*i; //n-1i++; //n-1}由以上列出的各语句的频度,可得该程序段的时间消耗:T(n)=1+1+n+(n-1)+(n-1)=3n可表示为T(n)=O(n)第二章线性表:考纲要求:1线性表的顺序存储、链式存储的各种算法(掌握) 2 线性表的插入、删除算法(掌握),3 双向链表及循环链表的插入、删除过程(掌握)知识点:1、线性结构是n(n>=0)个结点的有穷序列。
数据结构考试大纲第一章绪论1、数据结构的基本概念和术语2、算法的描述第二章线性表1、线性表的逻辑结构2、线性表的存储结构及基本操作3、线性表的应用第三章栈和队列1、栈和队列的逻辑结构定义2、栈和队列的存储结构及基本操作3、栈和队列的应用第四章串1、串的逻辑结构定义2、串的存储结构及基本操作3、串的应用第五章数组和广义表1、数组和广义表的定义、存储结构2、数组的运算3、矩阵的压缩存储4、数组的应用第六章树和二叉树1、树的结构定义和基本操作2、二叉树的定义、性质和存储结构3、遍历二叉树和线索二叉树4、树和森林(存储结构、互相转换、遍历)5、树的应用第七章图1、图的定义和术语2、图的存储结构3、图的遍历4、图的应用第八章查找1、线性表、有序表的查找及其分析2、二叉排序树和平衡二叉树3、散列(Hash)表的定义,Hash 叉数的构造方式、冲突处理和Hash 表的查找及其分析第九章内部排序1、排序的基本概念2、各种排序方法及其分析第十章外部排序1、外存信息存取的基本概念2、磁盘、磁带归并排序第十一章文件1、有关文件的基本概念2、顺序文件、索引文件、索引顺序文件、直接存取文件、多重链表文件、倒排文件等的存取方法。
第一章绪论1、数据结构的基本概念和术语数据:是描述客观事物的数、字符以及所有能输入到计算机中被计算机程序加工处理的信息的集合。
数据元素:数据的基本单位。
(一个数据项或多个数据项(域) 。
数据项是数据的最小单位。
结点、顶点、记录。
数据对象:是性质相同的数据元素的集合。
数据结构:相互之间存在着某种逻辑关系的数据元素的集合。
数据之间的相互关系,即数据的组织形式。
四类基本结构:集合、线性结构、树形结构、图状结构或网状结构。
1) 数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机;2) 数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言。
3) 数据的运算,定义在逻辑结构上,每种逻辑结构都有一个运算集合。
数据结构复习大纲第一章绪论1. 数据结构的基本概念和术语1.1 数据、数据元素、数据项、数据结构等基本概念1.2 数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系1.3 数据结构的两大逻辑结构和四种常用的存储表示方法2. 算法的描述和分析2.1 算法、算法的时间复杂度和空间复杂度、最坏的和平均的时间复杂度等概念2.2 算法描述和算法分析的方法,对于一般算法能分析出时间复杂度第二章线性表1. 线性表的逻辑结构1.1 线性表的逻辑结构特征2. 线性表的顺序存储结构2.1 顺序表的含义及特点,即顺序表如何反映线性表中元素之间的逻辑关系2.2 顺序表上的插入、删除操作及其平均时间性能分析3. 线性表的链式存储结构3.1 链表如何表示线性表中元素之间的逻辑关系3.2 链表中头指针和头结点的使用3.3 单链表、双(向)链表、循环链表链接方式上的区别3.4 单链表上实现的建表、查找、插入和删除4. 顺序表和链表的比较4.1 顺序表和链表的主要优缺点4.2 针对线性表上所需要执行的主要操作,知道选择顺序表还是链表作为其存储结构才能取得较优的时空性能第三章栈和队列1.栈的逻辑结构、存储结构及其相关算法1.1 栈的逻辑结构特点,栈与线性表的异同1.2 顺序栈和链栈上实现的进栈、退栈等基本算法1.3 栈的“上溢”和“下溢”的概念及其判别条件2. 队列的逻辑结构、存储结构及其相关算法2.1 队列的逻辑结构特点,队列与线性表的异同2.2 顺序队列(主要是循环队列)和链队列上实现的入队、出队等基本算法2.3 队列的“上溢”和“下溢”的概念及其判别条件2.4 使用数组实现的循环队列取代普通的顺序队列的原因2.5 循环队列中对边界条件的处理方法3. 栈和队列的应用3.1 栈和队列的特点,什么样的情况下能够使用栈或队列3.2 表达式求值的算法思想,及栈变化情况。
第四章串、数组和广义表1.串1.1 串的有关概念及基本运算1.2 串与线性表的关系2.多维数组2.1 多维数组的逻辑结构特征2.2 多维数组的顺序存储结构及地址计算方式2.3 数组是一种随机存取结构的原因2.4 矩阵的压缩存储(对称矩阵、三角矩阵、稀疏矩阵)的表示方式和对应的地址计算方式。
数据结构期末复习要点!!!数据结构复习要点第2章:线性表的概念以及顺序和链式存储下查找、插入和删除算法和算法的时间复杂性。
第3章:1. 概念: 栈、队列和循环队列; 2. 栈和队列的初始化、插入和删除算法;3. 栈、队列和循环队列的空、满条件。
第5章:数组、三元组和十字链表的定义第6章:1. 各种定义;2.二叉树的链式存储结构和遍历(先序、中序、后序和层次);3. 树和森林的存储、遍历以及与二叉树的相互转换;4. Huffman树的构造。
第7章:1. 图的存储(邻接矩阵、邻接表、邻接多重表)和遍历;2.最小生成树、关键路径和最短路的算法实现。
第9章:折半查找、二叉排序树、平衡二叉树和B-树的算法实现。
第10章:1.基本排序算法(冒泡、简单选择、直接插入)的编程;2.其它排序(希尔、快速、2-路归并、堆、表插入)的算法实现;3. 各种排序的稳定性。
第2章:线性表的概念以及顺序和链式存储下查找、插入和删除算法和算法的时间复杂性。
作业:2.2, 2.3, 2.6, 2.7, 2.8, 2.15, 2.19, 2.20第3章:1. 概念: 栈、队列和循环队列; 2. 栈和队列的初始化、插入和删除算法;3. 栈、队列和循环队列的空、满条件。
作业:3.1, 3.6, 3.11,第5章:数组、三元组和十字链表的定义第6章:1. 各种定义;2.二叉树的链式存储结构和遍历(先序、中序、后序和层次);3. 树和森林的存储、遍历以及与二叉树的相互转换;4. Huffman树的构造。
作业:6.5, 6.6, 6.14, 6.19, 6,23, 6.26, 6.27, 6.28, 6.37, 6.38, 6,47第7章:1. 图的存储(邻接矩阵、邻接表、邻接多重表)和遍历;2.最小生成树、关键路径和最短路的算法实现。
作业:7.1, 7.7, 7.11, 7.13第9章:折半查找、二叉排序树、平衡二叉树和B-树的算法实现。
作业:9.9, 9.11, 9.14,第10章:1.基本排序算法(冒泡、简单选择、直接插入)的编程;2.其它排序(希尔、快速、2-路归并、堆、表插入)的算法实现;3. 各种排序的稳定性。
作业:10.1, 10.3第一章绪论第二节基本概念和术语1.3 抽象数据类型的表示与实现类C语言的简要说明例1-7 抽象数据类型Triplet的表示与实现1.4 算法和算法分析算法算法(Algorithm)就是对特定问题求解步骤的一种合理的描述。
它有如下特征:有穷性;确定性;可行性。
当然需要输入初始条件-输入,和操作结果-输出。
算法设计的要求 1. 正确性;2. 可读性;3.健壮性; 4. 高效率性和低存储性1.4 算法和算法分析算法效率的度量—时间和空间的度量衡量一个算法的效果(好坏),最广泛采用的标准主要是看这个算法解决问题所花费的时间长短,当然一般还要看所需要的存储空间。
但是一个算法执行所花费的时间既与计算机的速度有关,也与要求解的实例有关。
为了客观公正,必需要一个通用的标准。
这个标准就是找一个参变量--问题的规模(Size), 即一个实例按二进制编码输入到计算机的编码长度,也就是所占存储的大小。
问题的规模通常用整数量n表示。
一般情况是数据元素的大小假定为1个单位,这样问题的规模n就是数据元素的个数(大部分情况都是这样)。
为了便于比较同一问题的不同算法或者分析一个问题的算法复杂性,通常的做法是,从算法中选取几种对于所研究的问题来说是基本操作的原操作,以该基本算法重复执行的次数作为算法的时间度量。
这个度量一般是n的某个函数f(n),算法的时间复杂度记作T(n)=O(f(n)). 如:时间复杂度分为最坏情况、最好情况和平均情况下的时间复杂度。
空间复杂度是衡量一个算法所需存储空间尺度,记作S(n)=O(f(n)).2.3 线性表的链式表示和实现线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单、直观的公式来表示。
然而, 这种存储结构的弱点是: 在作插入或删除操作时,需移动大量数据元素,特别是当数据元素本身的大小比较大时尤为如此。
线性表的链式存储结构--它不再要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表可随机存取的优点(即查找不是很方便)。
2.3.1 线性链表线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
因此,对每个数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。
这两部分信息组成数据元素的存储映像,称为结点(node)。
它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。
>>>带头结点的单链表:即在单链表的第一的结点之前附设一个不存储任何信息的结点,这个结点称为头结点。
<<<3. 单链表的删除操作4. 查找、插入和删除算法的时间复杂度算法2.8, 2.9和2.10的复杂度均为O(n)因为要操作第i个结点,必须首先要找到第i-1个结点。
2.3.2 循环链表3.1 栈(后进先出表、LIFO表)3.1.1 抽象的数据类型的定义3.1.2 栈的表示和实现循环链表(circular linked list)是另一种形式的链式存储结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
2.3.3 双向链表第一章的作业 2.2, 2.4, 2.6, 2.7, 2.8 2.15, 2.212.4 一元多项式的表示和实现两个多项式相加的算法3.4 队列队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表。
它只允许在表的一端进行插入, 而在另一端删除元素。
这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。
在队列中,允许插入的一端叫队尾(Rear), 删除的一端叫队头(Front).队列的链式表示和实现---链队列本章的作业第3.3 3.4 3.13 3.28题第4章串(string,或字符串)串也就是字符串。
计算机上的非数值处理的对象基本上是字符串数据。
在事务处理程序中,顾客的姓名和地址以及货物的名称、产地和规格等一般是作为字符串处理的。
又如信息检索系统、文字编辑程序、问答系统、自然语言翻译系统以及音乐分析程序等,都是以字符串数据作为处理对象的。
对字符串数据的处理比处理整数和浮点数要复杂得多。
4.1 串类型的定义串(string,字符串)是由零个或多个字符组成的有限序列,一般记为S =…abcdef‟ . 其中,S是串的名,用单引号括起来的字符序列是串的值, 字符可以是字母、数字、汉字或其他字符; 串中字符的数目称为串的长度。
串中任意个连续的字符组成的子序列称为该串的子串。
包含子串的串相应地称作主串。
通常称字符在序列中的序号为该字符在串中的位置。
子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
称两个串是相等的当且仅当这两个串的值相等。
也就是说,只有当两个串的长度相等,并且各个对应位置的字符都相等时才相等。
零个字符的串称为空串(null string),它的长度为零。
4.2 串的表示和实现4.2.1定长顺序存储表示4.2.2 堆分配存储表示4.2.3 串的块链存储表示4.3 串的模式匹配算法串(string,字符串)是由零个或多个字符组成的有限序列. 串中任意个连续的字符组成的子序列称为该串的子串(模式串),包含子串的串相应地称作主串。
子串的定位操作通常称做串的模式匹配。
如果主串中有子串,则称匹配成功;否则匹配失败或叫匹配不成功。
4.3.1 求子串位置的定位函数Index(S,T,pos)int Index(SString S, SString T; int pos){succ=0;for(i=pos;(i<=S[0]-T[0]+1 && succ=0);++i){j=1;while(j>0 && j<=T[0]) j=(S[i+j-1]==T[j])?j+1:0;if(j>T[0]) succ=i;}return succ;}以上算法的时间复杂性最好情况:O(n+m)最坏情况:O(n*m)4.3.2模式匹配的一种改进算法---- KMP算法这种改进算法是D. E. Knuth与V. R. Pratt和J. H. Morris同时发现的,因此人们称它为克努特一莫里斯一普拉特操作(简称为KMP算法)。
此算法可以在O(n+m)的时间数量级上完成串的模式匹配操作。
4.4 串的操作应用举例4.4.1 文本编辑4.4.2 建立词索引表4.4.3 程序和文章的编译4.4.4 文本文件的压缩4.4.5 ……复习基本内容包括:数据类型的定义,三种存储表示(定长顺序存储结构、块链存储结构、堆分配存储结构)和各种基本操作的实现;串的模式匹配算法。
学习要点:主要围绕基本内容展开。
第3和4章的作业题第3.3 3.4 3.13 3.28题第4.4 4.7 4.17 4.25题第5章数组和广义表数组是同学们已经很熟悉的一种数据类型,几乎所有的程序设计语言都把数组类型设定为固有类型。
广义表也是线性表的一种推广,它的每一项不光是单个的元素,也可以是一个子广义表。
如D=(( ),(a),(b,c),(a,b,c),(a,(b,c)))数组和广义表可以看成是线性表在下述含义上的扩展: 表中的数据元素本身也是一个数据结构。
本章讨论它们的定义和实现。
5.1 数组的定义二维数组5.2 数组的顺序表示和实现由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。
因此,采用顺序存储结构表示数组是自然的事了。
由于存储单元是一维的结构,而数组是个多维的结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题,即按照什么样的次序来存储数组元素。
对二维数组,一般有行优先和列优先两种方式。
5.3 矩阵的压缩存储矩阵是很多科学与工程计算问题中研究的数学对象。
在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。
有时为了节省存储空间,可以对这类矩阵进行压缩存储。
所谓压缩存储是指: 为多个值相同的元只分配一个存储空间;对零元不分配空间。
假若值相同的元素或者零元素在矩阵中的分布有一定规律,则我们称此类矩阵为特殊矩阵;反之,称为稀疏矩阵。
5.3.1 特殊矩阵初等矩阵对称矩阵上三角矩阵三对角矩阵5.3.2 稀疏矩阵三元组顺序表行逻辑链接的顺序表十字链表1. 三元组顺序表矩阵转置的两个算法算法二(快速转置算法):本算法需要附设num和cpot两个向量。