- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表-浙江工商大学
2.15 链表的综合应用-一元多项式的运算 2.15.4 建立链表的指针图 rear-next=s; //在当前表尾做插入 ? ? ? rear=s; ? ? scanf(“%d,%d”,c,e); //假如用户输入9,8 ?? } 2.15 链表的综合应用-一元多项式的运算 2.15.4 建立链表的指针图 while(c!=0) { //c!=0满足,因此继续执行循环体内语句 s=(Polynode*)malloc(sizeof(Polynode));//申请新结点? ? s-coef=c; s-exp=e; rear-next=s; //在当前表尾插入 2.15 链表的综合应用-一元多项式的运算 2.15.4 建立链表的指针图 rear=s; ? ? scanf(“%d,%d”,c,e); //假如用户输入0,0 } while(c!=0) //不满足条件,跳出循环 rear-next=NULL;/*置NULL,以示表结束*/ ? ? ? return(head); } 16. 顺序表和链表的比较 2.16 顺序表和链表的比较 2.16.1 背景 顺序表和链表各有短长。在实际应用中究竟选用哪一种存储结构呢? 2.16 顺序表和链表的比较 2.16.2 静态和动态 ? 顺序表 链表 静态 通常所说的顺序表就是静态顺序表 数组第一个元素 作为“头结点” 动态 typedef struct { char *ch; int len; }HString HString *s; 通常所说的链表就是动态链表 一个动态顺序表的例子 一个静态链表的例子 2.16 顺序表和链表的比较 2.16.3 优缺点比较(1) ? 顺序表 链表 优点 无需为表示结点间的逻辑关系而增加额外的存储空间; 可方便地随机访问表中的任一元素。 插入或删除某个元素,不会影响其他元素的位置; 存储空间动态分配,存一个元素分配一个结点,节省空间。 缺点 插入或删除运算不方便,除表尾的位置外,在表的其它位置上进行插入或删除操作都必须移动后面的元素,其效率较低; 由于顺序表要求占用连续的存储空间,存储分配只能预先进行分配(而不能需要使用一个元素就分配一个元素的空间)。因此当表长变化较大时,可能会有空间浪费。 除了存储数据,也要存储数据的位置; 链表中要通过沿着指针逐个移动,才能访问到某个元素。 2.16 顺序表和链表的比较 2.16.3 优缺点比较(2) ? 顺序表 链表 线性关系如何体现 基于相邻存储的先后位置 指针 是否能随机存取 能 否 时间复杂度 插入删除差,查找好 插入删除好,查找差 2.16 顺序表和链表的比较 2.16.4 如何选择? 在下面三种情况之一,我们尽量用顺序表(因为顺序表不仅节省空间而且简单,相比而言,甚至对于编程高手来说,链表的使用也容易出错) 没有插入和删除操作 插入和删除只在线性表的两头 有极少量(只有几个)插入删除操作,且线性表长度较短(比如少于50个) 总结 2.1 线性表的概念 2.1.4 线性表抽象数据类型定义 ADT LinearList{ 数据元素:D={ai| ai∈D0, i=1,2,…,n ,n≥0,D0为某一数据对象} 结构关系:S={ai,ai+1 | ai, ai+1∈D0,i=1,2, …,n-1} 基本操作: (1)InitList(L) - 初始化 (2)DestroyList(L) -销毁 (3)ClearList(L) – 清空(置零,不销毁线性表) (4)ListLength(L)- 求表长度 (5)GetNode(L,i)- 求表中的第i个元素 (6)LocateNode(L,x)- 求表中元素x的位置(第?个) (7)InsertList(L,x,i) - 在表中第i个位置插入元素x (8)DeleteList(L,i)- 删掉表中的第i个元素 数据类型,可以再稍微解释一下:例如整型,浮点型,字符型指的就是数据类型。 抽象数据类型:就是把数据类型和相关操作捆绑在一起。 1.数据元素、结构关系此处用数学集合的方式表示,这理解起来有些小绕了,我觉得可以用文字描述更直观更好理解一些(也不需要有数学集合的表示能力): 数据元素: 结构关系: 2.也可以给出描述抽象数据类型的简单格式,便于更直观的理解: ADT 抽象数据类型名 Data 数据元素之间逻辑关系的定义 Operation 操作 endADT 2.11 链表的运算——插入或删除结点 2.11.3 插入结点 if(k!=i-1) { printf(“插入位置不合理!”); return; } s=(Node*)m
文档评论(0)