《数据结构与算法》PPT课堂课件-第2章-表.ppt
《《数据结构与算法》PPT课堂课件-第2章-表.ppt》由会员分享,可在线阅读,更多相关《《数据结构与算法》PPT课堂课件-第2章-表.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12023/3/23第二章第二章 表表 理解表是由同一类型的元素组成的有限序列的概念。熟悉定义在抽象数据类型表上的基本运算。掌握实现抽象数据类型的一般步骤。掌握用数组实现表的步骤和方法。掌握用指针实现表的步骤和方法。掌握用间接寻址技术实现表的步骤和方法。掌握用游标实现表的步骤和方法。掌握单循环链表的实现方法和步骤。掌握双链表的实现方法和步骤。22023/3/23第二章第二章 表表2.1 ADT表 线性结构特点:在数据元素的非空有限集中存在唯一的一个被称作“第一个”的数据元素存在唯一的一个被称作“最后一个”的数据元素除第一个外,集合中的每个数据元素均只有一个前驱除最后一个外,集合中的每个数据元素
2、均只有一个后继32023/3/23定义:一个线性表是n个数据元素的有限序列例 英文字母表(A,B,C,.Z)是一个线性表特征:n元素个数n表长度,n=0空表n1itable=(ListItem)malloc(size*sizeof(ListItem);/*分配空间*/L-maxsize=size;L-n=0;/*将当前线性表长度置0*/return L;/*成功,返回L*/82023/3/232、判断表是否为空及求表长函数(1)判断线性表L是否为空 int ListEmpty(List L)if(L-n=0)return TRUE;else return FALSE;(2)求表长int Get
3、Length(List L)return L-n;return L-n=0;以上两个程序的时间复杂性均为:O(1)92023/3/233、元素x定位函数 返回元素x在表中的位置位置,当元素x不在表中时返回0。int ListLocate(LISTItem x,List L)int i;for(i=0;in;i+)if(L-tablei=x)return +i;?return 0;此算法所用时间与元素x所在位置有关。假设x存在于第i个位置,则找到x需要比较i次。故在最坏情况下,时间性能为O(n)。102023/3/234、获取线性表L中的某个数据元素内容的函数ListItem ListRetri
4、eve(int k,List L)if(kL-n)return ERROR;/*判断k值是否合理,若不合理,返回ERROR*/return L-tablek-1;时间复杂性O(1)112023/3/235、表元素插入运算void ListInsert(k,x,L)n定义:线性表的插入是指在第k(0k n)个元素之之后后插入一个新的数据元素x,使长度为n的线性表 变成长度为n+1n+1的线性表 需将第i+1至第n共(n-k)n-k)个元素后移122023/3/23内存a1a2ak+1ak+2an01kV数组下标n-1k+1n12k+1元素序号k+2nn+1内存a1a2ak+1ak+2an01k-
5、1V数组下标n-1kn12k元素序号k+1nn+1an-1x132023/3/23int ListInsert(int k,ListItem x,List L)int i;if(L-n=L-maxsize)return ERROR;/*检查是否有剩余空间*/if(kL-n)return ERROR;/*检查k值是否合理*/for(i=L-n-1;i=k;i-)L-tablei+1=L-tablei;/*将线性表第k个元素之后的所有元素向后移动 L-tablek=x;/*将新元素的内容放入线性表的第k+1个位置*/L-n+;142023/3/23n算法时间复杂度T(n)设Pk是在第k个元素之后插
6、入一个元素的概率,则在长度为n的线性表中插入一个元素时,所需移动的元素次数的平均次数为:若假设在表中任何合法位置插入元素的机会是均等的,则:152023/3/236、表元素删除运算n定义:线性表的删除是指将第k(1i n)个元素删除,使长度为n的线性表 变成长度为n-1n-1的线性表 需将第k+1至第n共(n-k)n-k)个元素前移162023/3/23内存a1a2akak+1an01k-1V数组下标n-1kn12k元素序号k+1nn+1内存a1a2ak+1V数组下标01k-1n-2kn-112k元素序号k+1n-1nanak+2172023/3/23n算法评价设Qi是删除第i个元素的概率,则
7、在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为:故在顺序表中插入或删除一个元素时,平均移动表的一半元素,当n很大时,效率很低。182023/3/237、输出顺序表中所有元素的运算void PrintList(List L)int i;for(i=0;in;i+)ItemShow(L-tablei);/*此函数用以输出元素*/时间复杂性:O(n)192023/3/232.2.4顺序存储结构的优缺点n优点逻辑相邻,物理相邻无须为表示表中元素之间的顺序关系增加额外的存储空间可随机存取任一元素存储空间使用紧凑n缺点插入、删除操作需要移动大量的元素(除操作在表尾的位置进行外)预先分配空间
8、需按最大空间分配,利用不充分表容量难以扩充202023/3/23n2.3 用指针实现表2.3.1 用指针实现表的特点:n用一组任意的存储单元存储线性表的数据元素n利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素n每个数据元素ak,除存储本身信息外,还需存储其直接后继的信息n结点数据域:元素本身信息指针域:指示直接后继的存储位置数据域 指针域结点212023/3/23例 线性表 (ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG)4313103771925数据域指针域LIQIANSUNWANGWUZHAOZHENGZHOU存储地址1713192531374331firs
9、t第一个元素指针ZHAOQIANSUNLIZHOUWUZHENGWANG0first222023/3/23n实现typedef struct node*link;typedef struct node ListItem element;link next;Node;datalinkp结点(*p)(*p)表示p所指向的结点(*p).datap-data表示p指向结点的数据域(*p).linkp-link表示p指向结点的指针域2.3.2 单链表的数据类型n定义:结点中只含一个指针域的链表,也叫线性链表232023/3/23h空表ha1a2an 头结点头结点:在单链表第一个结点前附设一个结点叫头结点
10、头结点指针域为空表示线性表为空据此可定义用指针实现表的结构List如下:typedef struct llist *List;typedef struct llist link first;Llist;242023/3/232.3.3 单链表的基本运算1、创建一个空表List ListInit()List L=malloc(sizeof*L);L-first=NULL;return L;2、判断当前表L是否为空表Int ListEmpty(List L)return L-first=NULL;252023/3/233、求表长函数Int ListLength(List L)int len=0;l
11、ink p;p=L-first;while(p)/*通过对表L进行线性扫描计算*/len+;p=p-next;return len;时间复杂性为:O(n)思考?:如何改进使得时间复杂性降为O(1)262023/3/234、从表首开始逐个元素向后进行线性扫描直至找到L中第k个元素ListItem ListRetrieve(int k,List L)int i;link p;if(kfirst;i=1;while(inext;i+;return p-element;时间复杂性为:O(k)272023/3/235、定位元素x(查找运算)查找单链表中是否存在结点X,若有则返回X结点的位置;否则返回0;
12、int ListLocate(ListItem x,List L)int i=1;link p;p=L-first;while(p&p-element!=x)p=p-next;i+;return p?i:0;/如果p为空,说明x不存在返回0;否则返回其位置i282023/3/23While循环中语句频度为若找到结点X,为结点X在表中的序号否则,为n算法评价292023/3/236 6、在位置在位置k后后插入元素插入元素x 函数的运算步骤是:函数的运算步骤是:先扫描链表找到插入位置先扫描链表找到插入位置p,然后建立一然后建立一个存储待插入元素个存储待插入元素x x的新结点的新结点y,再将结点再将
13、结点y插入到结点插入到结点p之后。之后。插入的插入的示意图如下:示意图如下:yyy-next=first;y-next=first;firstfirst=y;first=y;py-next=p-next;y-next=p-next;p-next p-next=y=y;302023/3/23Void LsitInsert(int k,ListItem x,List L)link p,y;int i;if(k first;/找插入位置 for (i=1;i next;y=NewNode();y-element=x;if(k)y-next=p-next;/在位置p处插入 p-next=y;else
14、y-next=first;first=y;/在表首插入需要特殊处理(若引入表头结点则可纳入 一般情况)其时间复杂性为O(k)算法的主要计算时间用于寻找正确的插入位置,故312023/3/237 7、删除、删除位置位置k k处的元素处的元素给给x x 函数的运算步骤是:依次处理以下函数的运算步骤是:依次处理以下3 3种情况。种情况。()k1k1k1。其删除的示意图如下其删除的示意图如下p=q-next;q-next=p-next;q-next=p-next;Free p;Free p;给出越界信息;给出越界信息;直接修改表首指针直接修改表首指针first,删除表首元素删除表首元素322023/3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法 数据结构 算法 PPT 课堂 课件
限制150内