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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

自考02331数据结构重点总结(最终修订)Word格式文档下载.doc

1、 顺序存储、链接存储、索引存储、散列存储(1)顺序存储:通常借助程序设计语言的数组描述。(2)链接存储:通常借助于程序语言的指针来描述。(3)索引存储:索引表由若干索引项组成。关键字是能唯一标识一个元素的一个或多个数据项的组合。(4)散列存储:该方法的基本思想是:根据元素的关键字直接计算出该元素的存储地址。5.算法必须满足5个准则:输入,0个或多个数据作为输入;输出,产生一个或多个输出;有穷性,算法执行有限步后结束;确定性,每一条指令的含义都明确;可行性,算法是可行的。算法与程序的区别:程序必须依赖于计算机程序语言,而一个算法可用自然语言、计算机程序语言、数学语言或约定的符号语言来描述。目前常

2、用的描述算法语言有两类:类Pascal和类C。6.评价算法的优劣:算法的正确性是首先要考虑的。此外,主要考虑如下三点: 执行算法所耗费的时间,即时间复杂性; 执行算法所耗费的存储空间,主要是辅助空间,即空间复杂性; 算法应易于理解、易于编程,易于调试等,即可读性和可操作性。以上几点最主要的是时间复杂性,时间复杂度常用渐进时间复杂度表示。7.算法求解问题的输入量称为问题的规模,用一个正整数n表示。8.常见的时间复杂度按数量级递增排列依次为:常数阶0(1)、对数阶0(log2n)、线性阶0(n)、线性对数阶0(nlog2n)、平方阶0(n2)立方阶0(n3)、k次方阶0(nk)、指数阶0(2n)和

3、阶乘阶0(n!)。9.一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数,它包括存储算法本身所占的存储空间、算法的输入输出数据所占的存储空间和算法在运行过程中临时占用的存储空间。第二章 线性表1.数据的运算是定义在逻辑结构上的,而运算的具体实现是在存储结构上进行的。2.只要确定了线性表存储的起始位置,线性表中任意一个元素都可随机存取,所以顺序表是一种随机存取结构。3.常见的线性表的基本运算:(1)置空表InitList(L) 构造一个空的线性表L。(2)求表长ListLength(L)求线性表L中的结点个数,即求表长。(3)GetNode(L,i) 取线性表L中的第

4、i个元素。(4)LocateNode(L,x)在L中查找第一个值为x 的元素,并返回该元素在L中的位置。若L中没有元素的值为x ,则返回0值。(5)InsertList(L,i,x)在线性表L的第i个元素之前插入一个值为x 的新元素,表L的长度加1。(6)DeleteList(L,i)删除线性表L的第i个元素,删除后表L的长度减1。4.顺序存储方法:把线性表的数据元素按逻辑次序依次存放在一组地址连续的存储单元里的方法。顺序表(Sequential List):用顺序存储方法存储的线性表称为顺序表。顺序表是一种随机存取结构,顺序表的特点是逻辑上相邻的结点其物理位置亦相邻。顺序表中结点ai 的存储

5、地址: LOC(ai)= LOC(a1)+(i-1)*c 1in,5.顺序表上实现的基本运算:(1)插入:该算法的平均时间复杂度是O(n),即在顺序表上进行插入运算,平均要移动一半结点(n/2)。在第i个位置插入一个结点的移动次数为n-i+1(2)删除:顺序表上做删除运算,平均要移动表中约一半的结点(n-1)/2,平均时间复杂度也是O(n)。删除第i个结点移动次数为n-i6.采用链式存储结构可以避免频繁移动大量元素。一个单链表可由头指针唯一确定,因此单链表可以用头指针的名字来命名。生成结点变量的标准函数 p=( ListNode *)malloc(sizeof(ListNode); /函数ma

6、lloc分配一个类型为ListNode的结点变量的空间,并将其首地址放入指针变量p中释放结点变量空间的标准函数 free(p);/释放p所指的结点变量空间 结点分量的访问 方法二:p-data和p-next指针变量p和结点变量*p的关系: 指针变量p的值结点地址, 结点变量*p的值结点内容7.建立单链表: (1) 头插法建表:算法: p=(ListNode *)malloc(sizeof(ListNode);/生成新结点p-data=ch; /将读入的数据放入新结点的数据域中next=head; head=p;(2) 尾插法建表: p=(ListNode *)malloc(sizeof(Lis

7、tNode); /生成新结点if (head=NULL) head=p;/新结点插入空表else rear-next=p;/将新结点插到*r之后rear=p;/尾指针指向新表尾(3) 尾插法建带头结点的单链表:头结点及作用:头结点是在链表的开始结点之前附加一个结点。它具有两个优点: 由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作就和在表的其它位置上操作一致,无须进行特殊处理; 无论链表是否为空,其头指针都是指向头结点的非空指针(空表中头结点的指针域空),因此空表和非空表的处理也就统一了。头结点数据域的阴影表示该部分不存储信息。在有的应用中可用于存放表长等附加信息。具

8、体算法:r=head;/尾指针初值也指向头结点while(ch=getchar()!=n) s=(ListNode *)malloc(sizeof(ListNode);/生成新结点 s- /将读入的数据放入新结点的数据域中 r-next=s; r=s;r-next=NULL;/终端结点的指针域置空,或空表的头结点指针域置空以上三个算法的时间复杂度均为O(n)。8.单链表上的查找:(带头结点)(1)按结点序号查找:序号为0的是头结点。p=head;j=0;/从头结点开始扫描 while(p-next&jnext为NULL或i=j为止 p=p-next; j+; if(i=j) return p;

9、/找到了第i个结点 else return NULL;/当i0时,找不到第i个结点时间复杂度:在等概率假设下,平均时间复杂度为:为n/2=O(n)(2)按结点值查找:ListNode *p=head-/从开始结点比较。表非空,p初始值指向开始结点 while(p&data!=key)/直到p为NULL或p-data为key为止/扫描下一结点 return p;/若p=NULL,则查找失败,否则p指向值为key的结点时间复杂度为:O(n)9.插入运算:插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。s=(ListNode *)malloc(sizeof(Lis

10、tNode); s-data=x; s-next=p- p-算法的时间主要耗费在查找结点上,故时间复杂度亦为O(n)。10.删除运算r=p-/使r指向被删除的结点ai p-next=r-next;/将ai从链上摘下free(r);/释放结点ai的空间给存储池算法的时间复杂度也是O(n).p指向被删除的前一个结点。链表上实现的插入和删除运算,无须移动结点,仅需修改指针。11.单循环链表在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。判断空链表的条件是head=head-12.仅设尾指针的单循环链表: 用尾指针rear表示的单循环链表对开始结点a1和终端结点an查找时间都是O

11、(1)。而表的操作常常是在表的首尾位置上进行,因此,实用中多采用尾指针表示单循环链表。判断空链表的条件为rear=rear-13.循环链表:循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。若在尾指针表示的单循环链表上实现,则只需修改指针,无须遍历,其执行时间是O(1)。LinkList Connect(LinkList A,LinkList B) /假设A,B为非空循环链表的尾指针LinkList p=A-/保存A表的头结点位置 A-next=B-next-/B表的开始结点链接到A表尾 free(B-next);/释放B表的头结点 B-/ return B

12、;/返回新循环链表的尾指针循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p-next是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等。在单链表中,从一已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。14.双向链表: 双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。双链表由头指针head惟一确定的。带头结点的双链表的某些运算变得方便。将头结点和尾结点链接起来,为双(向)循环链表。15.双向链表的前插和删除本结点操作双链表的前插操作void DInsertBefore(DListNode *p,DataType x)/在带头结点的双链表中,将值为x的新结点插入*p之前,设pNULL DListNode *s=malloc(s

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

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