- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习重点 复习结构体定义 线性表的特点 顺序存储的常用操作 链表 单链表 循环链表 双向链表 编写程序的步骤与方法套路 定义一个存储结构:顺序表---动态数组(静态数组) 定义基于上述结构的基本操作 主程序 一定有一个定义为上述存储结构的变量(初始化) 实践和调用基于此结构的操作(函数) 一定显示变化的结果 2.3—1 单链表概念 链表的定义 空表 链表的常用操作(回忆) 创建链表方法:前插入法 插入一个元素到链表 删除链表中一个元素 引入带头结点的链表 2.3.2 链表的常用操作 创建链表方法 头插法 尾插法 遍历链表 插入元素到链表 删除链表中的元素 typedef int Elem1; typedef int* Elem2; Elem1 a=7; Elem2 b; int *b; Typedef struct Lnode* LinkList; LinkList head; 头插入法生成的过程 创建一个结点为头结点L 开辟空间L=malloc L-next=NULL 插入元素到链表的头部( 反复执行n次) 定位到表的头head head-next 生成一个新结点p=malloc 插入该元素到原tail后面 {pdata=x; P-next=head-next; Head-next=p;} 生成链表的过程 重复准备加入的元素s开辟空间malloc 插入在链表的尾部tail(r) 定位在尾部r 插入r-next=s; r=s; 尾部的next=NULL 生成的过程 创建一个结点为头结点L 开辟空间L=malloc L-next=NULL 插入元素到链表的尾部( 反复执行n次) 定位到表的尾巴tail 生成一个新结点p=malloc 插入该元素到原tail后面 {tail-next=p; p-next=NULL;p-data=x;} 逆序生成 插入an(链表L) 1)生成一个节点p 2)将P插入到l和l-next 然后an-1 a1 插入位置的查找 前提:L为头结点,s为等待插入的元素,p代表当前位置,插入s在其后面 插入在一个空表中:p-next=s;s-next=NULL 插入在一个非空表中 插入在头结点后面s-next= p-next; p-next=s; 插入在中间部位p之后s-next= p-next; p-next=s; 插入在链表的尾部( p-next==NULL) p-next=s;s-next= p-next 两个有序链表的合并的算法 拿两个指针指向两个链表的第一个元素 设pa—La pb—Lb Lc首先是一个空表(思想是创建Lc) { 选取插入的元素(小的元素) 插入到lc } 将剩余的元素链在pc后面(if (pc==pa) if(pa!=NULL) pc-next=pa; if(pb!=NULL) pc-next=pb; 链表操作的基本掌握 定义链表的存储结构 创建一个链表(头插入法 尾插入法) 输入链表、查找链表的指定元素 在指定位置删除、插入元素 链表排序的思想 从头开始扫描原链表到尾部 将第一元素放在一张单独链表中 将原链表中所有元素逐一和头比较,小的插入在其前面 插入比较的过程中筛选出小的元素来 链表实验内容 假设带头结点的单链表是递增有序的,设计算法在其中插入一个值为x的结点,并保持其递增特性。 设计算法以删除链表中值为x的元素结点。 设计算法将两个递增有序的带头结点的单链表A、B合并为一个递增有序的带头结点的单链表,并要求算法的时间复杂度为两个表长之和的数量级。 设计算法将带头结点的双循环链表L就地逆置,即利用原表各结点的空间实现逆置。 控制循环链表结束的条件P(L) S表示当前节点(s=p;s=l-next) (S-next==p)表示回到起点 While(s) 现在改为While(s!=P){s=s-next;} 双向链表中的基本运算 插入运算 存储 顺序表:插入、删除 静态数组: 动态数组:满的时候可以增长 链表:创建表、遍历、插入、删除 单链表:存储结构 h-next=NULL(头结点) 循环链表:表为空的条件:h-next=h;(h) 双向链表:存储结构、插入、删除 一元多项式子 两个有序链表合并在:生成一个有序的新链表(指数递增的顺序排列) 合并过程:设两个指针指向表头(插入的元素过程)选取较小的指数元素加进新链表。 比较指数大小:选取较小的指数元素加进新链表。 比较指数大小:相等时两个系数合并相加加进新链表。 删除链表中所有系数为0的元素结点。 输出新表的所有元素,就是两个多项式之和。 3. 循环链表:首尾相接的链表。 将最后一个结点的空指针改为指向
文档评论(0)