第三章 第二讲 线性表和数组.ppt
《第三章 第二讲 线性表和数组.ppt》由会员分享,可在线阅读,更多相关《第三章 第二讲 线性表和数组.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院第二讲第二讲 线性表线性表线性结构特点:在数据元素的非空有限集中:1.存在存在唯一唯一的一个被称作的一个被称作“第一个第一个”的数据元素的数据元素.2.存在存在唯一唯一的一个被称作的一个被称作“最后一个最后一个”的数据元的数据元素素.3.除第一个外,集合中的每个数据元素均除第一个外,集合中的每个数据元素均只有一只有一个前驱个前驱.4.除最后一个外,集合中的每个数据元素均除最后一个外,集合中的每个数据元素均只有只有一个后继一个后继.1C C C C语言与程序设计语言与程序设计语言与程序设计语言
2、与程序设计 江汉大学数计学院江汉大学数计学院2.1 2.1 线性表的逻辑结构线性表的逻辑结构定义:一个线性表是定义:一个线性表是n n个数据元素的有限序列个数据元素的有限序列例例1 英文字母表(英文字母表(A,B,C,.Z)是一个线性表是一个线性表例例2数据元素特征:特征:元素个数元素个数n=n=表长度,表长度,n=0n=0空表空表11inin时时aiai的直接的直接前驱前驱是是ai-1ai-1,a1a1无直接前驱无直接前驱aiai的直接的直接后继后继是是ai+1ai+1,anan无直接后继无直接后继2C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉
3、大学数计学院顺序表:顺序表:定义:用一组地址连续的存储单元存放一个线性表叫定义:用一组地址连续的存储单元存放一个线性表叫元素地址计算方法:元素地址计算方法:LOC(aiLOC(ai)=LOC(a1)+(i-1)*L)=LOC(a1)+(i-1)*LLOC(ai+1)=LOC(ai+1)=LOC(ai)+LLOC(ai)+Ln其中:其中:L:L:一个元素占用的存储单元个数一个元素占用的存储单元个数LOC(aiLOC(ai):):线性表第线性表第i i个元素的地址个元素的地址特点:特点:逻辑上相邻逻辑上相邻物理地址相邻物理地址相邻.随机存取随机存取.可用可用C C语言的一维数组实现语言的一维数组实
4、现 2.2 2.2 线性表的顺序存储结构线性表的顺序存储结构3C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院a1a2an01n-112n内存内存A A数组下标数组下标元素序号元素序号M#define M 1000int dataM;例例 struct card int num;char name20;char author10;char publisher30;float price;struct card dataM;备备用用空空间间数据元素不是简单类型时数据元素不是简单类型时,可定义可定义结构体数组结构体数组4C C C C语言与程
5、序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院 1.1.插入节点定义:插入节点定义:线性表的插入是指在第线性表的插入是指在第i i(1 1 i i n+1n+1)个元素之前插入一个新的数个元素之前插入一个新的数据元素据元素x x,使长度为使长度为n n的线性表的线性表加。加。变成变成长度为长度为n+1n+1的线性表的线性表 需将第需将第i i至第至第n n共(共(n-i+1)n-i+1)个元素后移个元素后移2.3 2.3 线性表的插入和删除算法线性表的插入和删除算法5C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉
6、大学数计学院内存内存a1a2aiai+1an01i-1A A 数组下标数组下标n-1in12i元素序号元素序号i+1nn+1内存内存a1a2aiai+1an01i-1A 数组下标数组下标n-1in12i元素序号元素序号i+1nn+1an-1x6C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院简简化化插插入入算算法法 void insert(int A ,n,i,X)/类类c c语言描述语言描述/*i表示第表示第i个元素个元素*/int j;if(in+1)printf(“i值错!值错!n”);else for(j=n;j=i;j-)A j
7、=Aj-1;/*/*将第将第i i个元素及其后面的元素后移个元素及其后面的元素后移*/A i-1=X;n+;/*/*线性表长度加线性表长度加1*/1*/7C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院算法时间复杂度算法时间复杂度T(n)T(n)设设PiPi是在第是在第i i个元素之前插入一个元素的概率,个元素之前插入一个元素的概率,则在长度为则在长度为n n的线性表中插入一个元素时,所需的线性表中插入一个元素时,所需移动的元素次数的平均次数为:移动的元素次数的平均次数为:8C C C C语言与程序设计语言与程序设计语言与程序设计语言与程
8、序设计 江汉大学数计学院江汉大学数计学院2.2.删除删除:线性表的删除是指将第:线性表的删除是指将第i i(1 1 i i n n)个元素删除,使长度为个元素删除,使长度为n n的线性表的线性表.变成变成长度为长度为n-1n-1的线性表的线性表 需将第需将第i+1i+1至第至第n n共共(n-i)n-i)个元素前移个元素前移9C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院内存内存a1a2aiai+1an01i-1A 数组下标数组下标n-1in12i元素序号元素序号i+1nn+1内存内存a1a2ai+1A 数组下标数组下标01i-1n-2
9、in-112i元素序号元素序号i+1n-1nanai+210C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院简化简化删除删除函数函数 void delete(int A ,int n,i)/*i表示第表示第i个元素个元素*/int j;if(in)printf(“i值错!值错!n”);else for(j=i;jdatap-data表示表示p p指向结点的指向结点的数据域数据域;(*p).link(*p).linkp-linkp-link表示表示p p指向结点的指向结点的指针域指针域;2.3.1 2.3.1 单链表单链表定义:结点中只含一
10、个指针域的链表叫单链表定义:结点中只含一个指针域的链表叫单链表.16C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院单链表的基本运算单链表的基本运算查找:查找单链表中是否存在结点查找:查找单链表中是否存在结点X X,若有则返回,若有则返回指向指向X X结点的指针;否则返回结点的指针;否则返回NULLNULL.(.(不带头节点不带头节点)算法描述:算法描述:ListNode*find(ListNode head,int x)ListNode*p;P=head;while (p&p-data!=x)p=p-next;return p;17C
11、C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院2.2.单链表的插入单链表的插入 实现插入算法主要完成三个基本操作:实现插入算法主要完成三个基本操作:1)1)在单链表上找到插入位置,即找到第在单链表上找到插入位置,即找到第i i个结点。个结点。可可以以用用遍遍历历的的方方法法,即即从从表表头头起起顺顺次次访访问问单单链链表表的的结结点,直至找到第点,直至找到第i i个结点。个结点。2)2)生成一个以生成一个以x x为值的新结点。为值的新结点。可通过可通过C C的库函数的库函数malloc(sizemalloc(size)来产生。来产生。3)3
12、)将新结点链入单链表中。将新结点链入单链表中。需要改变相关结点的指针需要改变相关结点的指针 ,如下面的图所示。,如下面的图所示。单链表的插入单链表的插入:所谓插入是指在单链表中第所谓插入是指在单链表中第i i个结个结点点(i0)(i0)之后插入一个元素为之后插入一个元素为x x的结点。的结点。18C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院 假设指针假设指针p p指向单链表中的第指向单链表中的第i i个结点,指针个结点,指针s s指向已生成的新结点,链入新结点的操作如下:指向已生成的新结点,链入新结点的操作如下:将新结点将新结点*s
13、s的链域指向结点的链域指向结点*p p的后继结点的后继结点 (即即s-next=p-next);将结点将结点*p p的链域指向新结点的链域指向新结点 (即即p-next=s)p-next=s)。19C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院插插入入算算法法 void insert(node*head,int i,x)node*s,*p;int j;s=(node*)malloc(sizeof(node);/*/*生成新结点生成新结点*/s-data=x;if(i=0)/*/*如果如果i=0,i=0,则将则将s s所指结点插入到表头所
14、指结点插入到表头*/s-next=head;head=s;else p=head;j=1;/*/*查找第查找第i i个结点,由个结点,由p p所指向所指向*/20C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院插入算法续插入算法续 while(p!=NULL&jnext;if(p!=NULL)/*把新结点插入其后把新结点插入其后*/s-next=p-next;p-next=s;else printf(“未找到!未找到!n”);21C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院3.3
15、.单链表的删除单链表的删除删除单链表上一个其值为删除单链表上一个其值为x x的结点的主要操作是:的结点的主要操作是:1)1)用遍历的方法在单链表上找到该结点;用遍历的方法在单链表上找到该结点;2)2)从单链表上删除该结点。从单链表上删除该结点。注意注意:从单链表上删除一个结点,需修改该结点从单链表上删除一个结点,需修改该结点的前一个结点的指针,如下面的图所示。的前一个结点的指针,如下面的图所示。22C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院 假设指针假设指针q q指向待删除结点的前一个结点,指针指向待删除结点的前一个结点,指针p p
16、指指向要删除的结点,删除该结点的操作如下:将该结向要删除的结点,删除该结点的操作如下:将该结点的前一个结点点的前一个结点*q q的链域指向的链域指向*p p的后继结点的后继结点 (即(即q-next=p-nextq-next=p-next)。)。23C C C C语言与程序设计语言与程序设计语言与程序设计语言与程序设计 江汉大学数计学院江汉大学数计学院删删 除除 算算 法法void delete(node*head,int x)node *p,*q;if(head=NULL)printf (“(“链表下溢!链表下溢!n”);/*n”);/*判空判空*/if(head-data=x)/*/*如表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 第二讲 线性表和数组 第三 第二 线性 数组
限制150内