线性表(new).ppt
《线性表(new).ppt》由会员分享,可在线阅读,更多相关《线性表(new).ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 1 章章 数据结构数据结构 1.1 基本数据结构与算法基本数据结构与算法 1.2 线性表线性表 1.3 栈和队列栈和队列1.4 树和二叉树树和二叉树 1.5 查找查找1.6 内部排序内部排序ABCDEFG姓名姓名 学号学号 成绩成绩 班级班级 李红李红 9761059 95 机机97.6 10658651.2 线性表1.线性表的定义线性表的定义1)定义:定义:具有具有相同数据类型相同数据类型的的n(n0)个数据元素组成的个数据元素组成的有限有限序序列。是最简单、最常用的数据结构。列。是最简单、最常用的数据结构。2)表示表示:L=(a1,a2,a3,ai-1,ai,ai+1,an)其中其中
2、:n n为为线性表长度线性表长度(n=0n=0称为空表称为空表),表中相邻元素之间,表中相邻元素之间存在着顺序关系。存在着顺序关系。a a1 1 :表头表头元素;元素;a an n:表尾表尾元素;元素;a ai-1i-1称称为为a ai i的直接的直接前驱前驱;a ai+1i+1 称为称为a ai i的直接的直接后继后继。表头表尾1.2 线性表1.线性表的定义线性表的定义1)定义:定义:具有具有相同数据类型相同数据类型的的n(n0)个数据元素组成的个数据元素组成的有限有限序序列。是最简单、最常用的数据结构。列。是最简单、最常用的数据结构。2)表示表示:L=(a1,a2,a3,ai-1,ai,a
3、i+1,an)3)线性结构特点线性结构特点:(1)(1)有且只有一个根结点有且只有一个根结点a1a1,无前驱,无前驱 。(2)(2)有且只有一个终端结点有且只有一个终端结点a an n ,无后继,无后继 。(3)(3)其他结点有且只有一个直接前驱和一个直接后继。其他结点有且只有一个直接前驱和一个直接后继。1.2 线性表1.线性表的定义线性表的定义1)定义:定义:具有具有相同数据类型相同数据类型的的n(n0)个数据元素组成的个数据元素组成的有限有限序序列。是最简单、最常用的数据结构。列。是最简单、最常用的数据结构。2)表示表示:L=(a1,a2,a3,ai-1,ai,ai+1,an)3)线性结构
4、特点线性结构特点:4)线性表的分类线性表的分类 (1)简单线性表:简单线性表:数据元素是简单项数据元素是简单项(数字、字母、季节名等数字、字母、季节名等)。如如:(12,34,4,67,8):(12,34,4,67,8)(2)复杂线性表:复杂线性表:数据元素由数据元素由若干个数据项若干个数据项组成,此时数据元素称为组成,此时数据元素称为记录记录或结点或结点,如学生成绩表如学生成绩表.学生健康情况登记表如下:姓姓 名名学学 号号性性 别别年龄年龄 健康情况健康情况王小林王小林790631 男男 18 健康健康陈陈 红红790632 女女 20 一般一般刘建平刘建平790633 男男 21 健康健
5、康张立立张立立790634 男男 17 神经衰弱神经衰弱.1.1.顺序表基本概念顺序表基本概念1.2.2 线性表的顺序存储结构1)顺序存储结构:顺序存储结构:用一用一组地址连续的存储空间组地址连续的存储空间依次存放线性表的各元素依次存放线性表的各元素 。顺序表:顺序表:采用顺序存储结构的线性表称为顺序表采用顺序存储结构的线性表称为顺序表(一维数组一维数组)表中的所有元素所占表中的所有元素所占存储空间连续存储空间连续表中各元素在存储空间中按表中各元素在存储空间中按逻辑顺序存放逻辑顺序存放 顺序存储结构特点顺序存储结构特点1.2 线性表1.1.顺序表基本概念顺序表基本概念4.2.2 线性表的顺序存
6、储结构1)顺序存储结构:顺序存储结构:2)第第i个元素地址个元素地址4.2 线性表其中其中:m:每个元素占每个元素占m个存储单元个存储单元Loc(a1)第一个元素地址第一个元素地址(基址基址)对数组而言对数组而言an1.ai.a1a0bb+mb+i*mb+n*m存储地址存储地址存储状态存储状态空闲空闲数据元素在线性表中的位序数据元素在线性表中的位序12n i 从存取方式看从存取方式看,线性表的顺序存储线性表的顺序存储结构是可以结构是可以随机存随机存储储的存储结构的存储结构.1.1.顺序表基本概念顺序表基本概念1.2.2 线性表的顺序存储结构1)顺序存储结构:顺序存储结构:2)第第i个元素地址个
7、元素地址1.2 线性表2.顺序表的基本运算顺序表的基本运算 存取存取:访问线性表的第访问线性表的第i个元素,使用或改变数据元素个元素,使用或改变数据元素的值。的值。查找查找:在线性表中查找满足某种条件的数据元素。在线性表中查找满足某种条件的数据元素。插入插入:在线性表的第在线性表的第i个元素之前,插入一个同类型的个元素之前,插入一个同类型的元素。元素。(*)删除删除:删除线性表中第删除线性表中第i个元素。个元素。(*)求表长求表长:求出线性表中元素的个数。求出线性表中元素的个数。置空表置空表:建立一个空表。建立一个空表。清除表清除表:将已有线性表变为空表,即删除表中所有元素。将已有线性表变为空
8、表,即删除表中所有元素。1.1.顺序表基本概念顺序表基本概念1.2.2 线性表的顺序存储结构1)顺序存储结构:顺序存储结构:2)第第i个元素地址个元素地址1.2 线性表2.顺序表的基本运算顺序表的基本运算 插入和删除插入和删除插入和删除插入和删除1)1)顺顺序序表表的的插插入入运运算算:在在线线性性表表的的第第i i个个元元素素之之前前插插入入一一个新的元素,先移动,后插入。个新的元素,先移动,后插入。ai-1.a2a1anai+1ai x ai-1.a2 a1 ai an an ai+1 ai ai x步骤:步骤:(1)将将ai an顺序向后移动顺序向后移动,为新元素让出位置为新元素让出位置
9、(2)将将x置入置入”空出空出”的第的第i个位置个位置举例:举例:(在第在第4个和第个和第5个元素之间插入元素个元素之间插入元素91)6741262148916 0 1 2 3 4 5 6 7 86741262148916 0 1 2 3 4 5 6 7 86741262148916 0 1 2 3 4 5 6 7 8212191插入程序举例插入程序举例(在在8 8个数中任意位置插入一个数个数中任意位置插入一个数):#define N 8#define N 8main()main()intint aN+1=12,34,45,6,78,9,10,91,aN+1=12,34,45,6,78,9,1
10、0,91,i,j,xi,j,x;printf(printf(“inputinput the location to be inserted:the location to be inserted:”););scanf(scanf(“%d,%d%d,%d”,&i,&x,&i,&x););ai-1=x;ai-1=x;for(jfor(j=0;j=0;j=N;jN;j+)+)printf(printf(“%d,%d,”,aj,aj););for(jfor(j=i-1;j=i-1;j=i-1;j-);j=i-1;j-)aj+1=aj+1=ajaj;在第在第i i个位置上作插入个位置上作插入x,x,则需
11、将第则需将第i i个至第个至第n n个元素移动,即共个元素移动,即共需移动需移动(n-i+1)(n-i+1)个元素。个元素。插入运算时间性能分析:插入运算时间性能分析:插入运算,时间主要消耗在数据移动上。在长度为插入运算,时间主要消耗在数据移动上。在长度为n n的线性表的线性表中插入一个元素,则中插入一个元素,则平均移动元素次数平均移动元素次数(期望值期望值):p pi i:在第在第i i个位置上作插入的概率。个位置上作插入的概率。等差数列求和公式等差数列求和公式:(首项首项+末项末项)项数项数)/2(n-i+1)线性表线性表(a1,a2,a3)平局移动元素个数平局移动元素个数:()*(3+2
12、+1+0)=1.5在一线性表在一线性表(a1,a2,a3)中插入任意一数中插入任意一数i,求平局移动,求平局移动元素次数元素次数:i 移动次数移动次数(n-i+1)1(插入到第插入到第1个数个数a1前前)3 2(插入到第插入到第2个数个数a2前前)23(插入到第插入到第3个数个数a3前前)1(插入到第插入到第3个数个数a3后后)0 1.1.顺序表基本概念顺序表基本概念1.2.2 线性表的顺序存储结构1)顺序存储结构:顺序存储结构:2)第第i个元素地址个元素地址1.2 线性表2.顺序表的基本运算顺序表的基本运算 插入和删除插入和删除插入和删除插入和删除2)2)顺序表删除运算:顺序表删除运算:定义
13、:定义:指将表中第指将表中第i个元素从线性表中去掉。个元素从线性表中去掉。原表长为原表长为n n:(a1,a2,ai-1,ai,ai+1,an)新表长为新表长为n-1n-1:(a1,a2,ai-1,ai+1,an)步骤:步骤:(1)将将ai+1 an,顺序向前移动顺序向前移动(2)表长表长减一减一举例:举例:(删除第五个元素删除第五个元素21)6741262148916 0 1 2 3 4 5 6 7 867412648916 0 1 2 3 4 5 6 7 8时间性能分析:时间性能分析:时间消耗与插入运算相同,时间消耗与插入运算相同,平均移动元素次数:平均移动元素次数:q qi i:在第在第
14、i i个位置上作插入的概率。设个位置上作插入的概率。设q qi i=1/n=1/n 共需移动共需移动(n-i)(n-i)个元素。个元素。67 i 移动次数移动次数(n-i)1(删除第删除第1个数个数a1)22(删除第删除第2个数个数a2)13(删除第删除第3个数个数a3)0线性表线性表(a1,a2,a3)平局移动元素个数平局移动元素个数:(1/3)*(2+1+0)=1在一线性表在一线性表(a1,a2,a3)中删除任意一数中删除任意一数i,求平局移动,求平局移动元素次数元素次数:作业作业:有一数组,存储十个数,:有一数组,存储十个数,编程序删除其中任意一个数。编程序删除其中任意一个数。1.1.顺
15、序表基本概念顺序表基本概念3.3.顺序表优点和缺点顺序表优点和缺点优点:优点:逻辑上相邻元素逻辑上相邻元素存储位置也相邻存储位置也相邻,无需增加额外存无需增加额外存储空间可方便储空间可方便随机存取随机存取表中任一元素。表中任一元素。缺点:缺点:插入和删除运算不方便插入和删除运算不方便,必须移动大量结点必须移动大量结点,效率效率较低不适合元素经常变动的大的线性表。较低不适合元素经常变动的大的线性表。1.2.2 线性表的顺序存储结构1.2 线性表2.顺序表的基本运算顺序表的基本运算1.1.链式存储结构特点链式存储结构特点:1.2.3 线性表的链式存储结构存储空间可以存储空间可以不连续不连续。不要求
16、逻辑上相邻的元素在物理位置上也相邻。不要求逻辑上相邻的元素在物理位置上也相邻。数据元素间逻辑关系由数据元素间逻辑关系由指针域指针域确定。确定。1.2 线性表即即 链表存储结构是一种链表存储结构是一种动态动态数据结构,其特点是它数据结构,其特点是它包含的据对象的个数及其相互关系可以包含的据对象的个数及其相互关系可以按需要改按需要改变变,存储空间是程序,存储空间是程序根据需要根据需要在程序运行过程中在程序运行过程中向系统申请向系统申请获得,链表也不要求逻辑上相邻的元获得,链表也不要求逻辑上相邻的元素在物理位置上也相邻,它没有顺序存储结构所素在物理位置上也相邻,它没有顺序存储结构所具有的弱点。具有的
17、弱点。zhang33531082548#namesumnext结构体结构体元素元素结构体元素结构体元素的地址的地址结构体元素的结构体元素的成员是地址型成员是地址型数据数据struct student char name10;int sum;struct student*next;pstruct student *p;strcpy(p-name,”zhang”);p-sum=335;p-next=?zhang33531082548#bai32831483108#zhao35231883148#wu34703188#headp1p2p3有四个结构体元素:有四个结构体元素:zhang33531082
18、548#bai32831483108#zhao35231883148#wu34703188#head有四个结构体元素:有四个结构体元素:head(3)尾尾结结点点的的指指针针域域置置为为“NULL(空空)”,作作为链表结束的标志为链表结束的标志(1)头指针头指针变量变量head指向链表的首结点。指向链表的首结点。(2)每个)每个结点结点由由2个域组成:个域组成:1)数据域数据域存储结点本身的信息。存储结点本身的信息。2)指针域)指针域指向后继结点的指针。指向后继结点的指针。zhang33531082548#bai32831483108#zhao35231883148#wu347NULL3188
19、#struct student char name10;int sum;struct student*next;1.1.链式存储结构特点链式存储结构特点:2.2.线性链表线性链表:定义:定义:线性表的链式存储结构称为线性链表线性表的链式存储结构称为线性链表1.2.3 线性表的链式存储结构数据域数据域:一部分存放数据元素值一部分存放数据元素值 指针域指针域:存放指针存放指针,用于指向该结点的用于指向该结点的 前一个结点或后一个结点前一个结点或后一个结点 线性链表中线性链表中结点组成:结点组成:分类:分类:单链表、循环单链表、双向链表单链表、循环单链表、双向链表 1.2 线性表其单链表示意图如下:
20、其单链表示意图如下:有一线性表有一线性表:(bat (bat,catcat,eateat,fatfat,hathat,jatjat,latlat,mat)mat)hathat200200.catcat135135eateat170170.matmatNullNullbatbat130130fatfat110110jatjat205205latlat160160 110 130 135 160头指针头指针 head 165 170 200 205 165简化为简化为:链尾链尾略略bat cat eat mat 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名。例如:若头指针名是head
21、,则把链表称为表head。head用C语言描述的单链表如下:struct node char name20;struct node *next;struct node*head;typedef struct node char name20;struct node *next;LinkList;LinkList*head;新新的类型名代换的类型名代换旧旧的类的类型名,型名,也就是说:也就是说:LinkList等等价与价与struct node1.1.链式存储结构特点链式存储结构特点:2.2.线性链表线性链表:1.2.3 线性表的链式存储结构1.2 线性表3.单链表单链表:定义:定义:由由n个结
22、点链接,且每个结点中只个结点链接,且每个结点中只包含一个指针域包含一个指针域的的链表。链表。例:例:线性单链表线性单链表(A,B,C,D,E,F)(A,B,C,D,E,F)逻辑状态逻辑状态 ABCDEhead F其中其中:head称为单链表的头指针称为单链表的头指针,指向表中的第一个结点指向表中的第一个结点物理状态物理状态 E7FNULLB25A13C31D1头指针头指针 存储地址存储地址 数据域数据域 指针域指针域 19 1713192531单链表存取单链表存取:必须从头指必须从头指针开始进行,依次顺着针开始进行,依次顺着指针向链尾方向扫描。指针向链尾方向扫描。找到各个元素找到各个元素,因此
23、说线因此说线性表的链式存储结构是性表的链式存储结构是一种一种顺序存储顺序存储的存储结的存储结构构。ABCDEhead FABCDEhead FABCDEhead F带带头节点头节点的单链表的单链表编程:创建带头节点的单链表。编程:创建带头节点的单链表。程序算法:(1)定义三个结构体类型结构体类型的指针变量head,p,s(2)利用malloc函数开辟头结点头结点,由head,p共同来指向(3)再利用malloc函数开辟相应的内存空间,由s来指向(4)由键盘输入数据,赋给s所指向的内存空间(5)p-next=s;(6)p=s;(7)回到第(3)步;程序算法:(1)定义三个结构体类型结构体类型的指
24、针变量head,p,s(2)利用malloc函数开辟头结点头结点,由head,p共同来指向(3)再利用malloc函数开辟相应的内存空间,由s来指向(4)由键盘输入数据,赋给s所指向的内存空间(5)p-next=s;(6)p=s;(7)回到第(3)步;head=p=(strutc node*)malloc(sizeof(struct node);headpv对带头结点的复杂链表的基本操作对带头结点的复杂链表的基本操作创建创建程序算法:(1)定义三个结构体类型结构体类型的指针变量head,p,s(2)利用malloc函数开辟头结点头结点,由head,p共同来指向(3)再利用malloc函数开辟相
25、应的内存空间,由s来指向(4)由键盘输入数据,赋给s所指向的内存空间(5)p-next=s;(6)p=s;(7)回到第(3)步;As-data=getchar();spv对带头结点的复杂链表的基本操作对带头结点的复杂链表的基本操作创建创建headp程序算法:(1)定义三个结构体类型结构体类型的指针变量head,p,s(2)利用malloc函数开辟头结点头结点,由head,p共同来指向(3)再利用malloc函数开辟相应的内存空间,由s来指向(4)由键盘输入数据,赋给s所指向的内存空间(5)p-next=s;(6)p=s;(7)回到第(3)步;spv对带头结点的复杂链表的基本操作对带头结点的复杂
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 new
限制150内