大学数据结构课件线性表.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大学数据结构课件线性表.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 数据结构 课件 线性
- 资源描述:
-
1、主要知识点主要知识点线性表抽象数据类型线性表抽象数据类型顺序表顺序表单链表单链表循环链表与双向链表循环链表与双向链表1.1.线性表的定义线性表的定义 线性表是线性表是n(n0)个数据元素的有限序列。由相同类型个数据元素的有限序列。由相同类型数据元素(数据元素(a1, a2, an)组成的线性结构。数据元素之间组成的线性结构。数据元素之间存在着线性的逻辑关系:存在着线性的逻辑关系:(1)表中有且仅有一个开始结点;)表中有且仅有一个开始结点;(2)表中有且仅有一个终端结点;)表中有且仅有一个终端结点;(3)除开始结点外,表中每个结点均只有一个前趋)除开始结点外,表中每个结点均只有一个前趋结点(结点
2、(Predecessor);(4)除终端结点外,表中每个结点只均只有一个后)除终端结点外,表中每个结点只均只有一个后继结点(继结点(Successor)2.2.线性表抽象数据类型线性表抽象数据类型数据对象数据对象: a1, a2, , an, ai的数据类型为的数据类型为ElemType操作集合操作集合:(1) Initiate(L) 初始化线性表初始化线性表(2) Length(L) 求当前数据元素个数求当前数据元素个数(3) Insert(L, i, x) 插入数据元素插入数据元素*(4) Delete(L, i) 删除数据元素删除数据元素*(5) Get(L, i) 取数据元素取数据元素
3、逻辑关系逻辑关系: , 对对ai,当,当1in时,它有一个直时,它有一个直接前趋接前趋ai-1;当;当1in时,它有一个直接后继时,它有一个直接后继ai+1。(6) Locate(L, x) 确定确定x在表中的位置在表中的位置1.顺序表的存储结构顺序表的存储结构 实现顺序存储结构的方法是实现顺序存储结构的方法是使用数组使用数组。数组把线性表。数组把线性表的数据元素存储在一块的数据元素存储在一块连续地址空间连续地址空间的内存单元中,这样的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就
4、表现在数据数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置上。元素的存储单元的物理前后位置上。 向量是内存中一批地址连续的存储单元。所以,线性向量是内存中一批地址连续的存储单元。所以,线性表的顺序存储也称为向量存储。表的顺序存储也称为向量存储。顺序表的存储结构如图所示顺序表的存储结构如图所示顺序存储结构的顺序存储结构的线性表称作顺序表线性表称作顺序表a0a1a2a3a4a5elemlength=6MaxSize-1 1 2 3 4 5 6 第第i个元素的地址:个元素的地址: LOC(ai)=LOC(a1)+L*(i-1)typedef struct ElemTyp
5、e elem MAXSIZE; int length; Sqlist;事先定义的事先定义的常量常量结构体类型名,之后可用结构体类型名,之后可用于说明结构体变量于说明结构体变量在结构体中还可以使用动态一维数组。如下定义:在结构体中还可以使用动态一维数组。如下定义:typedef struct ElemType *elem ; int length ; Sqlist1 ;使用指针表示使用指针表示数组域数组域表长域表长域SqlistSqlist a ; a ;a.Elema.Elem=(Sqlist1=(Sqlist1* *) )malloc(MAXSIZEmalloc(MAXSIZE* *size
6、of(ElemTypesizeof(ElemType););free (free (a.elema.elem) )#define MAXSIZE 1002.顺序表操作的实现(顺序表操作的实现(线性表在向量中基本运算的实现线性表在向量中基本运算的实现)#define MAXSIZE 100Typedef int ElemType ; typedef struct ElemType elem MAXSIZE; /*数组域数组域*/ int length; /*表长域表长域*/ Sqlist; /*结构体类型名结构体类型名*/int Insert (Sqlist *L, int i, ElemTyp
7、e x)int j;for(j = L-length; j i; j-) L-elemj = L-elemj-1; /*依次后移依次后移*/ L-elemi = x; /*插入插入x*/L-length +; /*元素个数加元素个数加1*/return 1;typedef struct ElemType elem MAXSIZE; int length; Sqlist; (2 2)删除数据元素删除数据元素ListDelete(LListDelete(L, i, x), i, x)(2 2)删除数据元素操作的算法实现删除数据元素操作的算法实现 int Delete ( Sqlist *L, in
8、t i) int j; for(j = i +1; j lengh-1; j+) L-elemj-1 = L - elemj; /*依次前移依次前移*/ L - lengh-;/*数据元素个数减数据元素个数减1*/ return 1; 3.顺序表操作的效率分析顺序表操作的效率分析时间效率分析时间效率分析:算法时间主要耗费在移动元素的操作上,因此计算时间复算法时间主要耗费在移动元素的操作上,因此计算时间复杂度的基本操作杂度的基本操作(最深层语句频度最深层语句频度) 而移动元素的个数取决于插入或删除元素的位置而移动元素的个数取决于插入或删除元素的位置i若若i =lengh,则根本无需移动(特别快)
9、;则根本无需移动(特别快);若若i =0,则表中元素全部要后移(特别慢);则表中元素全部要后移(特别慢);应当考虑在各种位置插入(共应当考虑在各种位置插入(共n+1种可能)的平均移动次种可能)的平均移动次数才合理。数才合理。设设 Pi 是在第是在第 i 个存储位置插入一个数据元素的概个存储位置插入一个数据元素的概率,顺序表中的数据元素个数为率,顺序表中的数据元素个数为n, 当在顺序表的当在顺序表的任何位置上插入数据元素的概率相等时,有任何位置上插入数据元素的概率相等时,有Pi=1/(n+1),则则 同理可证同理可证: :顺序表删除一元素的时间效率为顺序表删除一元素的时间效率为: :T(n)=(
10、n-1)/2 顺序表中的其余操作都和数据元素个数顺序表中的其余操作都和数据元素个数n n无关,因此,无关,因此,在顺序表中插入和删除一个数据元素的时间复杂度为在顺序表中插入和删除一个数据元素的时间复杂度为O O( (n n), ), 其余操作的时间复杂度都为其余操作的时间复杂度都为O O(1)(1)插入插入效率:效率:删除删除效率:效率:4. 顺序表应用举例顺序表应用举例 例:编程实现如下任务例:编程实现如下任务: :建立一个线性表,首先依次建立一个线性表,首先依次输入数据元素输入数据元素1 1,2 2,3 3,1010,然后删除数据元素,然后删除数据元素5 5,最后依次显示当前线性表中的数据
11、元素。要求采用顺序最后依次显示当前线性表中的数据元素。要求采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不表实现,假设该顺序表的数据元素个数在最坏情况下不会超过会超过100100个。个。实现方法:实现方法:1 1、采用直接编写一个主函数实现。、采用直接编写一个主函数实现。2 2、利用已设计实现的抽象数据类型模块。(存放在头文、利用已设计实现的抽象数据类型模块。(存放在头文件名为件名为SqList.hSqList.h中,通过中,通过 # #include “include “SqList.hSqList.h” ” )程序设计如下:程序设计如下:void main(void)Sqlist
12、myList;int i , x;Initiate(&myList);for(i = 0; i 10; i+) Insert(&myList, i, i+1);Delete(&myList, 4);for(i = 0; i Length(myList); i+) Get(myList, i, &x);程序运行结果:程序运行结果:1 2 3 4 6 7 8 9 10 elem 100 length=0#include #include Sqlist.h#define MAXSIZE 100typedef int ElemType;elem 0=1Elem1=2Elem4=5Elem9=10 le
13、ngth=10typedef struct ElemType elem MAXSIZE; int length; Sqlist;elem 0=1Elem1=2Elem4=6Elem8=10 length=9主要优点主要优点: 算法简单,空间单元利用率高;算法简单,空间单元利用率高;主要缺点主要缺点: 1. 插入和删除时需要移动较多的数据元素,所以在频插入和删除时需要移动较多的数据元素,所以在频繁时行插入、删除操作时效率较低。繁时行插入、删除操作时效率较低。 2.需要预先确定数据元素的最大个数。并预先占用一需要预先确定数据元素的最大个数。并预先占用一片地址连续的存储空间。片地址连续的存储空间。
14、3. 如果插入数据元素量超过预先分配的存储空间时,如果插入数据元素量超过预先分配的存储空间时,要临时扩大有很大困难。要临时扩大有很大困难。线性表顺序存储结构的主要优缺点线性表顺序存储结构的主要优缺点线性表的链表存储结构的特点:是构成链表的结点(即分线性表的链表存储结构的特点:是构成链表的结点(即分配给每一个数据元素的存储单元)可分为两个域(数据域配给每一个数据元素的存储单元)可分为两个域(数据域和指针域)。数据域保存数据元素本身的数据信息,指针和指针域)。数据域保存数据元素本身的数据信息,指针域保存其直接后继结点的地址(称为指针)。数据元素间域保存其直接后继结点的地址(称为指针)。数据元素间的
15、逻辑关系由每个结点的指针体现。所以,逻辑上相邻的的逻辑关系由每个结点的指针体现。所以,逻辑上相邻的数据元素在物理上不要求相邻。因此它不需要一片地址连数据元素在物理上不要求相邻。因此它不需要一片地址连续的存储空间,可以避免了顺序表所具有的缺点。续的存储空间,可以避免了顺序表所具有的缺点。指针域指针域nextnext或或指针域指针域nextnext或或存储数据元素信息(简单类型或结存储数据元素信息(简单类型或结构类型)的子域构类型)的子域存储直接后继结点的地址(即存储位置存储直接后继结点的地址(即存储位置) )的子域(的子域(存储地址的变量称为指针变量存储地址的变量称为指针变量)2.3.1 结点结
16、构与指针变量结点结构与指针变量结点的存储结构定义为结点的存储结构定义为:typedef int ElemType ;Typedef struct node ElemType data; /* 数据域数据域 */ struct node *next; /* 指针域指针域 */ Lnode1. 结点结构结点结构假设假设h, p, q为指针变量,可说明如下:为指针变量,可说明如下:Lnode *h, *p, *q; /* 4 bytes 未赋值未赋值 */h=NULL; /* set NULL to h */h=(Lnode*)malloc(sizeof(Lnode); /* point to a
展开阅读全文