- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE 8
算法与数据结构复习
第1章 绪论
一、基本概念
1、数据的基本单位是数据元素。
2、数据对象是性质相同的数据元素的集合。
3、数据项:数据的不可分割的最小单位。
4、数据结构是数据元素之间抽象的相互关系。
5、数据结构在计算机内存中的表示是指数据的存储结构。
6、数据逻辑结构的三种类型是线性结构和非线性结构(树型结构和图形结构)。
7、算法的5个重要特性是有穷性(或有限性)、确定性、可行性、输入和输出。
8、算法分析是为了找出高效的算法,算法效率通过空间复杂度和时间复杂度来描述。
9、空间复杂度是指在算法运行过程中临时占用的存储空间的大小。
10、时间复杂度是指算法中包含简单操作的次数。
例、求下列程序段的时间复杂度。
for( i=0;in;i++)
for(j=0;jm;j++)
a[i][j]=0;
时间复杂度是 O(n*m)
第2章 线性表
一、线性表
1、线性表是由零个或多个具有相同类型的元素组成的一个有序序列。
2、用数组表示的线性表
#define malength 100
struct LIST{
Elementtype elements[malength];
int last;
};
用数组表示一个线性表,表中的所有元素依次存储在数组的连续单元中。
在表头或中间插入或册除元素都要移动元素,移动多少个。
3、用指针表示的线性表
struct celltype{
Elementtype elements;
celltype *next;
};
用指针把表中的各个元素(称结点)依次链接起来,形成一个单向链表。
在链表中插入或册除结点都不要移动结点,移动多少个。
不带头结点的单链表h:
h
h
…..
^
不带头结点的单链表h为空的判定条件是:
h=NULL
带头结点的单链表h:
h
h
…..
^
带头结点的单链表h为空的判定条件是: h-next=NULL
二、栈
1、栈的定义
栈是一种特殊的线性表,栈是一种只能在叫做栈顶的一端进行进栈或出栈操作的线性数据结构。
栈的特点是“后进先出”。
例1、已知一个字符串,次序为3*-y-a/y^2,试利用栈写出把该串的次序改为3y-*ay2^/-的操作步骤。
例2、有6个元素a,b,c,d,e依次进栈,允许任何时候出栈,能否得到下列的每个出栈序列,若能,给出栈操作的过程,若不能,简述其理由。
(1)edcba (2) decba (3) dceab (4) abcde
解:对于(1)a,b,c,d,e 进栈,e,d,c,b,a出栈。
对于(2)a,b,c,d 进栈,d出栈,e进栈,e,c,b,a出栈。
对于(3)a,b,c,d 进栈,d出栈,c出栈,e进栈,e出栈,此时栈中,栈底是a,栈顶是b,不可能a先出栈,所以(3)是不可能是出栈序列。
对于(4)a进栈,a出栈,b进栈,b出栈,c进栈,c出栈,d进栈,d出栈,e 进栈,e出栈。
2、栈的表示
(1)用数组表示栈
栈的结构体:
typedef struct {
int top ;
elementtype elements[maxlength];
} STACK ;
STACK S ;
栈的容量:maxlength – 1 ;
栈空:S.top = maxlength ;
栈满:S.top = 0 ;
栈顶元素:S.elements[ S.top ] ;
(2)用指针表示栈
栈的结构体:
struct node{
Elementtype val;
node *next;
};
typedef node *STACK;
三、队列
1、队列的定义
队列是一种特殊的线性表,只允许在表的一端进行插入,另一端进行删除。
在表的一端进行插入的一端叫队列的尾;在表的一端进行删除的一端叫队列的头。
队列的特点是先进先出。
例1,一个队列的入队列序列是1,2,3,4,则队列的输出序列是1,2,3,4。
2、队列的表示
用指针表示队列
struct celltype {
elementtype element ;
celltype *next ;
}
注意:栈和队列的共同点是只允许在端点处插入和删除元素。
四、广义表
一个广义表是n(n30)个元素的一个有限序列。n是广义表的长度。 当n=0时 称为空表。
若(a1,a2,…,an)表示广义表,则(a1)表示广义表的头,(a2,…,an) 表示广义表的尾。
广义表的长度指该广义表中所包含的元素的个数。
广义表的深度指该广义表中所包含括号的层数。
例、广义表((a,b),c,d)的表头是(a,b),表尾是(c,d )。
第3章 树
文档评论(0)