数据结构第2章线性表介绍.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表的应用 P29【例2-9】将两个递增有序的单链表A、B,归并成一个递减有序的单链表C,要求用A、B中的原结点形成,不能重新申请结点。 算法思路:先建立一个空表C,再依次比较A、B表中的相应元素,将较小者插入到C的表头,得到的C表则为递减有序的。 如:A=(3,5,8,11) B=(2,6,9,15,20) 合并后:C=(20,15,11,9,8,6,5,3,2) 设三个指针变量p, q和s,其中p, q分别指向A、B表中某个结点,s指向当前待插结点。 若p-dataq-data,则让s指向p所指结点作为当前待插结点,并将p指向A的下一个结点;否则,让s指向*q作为当前待插结点,并将q指向B的下一个结点。 接着将待插结点*s插入到C的表头,直到其中一个表归并完。然后将另一个表的剩余元素逐个插入到C的表头 线性表的应用 具体算法见《教材》P29。 LinkList merge(LinkList A, LinkList B) { LinkList C; LNode *p,*q,*s; p=A-next; q=B-next;/*p,q分别指向A,B表中第一个结点*/ C=A; C-next=NULL;/*建立一个空表C*/ free(B); if(p-dataq-data) /*让s指向较小者作为待插结点*/ {s=p;p=p-next;} else {s=q;q=q-next;} s-next=C-next; C-next=s; /*将待插结点*s插入到C的表头*/ while(p!=NULL) /*将A表的剩余元素逐个插入到C的表头*/ { s=p;p=p-next; s-next=C-next; C-next=s; } while(p!=NULLq!=NULL) { } 线性表的应用 while(q!=NULL) /*将B表的剩余元素逐个插入到C的表头*/ { s=q;q=q-next; s-next=C-next; C-next=s; } return C; } 思考: ①将两个递增有序的单链表A、B,归并成一个递增有序的单链表C。 ②将两个递减有序的单链表A、B,归并成一个递增有序的单链表C。 ③将两个递减有序的单链表A、B,归并成一个递减有序的单链表C。 (将较小者插入到表尾) (将较大者插入到表头) (将较大者插入到表尾) 练习: 求两个一元多项式的和(用单链表实现)。 如:3x3+2x2+5 4x4+3x3-2x2+x+5 和:4x4+6x3+x+10 本章需重点掌握的内容: (1)顺序表类型(SeqList)和单链表类型(LinkList)的定义 (2)几个算法 插入、删除、查找算法;顺序表、单链表的合并;在一个递增有序的顺序表(单链表) L中插入元素x后仍有序;将顺序表(单链表) L中的元素逆置。 线性表的应用 第2章作业 ● 《教材》P33习题:3,5,6 ● 《实验指导与题解》P15:2.2基本题,2.3习题解析 实验1:顺序表(《实验指导》P21) 实验2:链表(《实验指导》P23) Ⅰ输入一个数x1 Ⅱ申请一个结点 s=(LNode *)malloc(sizeof(LNode)); s-data=x1; Ⅲ插入到表尾 r-next=s; r=s; ⅱ)将各元素结点插入到表尾。 x1 s r 线性表的链式存储结构 ∧ r L x1 x2 s r r L ⅳ)将最后一个结点的next域置空。 x1 xn r-next=NULL; ∧ 线性表的链式存储结构 r …… L 【例】定义一个函数:输入一组正整数,以-1标志结束,将这些正整数作为data域建立一个单链表。 LinkList Create_LinkList( ) /*尾插法*/ { LinkList L; LNode *r,*s; int x; L=(LNode *)malloc(sizeof(LNode)); L-next=NULL; r=L; /*建立空表L*/ scanf(“%d”, x); while(x!=-1) { s=(LNode *)malloc(sizeof(LNode)); /*申请一个结点*/ s-data=x; r-next=s; /*插入*/ r=s; scanf(“%d”, x); } r-next=NULL; /*将最后一个结点的next域置空*/ return L; } 线性表的链式存储结构 线性表的链式存储结构 线性表的链式存储结构 ②头插法(练习) 将各元素结点

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档