收藏 分享(赏)

数据结构之顺序表.ppt

上传人:Facebook 文档编号:2589424 上传时间:2018-09-22 格式:PPT 页数:25 大小:1.88MB
下载 相关 举报
数据结构之顺序表.ppt_第1页
第1页 / 共25页
数据结构之顺序表.ppt_第2页
第2页 / 共25页
数据结构之顺序表.ppt_第3页
第3页 / 共25页
数据结构之顺序表.ppt_第4页
第4页 / 共25页
数据结构之顺序表.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、SCIE, University of Electronic Science and Technology of China,1,第二章 线性结构,线性表 堆栈 队列 串 二维数组,2,2.1线性表,线性表的定义线性表是n个相同类型数据元素的有限线性序列,通常记为(a1, a2,a3,an)。线性表特点: 各元素数据类型必须相同 数据ai可以是数字、字符和记录等例1 (1,1,2,3,5,8,13);例2 (Sun,Mon,The,wed,Thu,Fri,Sat)例3 学生成绩表,SCIE, University of Electronic Science and Technology of

2、China,3,2.1线性表,逻辑结构:元素及元素之间的关系为线性;,(1)有且仅有一个开始节点(该节点只有一个直接后继节点,没有直接前趋节点),(2)有且仅有一个结束节点(该节点只有一个直接前趋节点,没有直接后继节点),(3)其余节点有且仅有一个直接前趋和一个直接后继,SCIE, University of Electronic Science and Technology of China,4,2.1线性表,线性表不同的实现方式:2.1.1顺序表 数组存储顺序表定义顺序表基本操作:遍历、插入、删除顺序表算法分析 2.1.2单链表 2.1.3双向链表 链接存储 2.1.4循环链表,SCIE,

3、 University of Electronic Science and Technology of China,5,2.1.1顺序表,一、定义采用顺序存储结构的线性表通常称为顺序表用一组地址连续的存储单元依次存储线性表的数据元素。,内存,存储地址,元素序号,1 2in,特点: 实现逻辑上相邻物理地址相邻 随机存取,Loc(a1) Loc(a1)+k Loc(a1)+(i-1)*k Loc(a1)+(n-1)*k,SCIE, University of Electronic Science and Technology of China,6,2.1.1顺序表,可以借助于高级程序设计语言中的数

4、组来表示:数组的下标与元素在线性表中的序号相对应。顺序表说明: typedef struct list_typeelemtype data MAXNUM ;int length; list_type; list_type list;问题: 如何获得第i的数据元素?list.datai 0i length,SCIE, University of Electronic Science and Technology of China,7,2.1.1顺序表,二、顺序表的基本操作 遍历(查询) 插入 删除 ,SCIE, University of Electronic Science and Techn

5、ology of China,8,2.1.1顺序表,遍历运算 问题描述 在第1个元素到第length个元素依次取值,a1 a2 ai an,SCIE, University of Electronic Science and Technology of China,9,2.1.1顺序表,for( i = 0; i table.length; i+ ),typedef struct list_typeelemtype data MAXNUM ;int length; list_type; list_type table;,table.data i ,。,SCIE, University of E

6、lectronic Science and Technology of China,10,2.1.1顺序表,插入运算 问题描述 在第i个元素前插入一个新元素new_node。,a1,a2,ai-1,ai,an,a1,a2,ai-1,new node,ai+1,逐个向后挪动,SCIE, University of Electronic Science and Technology of China,11,2.1.1顺序表,从ai开始逐个向后,每个元素向后移动从an开始逐个向前,每个元素向后移一格,a1,a2,ai-1,ai,ai+1,an,ai,ai,ai,ai,a1,a2,ai-1,ai,ai

7、+1,an,an,ai+1,ai,for( j = i; j = table.length; j+)table.data j+1 = table.data j ; ,for( j = table.length; j = i; j-)table.data j+1 = table.data j ; ,new node,SCIE, University of Electronic Science and Technology of China,12,2.1.1顺序表,算法输入: table: 指向线性表的指针 new_node:需要插入的元素 location:插入的位置,在其之前插入 输出 tab

8、le:线性表指针,void insert( table, new_node, location) ;,;,SCIE, University of Electronic Science and Technology of China,13,2.1.1顺序表,算法,搬动节点,腾空位置,在腾空的位置处,放入新的元素,数组长度因为增加了一个新元素而加一,void insert( table, new_node, location),;,SCIE, University of Electronic Science and Technology of China,14,2.1.1顺序表,void inse

9、rt(table, new_node, location),for(j = table-length-1 ; j = location; j-)table-data j+1 = table-data j ; ,table-data location = new_node;,table-length = table-length +1;,if(table-length = MAXNUM)error(1); else,if(locationtable-length)error(2); else,location location 1;,SCIE, University of Electronic

10、Science and Technology of China,15,2.1.1顺序表,void error(int number)switch(number)case 1:printf(“the table is full”);break;case 2:printf(“cant insert at location”);break;default:printf(“unknown error”); ,SCIE, University of Electronic Science and Technology of China,16,2.1.1顺序表,an,ai,删除运算 问题描述:删除第i个元素

11、 算法实现分析,a1,a2,ai,an,ai1,a1,a2,ai1,ai+1,删除算法是否与插入算法一样有个方向和过程的问题?,SCIE, University of Electronic Science and Technology of China,17,2.1.1顺序表,for( j = i; j table.length; j+)table.data j = table.data j+1 ; ,for( j = table.length; j i; j- -)table.data j-1 = table.data j ; ,关键技术分析 从an开始逐个向前,每个元素向前移动从ai1开始

12、逐个向后,每个元素向前移动,a1,a2,ai+1,ai,an,ai-1,an,an,an,for( j = table.length-1; j i; j- -)table.data j-1 = table.data j ; ,a1,a2,ai-1,ai,ai+1,an,for( j = i; j table.length-1; j+)table.data j = table.data j+1 ; ,SCIE, University of Electronic Science and Technology of China,18,2.1.1顺序表,算法输入 table:线性表指针 locatio

13、n:需要删除的节点位置 输出 table:线性表指针,void delete(table, location),SCIE, University of Electronic Science and Technology of China,19,2.1.1顺序表,算法,1、从ai节点开始,向后逐个向前搬动节点, 挤掉第i个元素,2、数组长度因为减少了一个新元素而减一,void delete(table, location),SCIE, University of Electronic Science and Technology of China,20,2.1.1顺序表,void delete(

14、table, location),for(j = location ; j length-1; j+),table-length = table-length -1;,if(table-length 1)error(3); else,if(location table-length)error(4); else,location location 1;,table-data j = table-data j+1 ;,SCIE, University of Electronic Science and Technology of China,21,2.1.1顺序表,void error(int

15、number)switch(number)case 1:printf(“the table is full”);break;case 2:printf(“cant insert at location”);break;case 3:printf(“the table is empty”);break;default:printf(“unknown error”); ,SCIE, University of Electronic Science and Technology of China,22,2.1.1顺序表,编写算法的一般步骤: 1、分析问题描述 输入,输出及模块功能等 2、分析算法实现

16、的总体框架,关键问题的突破方法 3、核心算法的实现 4、算法补充完善, 如:增加算法有效性的保护措施越界判断等,SCIE, University of Electronic Science and Technology of China,23,2.1.1顺序表,数组顺序存储结构的特点 元素随机获取特性。 存取时间短,存取时间与位置无关 算法效率(时间复杂度): 元素更动的搬移性 平均N/2次的搬移算法效率,O(1),O(n),SCIE, University of Electronic Science and Technology of China,24,2.1.1顺序表,例:设线性表的元素个

17、数为N,请计算插入一个节点 需要移动的节点的平均个数?,观察:在表首插入一个节点,需要搬移的节点个数为,在ai处插入一个节点,则需要搬移的节点个数为,a1,a2,ai-1,ai,an,ai+1,在a1后插入一个节点,需要搬移的节点个数为,在各处插入节点的概率为,平均搬移节点个数为,N,1,N,N,1,(N-1),N,1,(N-2),N,1,(N-3),N,1,1,+,N,1,(N,(N-1),(N-2),=,1,),=,N,1,2,N(N+1),.,N/2,N,N-1,N-i,1/N,SCIE, University of Electronic Science and Technology of China,25,2.1.1顺序表,作业:教材P74第9题,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报