- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表是一种最简单的线性结构.ppt
例4、学生健康情况登记表如下: 数据的运算是定义在逻辑结构上, 而运算的具体实现则是在存储结构上进行的。 2.2 线性表的顺序表示和实现 作 业 1.已知一个顺序表A,其中的元素按值递减有序排列,编写一个函数插入一个元素x后保持该顺序表仍按递减有序排列。 2.已知一个顺序表中的元素按元素值递减有序排列,编写一个函数删除顺序表中相同的元素; 3.编写一个函数将一个顺序表A(有n个元素,且任何元素均不为0)分拆成两个顺序表,使A中大于0的元素存在B中,小于0的元素存放在C中。 4.有两个顺序表A(有m个元素)和B(有n个元素),其元素均以升序排列,编写一个函数将它们合并成一个顺序表C,要求C的元素也是升序排列。 5.试写一算法,顺序表的就地逆置,即利用原表的存储空间,将顺序表(a1,a2,….,an)逆置为(an,an-1,…a2,a1)。 优点: (1)无须为表示结点间的逻辑关系而增加额外的存储空间。 (2)可以方便地随机存取表中的任一结点。 缺点: (1)插入和删除平均须移动一半结点。 (2)存储分配只能预先进行(静态) 过大 浪费 过小 溢出 2.3 线性表的链式表示和实现 以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点 表示数据元素 或 数据元素的映象 …… 110 …… 130 135 …… 160 头指针 head 165 170 …… 200 205 …… 指针p与指向的结点关系示意图: p 结点 (*p) 说明: p---指向链表中某一结点的指针。 *p---表示 由指针p所指向的结点。 (*p).data或p-data---表示由p所指向结点的数据域。 (*p).next或p-next---表示由p所指向结点的指针域。 LinkList createlistf(void) { char ch; LinkList head; Lnode *p; head=null; ch=getchar( ); while (ch!=‵\n′){ p=(Lnode*)malloc(sizeof(Lnode)); p–data=ch; p–next=head; head=p; ch=getchar( ); } return (head); } ListLink createlist(int n) { int data; LinkList head; Lnode *p head=null; for(i=n;i0;--i){ p=(Lnode*)malloc(sizeof(Lnode)); scanf((〝%d〞,p–data); p–next=head; head=p; } return(head); } 设指针p指向单链表的某一结点,指针s指向等待插入的、其值为x的新结点。 实现方法(两种): ①后插--将新结点*s插入结点*p之后。 ②前插--将新结点*s插入结点*p之前。 算法思想:构造一新结点s,将其数据域置为新结点,再修改有关结点的链域: 把原p结点的直接后继结点作为s结点的直接后继,s结点作为p结点的直接后继。 先找到p结点的前趋结点(单链表无前趋指针),然后修改其链域,使其指向待插入的s结点,而将s结点指向p结点。 插入前 p …
文档评论(0)