数据结构期末复习.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构期末复习

2.1 线性表的逻辑结构 1. 线性表的定义:是n个数据元素的有限序列(a1, a2, … ai-1,ai, ai+1 ,…, an)数据元素ai的直接前趋ai的直接后继线性起点线性终点n为元素总个数,即表长下标,是元素的序号,表示元素在表中的位置空表n=0时称为线性表的抽象数据类型的定义: ADT List { 数据对象:D={ai | ai∈Elemset, i=1, 2,…, n, n≥0} 数据关系:R1={ai-1, ai | ai-1, ai∈D, i=2, …, n} 基本操作: InitList(L) 操作结果:构造一个空的线性表L DestroyList(L) 初始条件:线性表已存在 操作结果:销毁线性表L 2.2.1 顺序表的表示线性表的顺序表示又称为顺序存储结构或顺序映像。 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。顺序存储定义:简言之,逻辑上相邻,物理上也相邻用一组地址连续的存储单元依次存储线性表的元素,可通过数组来实现。顺序存储方法:线性表顺序存储特点逻辑上相邻的数据元素,其物理上也相邻;若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出(利用数组下标)。计算方法是(参见存储结构示意图):设首元素a1的存放地址为LOC(a1)(称为首地址),设每个元素占用存储空间(地址长度)为L字节,则表中任一数据元素的存放地址为: LOC(ai) = LOC(a1) + L *(i-1) LOC(ai+1) = LOC(ai) + L 线性表的顺序存储结构示意图 地址 内容 元素在表中的位序b=LOC(a1)1a1a2……aiai+1……anLb + L2ib +(i-1)Li+1nb +(n-1)L空闲区b +(max-1)L例4:一个一维数组M,下标的范围是0到9,每个数组元素用相邻的5个字节存储。存储器按字节编址,设存储数组元素M[0]的第一个字节的地址是98,则M[3]的第一个字节的地址是113解:地址计算通式为:LOC(ai) = LOC(a1) + L *(i-1)因此:LOC( M[3] ) = 98 + 5 ×(3-0) =113线性表的顺序存储结构定义(静态)#define MAXSIZE 100typedef struct { ElemType elem[MAXSIZE]; //元素数组 int length; //当前表长}SqList;elemlengthSqList L; //声明L顺序表 L: …….int a; a:本节小结线性表顺序存储结构特点:逻辑关系上相邻的两个元素在物理存储位置上也相邻;优点:可以随机存取表中任一元素O(1);存储空间使用紧凑缺点:在插入,删除某一元素时,需要移动大量元素O(n);预先分配空间需按最大空间分配,利用不充分;表容量难以扩充为克服这一缺点,我们引入另一种存储形式:链式存储结构见2.3节2.3 线性表的链式表示和实现2.3.1 链表的表示2.3.2 链表的实现2.3.3 链表的运算效率分析本节小结结点数据域 指针域2.3.1 链表的表示用一组任意的存储单元存储线性表的数据元素利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息结点 数据域:元素本身信息指针域:指示直接后继的存储位置ana2……a1headhead与链式存储有关的术语:1、结点:数据元素的存储映像。由数据域和指针域两部分组成;2、链表: n 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构。3、单链表、双链表、多链表、循环链表: 结点只有一个指针域的链表,称为单链表或线性链表;有两个指针域的链表,称为双链表;有多个指针域的链表,称为多链表;首尾相接的链表称为循环链表。循环链表示意图:1. 单链表的建立和输出3.swf头插法建单链表的演示4.swf尾插法建单链表的演示1. 单链表的建立和输出实例:用单链表结构来存放26个英文字母组成的线性表 ( A,B,C,…,Z ), 请写出C语言程序。难点分析:每个数据元素在内存中是“零散”存放的,其首地址怎么找?又怎么一一链接?实现思路:先开辟头指针,然后陆续为每个数据元素开辟存储空间并赋值,并及时将地址送给前面的指针。将全局变量及函数提前说明:#includestdio.h#includestdlib.htypedef struct node { char data; struct node *next;} LinkNode, *LinkList; LinkNode *p, *q, *head; int n ; int m=sizeof(LinkNod

文档评论(0)

整理王 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档