ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:29.88KB ,
资源ID:18930963      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18930963.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(自考数据结构导论笔学习记Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

自考数据结构导论笔学习记Word文件下载.docx

1、另一方面,由于逻辑结构不包括结点内容即数据元素本身的表示,因此存储实现的另一主要内容是建立数据元素的机内表示。按上述思路建立的数据的机内表示称为数据的存储结构。 存储结构包括三部分:1 存储结点,每个存储结点存放一个数据元素。2 数据元素之间关联方式的表示,也就是逻辑结构的机内表示。3 附加设施,如方便运算实现而设置的“哑结点”等。 四种基本存储方式:1 顺序存储方式:每个存储结点只含一个数据元素。所有存储结点相继存放在一个连续的存储区里。用存储结点间的位置关系表述数据元素之间的逻辑关系。2 链式存储方式:每个存储结点不仅含有一个数据元素,还包含一组指针。每个指针指向一个与本结点有逻辑关系的结

2、点,即用附加的指针表示逻辑关系。3 索引存储方式:每个存储结点只含一个数据元素,所有存储结点连续存放。此外增设一个索引表,索引指示各存储结点的存储位置或位置区间端点。4 散列存储方式:每个结点含一个数据元素,各个结点均匀分布在存储区里,用散列函数指示各结点的存储位置或位置区间端点。1.3.2 运算实现 运算只描述处理功能,不包括处理步骤和方法;运算实现的核心是处理步骤的规定,即算法设计。 算法:算法规定了求解给定问题所需的所有处理步骤及其执行顺序,使得给定类型的任何问题能在有限时间内被机械的求解。 算法分类: 1:运行终止的程序可执行部分:又称为程序 2: 伪语言算法:不可以直接在计算机上运行

3、,但容易编写和阅读。 3:非形式算法:用自然语言,同时可能还使用了程序设计语言或伪语言描述的算法。1.4 算法分析 算法质量评价指标:1 正确性:能够正确实现处理要求2 易读性:易于阅读和理解,便于调试,修改和扩充3 健壮性:当环境发生变化,算法能够适当做出反应或处理,不会产生不需要的运行结果4 高效率:达到所需要的时空性能。如何确定一个算法的时空性能,称为算法分析一个算法的时空性能是指该算法的时间性能和空间性能,前者是算法包含的计算量,后者是算法需要的存储量。算法在给定输入下的计算量:1 根据该问题的特点选择一种或几种操作作为“标准操作”。2 确定每个算法在给定输入下共执行了多少次标准操作,

4、并将此次数规定为该算法在给定输入下的计算量。若无特殊说明,将默认以赋值语句作为标准操作。最坏情况时间复杂性:算法在所有输入下的计算量的最大值作为算法的计算量平均时间复杂性:算法在所有输入下的计算量的加权平均值作为算法的计算量。算法的输入规模(问题规模)是指作为该算法输入的数据所含数据元素的数目,或与此数目有关的其他参数。 常见时间复杂性量级:1 常数阶:O(1) 即算法的时间复杂性与输入规模N无关或N恒为常数。2 对数阶:Olog2 N 3 线性阶:O(N) 4 平方阶:O(N2)5 指数阶:O(2N次方)通常认为指数阶量级的算法实际是不可计算的,而量级低于平方阶的算法是高效率的第二章 线性表

5、2.1 线性表的基本概念 线性结构:线性结构是N(N大于等于0)个结点的有穷序列。 A I 称为Ai+1的直接前趋,A i+1称为Ai 的直接后继。为满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况。不含任何结点的线性结构记为()或 线性结构的基本特征:若至少含有一个结点,则除起始节点没有直接前趋外,其他结点有且只有一个直接前趋,除终端结点没有直接后继外,其他结点有且只有一个直接后继。2.1.2 线性表线性表的逻辑结构是线性结构。所含结点个数称为线性表的长度(表长)。表长为0的是空表。线性表的基本运算:1 初始化 initiate (L): 加工型运算,其作用是建立一个空表L= 。

6、2 求表长 length (L):引用型运算,其结果是线性表L的长度。3 读表元 get (L,i):引用型运算。若1小于等于i小于等于length(L),其结果是L的第i个结点,否则为一特殊值。4 定位(按值查找)locate(L,X):若L中存在一个或多个值与X相等,结果为这些结点的序号最小值,否则,运算结果为0。5 插入 insert (L,X,i):加工型运算。在L的第i个位置上增加一个值为X的新结点,参数i的合法取值范围是1-L+1。6 删除 delete (L,i):撤销L的第i个结点ai, i的合法取值范围是1-N。2.2 线性表的顺序实现2.2.1 顺序表 顺序表是线性表的顺序

7、存储结构,即按顺序存储方式构造的存储结构。 顺序表基本思想:顺序表的一个存储结点存储线性表的一个结点的内容,即数据元素(不含其他信息),所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列。 顺序表的特点:逻辑结构中相邻的结点在存储结构中仍相邻。 顺序表的类C语言描述:p17 Const maxsize=顺序表的容量 Typedef struct datatype date maxsize Int last; sqlist;Sqlist L;L表示线性表的长度,last-1 是终端结点在顺序表中的位置。常数maxsize为顺序表的容量。表长L.last , 终端结点 L.dataL.las

8、t-12.2.2 基本运算在顺序表上的实现 1 插入Void inset_sqlist (sqlist L,datatype x, int i) if (L.last = maxsize) error(表满); /*溢出*/If (iL.last+1) error (非法位置);For (j=L.last ; j=I; j-) L.dataj = L.data j-1; /*依次后移*/ L.datai-1 = x; /*置入*/ L.last =L.last+1 /*修改表长*/ 2. 删除Void delete_sqlist ( sqlist L, int I ) /*删除顺序表L中第i个

9、位置上的结点*/ If ( ( iL.last) error (非法位置);For ( j= i+1; j= L.last; j+) L.data j-2 = L.data j-1 ; /*依次前移,注意第一个L.dataj-2存放ai*/ L.last=L.last-1 /*修改表长*/3 定位Int locate_sqlist (sqlist L , datatype X) /*在顺序表中从前往后查找第一个值等于X的结点。若找到则回传该结点序号,否则回传0*/ I=1 ;While ( ( i= L.last) & (L.datai-1!=x) ) /*注意:ai在L.datai-1中*/

10、 i+; /*从前往后查找*/if (i next = NULL; return(t); 此算法说明的问题:1 语句 t = malloc(size); 有双重作用:1 由malloc自动生成一个类型为node的新结点。2指针型变量t得到一个值即指针,该指针指向上述新结点。2 要生成新结点必须通过调用malloc才能实现。3 语句t - next=NULL的作用是将头结点*t的链域置为NULL。4 为了建立一个空表,可定义一个lklist类型的变量head,并通过调用head =initiate_lklist( )使head成为指向一个空表的头指针。2 求表长 Int length_lklis

11、t(lklist head) /*求表head的长度,P是pointer类型的变量*/ p=head; J=0; While (p -next!=NULL) p=p-next; J+;Return (j ); 3 按序号查找 Pointer find_lklist ( lklist head ,int I ) /*在单链表head中查找第i个结点。若找到则回传指向该结点的指针,否则回传null*/ p= head; j=0; While ( p-next !=NULL)&( j j+; If (i=j) return (p); Else return(NULL); 4 定位 Int locat

12、e_lklist ( lklist head, datatype x) p=head ; j= 0;While ( (p-(p-data!=x) p= p- If p-data =x return(j); Else return (0); 5删除 Void delete_lklist ( lklist head, int i) p= find_lklist (head,i-1); /*调用按序号查找算法*/If (p!=NULL)q=p-p-next = q-free (q);else error(不存在第i个结点) free是库函数,结果是释放q所指结点占用的内存空间,同时q的值变成无定义。

13、6 插入 Void insert_lklist( lklist head,datatyped x ,int i) P=find_lklist (head, i-1);If ( p=NULL)Error (不存在第i个位置) Else s= malloc (size); s-data= x;next=p- p-next =s; 2.5 其他链表 循环链表尾结点的链域值不是NULL,而是指向头结点的指针。优点是从任一结点出发都能通过后移操作而扫描整个循环链表。但为找到尾结点,必须从头指针出发扫描表中所有结点。改进的方法是不设头指针而改设尾指针。这样,头结点和尾结点的位置为:rear-next-ne

14、xt 和rear.双链表:在每个结点中增加一个指针域,所含指针指向前趋结点。 双链表的摘除*P的操作:prior-prior=p-prior; 链入操作:P后面链入*q: q-prior=p;prior=q;next =q; 2.6顺序实现与链接实现的比较 空间性能的比较:存储结点中数据域占用的存储量与整个存储结点占用存储量之比称为存储密度。顺序表=1,链表top=0; Return(1); 2. 进栈 Int push(sqstackTp *sq, datatype x) if (s-top = sqstack_maxsize-1) error(“栈满”);return 0;Elsesq-t

15、op+; Sq-datasq-top=x; 3 退栈Int pop(sqstackTp *sq,datatype *x) if (sq-top=0) error(“下溢”);return(0);Else *x=sq-top;Sq-top-;Return(1);4 判栈空 Int emptystack(stackTp *sq)if sq-top=0Else return(0);5 取栈顶元素Int gettop( sqstackTp *sq, datatype *x)if(sq-top=0) return(0);Else*x =sq-3.1.3栈的链接实现 链栈由栈顶指针ls唯一确定。栈中其他结

16、点通过他们的next域链接起来。栈底结点的next域为NULL。因为链栈本身没有容量限制,所以不会出现栈满情况。 31.5 栈的简单应用和递归栈与函数调用: 函数调用时,先保存的位置后返回,后保存的位置先返回。所以每遇到一个函数调用便立刻将相应的返回位置进栈,调用结束时,栈顶元素正好是此函数的返回位置。递归与栈: 满足递归的条件:1 被定义项在定义中的应用具有更小的尺度。2 被定义项在最小尺度上的定义不是递归的。3.2 队列 队列也可以看成一种受限的线性表,插入限定在表的某一端进行(队尾),删除限定在另一端进行(队头) 队列又称先进先出线性表。 队列的基本运算:1 队列初始化initQueue

17、(Q) 加工型运算,设置一个空队列Q2 入队列enQueue(Q,X)加工型运算,将X插入到队列Q的队尾。若原队列为空,则X为原队尾结点的后继,同时是新队列的队尾结点。3 出队 outQueue(Q,X)加工型运算,若队列Q不空,则将队头元素赋给X,并删除队头结点,其后继成为新的队头结点。4 判队列空 emptyQueue(Q) 引用型运算,若队列Q为空,则返回1,否则为05 读队头gethead(Q,x)引用型运算,Q不空时由参数X返回队头结点的值,否则给一特殊标志。队列的顺序实现: 队列的顺序实现由一个一维数组及两个分别指示队头和队尾的变量组成,称为队头指针和队尾指针。约定队尾指针指示队尾

18、元素在一维数组中的当前位置,队头指针指示队头元素在一维数组中的当前位置的前一个位置。 如果按sq.rear=sq.rear+1; sq.datasq.rear=x和sq.front=sq.front+1分别进行入队和出队操作,则会造成“假溢出。”循环队列的入队操作:sq.rear=(sq.rear+1)%maxsize; sq.datasq.rear=x 出队操作:sq.front=(sq.front+1)%maxsize;判断循环队列队满的条件:(sq.rear+1)%maxsize)=sq.front 队空的条件:sq.rear=sq.front3.3 数组二维数组可以看成是一个被推广的线性表,这种线性表的每一个数据元素本身也是一个线性表。数组只有两种基本运算:1 读:给定一组下标,读取相应的数据元素2 写:给定一组下标,修改相应的数据元素数组元素的存储位置是下标的线性函数,计算存储位置所需的时间取决于乘法的时间,因此,存取任一元素的时间相等。通常将具有这一特点的存储结构成为随机存储结构。3.3.3矩阵的压缩存储 压缩存

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1