2.3线性表的链式存储和运算—单链表应用举例

例2.5 已知单链表H,写一算法将其倒置。即实现如图2.22的操作。(a)为倒置前,(b)为倒置后。


算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。

算法如下:

 1 void reverse (Linklist H)
 2 { 
 3     LNode *p;
 4     p=H->next;             /*p指向第一个数据结点*/
 5     H->next=NULL;          /*将原链表置为空表H*/
 6     while (p)              /*p结点不为空,循环*/
 7     { 
 8         q=p;               /*用另一个结点q存储p结点的信息*/
 9         p=p->next;         /*不断后移*/
10         q->next=H->next;   /*将当前结点插到头结点的后面*/
11         H->next=q;         /*将头结点与当前结点相连*/
12     }
13 }

算法2.15

该算法只是对链表中顺序扫描一边即完成了倒置,所以时间性能为O(n)。

例2.6 已知单链表L,写一算法,删除其重复结点,即实现如图2.23的操作。(a)为删除前,(b)为删除后。

算法思路:用指针p 指向第一个数据结点,从它的后继结点开始到表的结束,找与其值相同的结点并删除之;p 指向下一个;依此类推,p 指向最后结点时算法结束。

算法如下:

 1 void pur_LinkList(LinkList H)
 2 { 
 3     LNode *p,*q,*r;
 4     p=H->next; /*p指向第一个结点*/
 5     if(p==NULL) 
 6         return;
 7     while (p->next)
 8     { 
 9         q=p;
10         while (q->next) /* 从*p的后继开始找重复结点*/
11         { 
12             if (q->next->data==p->data)
13             { 
14                 r=q->next; /*找到重复结点,用r指向,删除*r */
15                 q->next=r->next;
16                 free(r);
17             } 
18             else 
19                 q=q->next;
20         } 
21         p=p->next; /*p指向下一个,继续*/
22     } 
23 }

算法2.16

该算法的时间性能为O(n2)。

例2.7 设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。

算法思路:利用A、B两表有序的特点,依次进行比较,将当前值较小者摘下,插入到C表的头部,得到的C表则为递减有序的。

算法如下:

 1 LinkList merge(LinkList A,LinkList B)
 2 /*设A、B均为带头结点的单链表*/
 3 { 
 4     LinkList C; 
 5     LNode *p,*q;
 6     p=A->next;       /*A的第一个结点*/
 7     q=B->next;       /*B的第一个结点*/
 8     C=A;             /*C表的头结点*/
 9     C->next=NULL;    /*C表置空*/
10     free(B);         /*释放B的头结点*/
11     while (p&&q)     /*p和q结点都存在*/
12     { 
13         if(p->data<q->data)         /*从原AB表上摘下较小者*/
14         { 
15             s=p;                    /*临时结点s指向p*/
16             p=p->next; 
17         }
18         else    
19         {
20             s=q;
21             q=q->next;
22         } 
23         s->next=C->next;   /*C表的第一个结点赋给结点s的后继*/
24         C->next=s;         /*将结点s赋给C表头结点的后继*/
25     } 
26     if (p==NULL) 
27         p=q;
28     while (p)              /* 将剩余的结点一个个摘下,插入到C表的头部*/
29     { 
30         s=p;
31         p=p->next;
32         s->next=C->next;
33         C->next=s;
34     }
35 }

算法2.17

该算法的时间性能为O(m+n)。

转载于:https://www.cnblogs.com/chunlanse2014/articles/4439661.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中拖动文字实现功能,Android:图片中叠加文字,支持拖动改变位置

之所以做了这么一个Demo&#xff0c;是因为最近项目中有一个奇葩的需求&#xff1a;用户拍摄照片后&#xff0c;分享到微信的同时添加备注&#xff0c;想获取用户在微信的弹出框输入的内容&#xff0c;保存在自己的服务器上。而事实上&#xff0c;这个内容程序是无法获取的&…

bzoj 3196/tyvj p1730 二逼平衡树

原题链接&#xff1a;http://www.tyvj.cn/p/1730 树套树。。。 如下&#xff1a; 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 #define lc root<<1 6 #define rc root<<1|1 7 #define INF…

联想android刷机教程,超详细的联想刷机教程~带你嘻刷刷

一、刷机是什么说到“刷机”&#xff0c;很多人可能会和“升级”混淆起来&#xff0c;其实升级和刷机并不是同一概念。通俗地讲&#xff0c;升级就是对手机内的软件或系统进行升级&#xff0c;比如很多厂商手机都支持的OTA空中在线升级。而刷机&#xff0c;则相当于就是重装系统…

多看 android6,多看阅读本地版

为您推荐&#xff1a;多看阅读《多看阅读本地版》是一款由多看科技倾情研发打造的海量优质完本小说免费在线阅读app软件&#xff0c;这款软件的功能非常的全面&#xff0c;操作性简单&#xff0c;上手起来非常的容易&#xff0c;在这款软件里&#xff0c;各位用户们将能够于此体…

UIProgressView-初识IOS

好几天没更新了&#xff0c;学的时候太紧&#xff0c;没时间复习了都。今天刚好有时间&#xff0c;多更几个。 今天复习的是UIProgressView,我们常见使用在修改某些属性的时候经常用到&#xff0c;比如透明度&#xff0c;今天我们介绍一个简单的使用例子 定义什么的&#xff0c…

浅谈0/1切换

前言:   做过GUI开发的同学, 都知晓双缓存机制. 其过程为先把所有的场景和实体对象画到一个备份canvas, 然后再把备份canvas的内容整个填充真正的画板canvas中. 如果不采用双缓存机制, 你的画面有可能会出现闪烁和抖动.   究其原因是整个绘制过程, 包含清屏, 绘制场景和各…

Action和Func区别

Action<>和Func<>其实都是委托的【代理】简写形式。 简单的委托写法&#xff1a; 1 //普通的委托2 public delegate void myDelegate(string str);3 4 //Delegate委托调。5 myDelegate dDelegate new myDelegate(SayHellow);6 dDelegate("Mr wang");7 8…

最好的android one手机,最高配置的Android One手机登场 LG推出G7 One与G7 F

原标题&#xff1a;最高配置的Android One手机登场 LG推出G7 One与G7 F集微网消息&#xff0c;Android One原本是谷歌与中国台湾的联发科共同开发的一个项目&#xff0c;旨在让手机制造商打造低成本的智能手机&#xff0c;这些手机主要是销售给新兴市场上的近10亿潜在用户。随着…

vs代码模板制作

VS2008代码模板制作 一&#xff0c;类模板制作&#xff1a; 路径&#xff1a;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\2052\Class.zip 操作&#xff1a;打开Class.cs文件&#xff0c;编辑内容如下&#xff1a; // <…

pads导出坐标文件html,【教程】PADS如何导出SMT贴片机用的坐标文件

找到一个好办法&#xff0c;用wps的Excel软件的话&#xff0c;将脚本进行如下修改即可。修改前&#xff1a;Sub ExportToExcel (txt As String)FillClipboardDim xl As ObjectOn Error Resume NextSet xl GetObject(,"Excel.Application")On Error GoTo ExcelError …

avalon框架,简单的MVVM

今天我又要挑战一次一个高大上的公司了 但是看着jd有点忧伤了要求如下 基本要求&#xff1a;1、熟悉 HTML / CSS / JS 并有良好的代码风格&#xff1b;2、理解 Web 标准&#xff0c;语义化&#xff0c;可以解决主流浏览器及不同版本的兼容性问题&#xff1b;3、熟悉常见框架&am…

html锚点反向联动,小程序菜单左右联动

最近做小程序的时候&#xff0c;产品提了一个需求&#xff1a;1.左侧的菜单栏和右侧的菜单可分别滚动&#xff0c;滚动左侧不影响右侧&#xff0c;滚动右侧左侧随之联动高亮显示所在的菜单分类。2.点击下方左侧导航菜单栏&#xff0c;高亮显示被点击的菜单分类&#xff0c;右侧…

第6/24周 聚集索引

上个星期我向你介绍了堆表&#xff08;heap tables&#xff09;。我们说过&#xff0c;在SQL Server表可以是堆表&#xff08;Heap Table&#xff09;或者聚集表&#xff08;Clustered Table&#xff09;——一个在它上面有聚集索引&#xff08;Clustered Index&#xff09;定义…

广西2021普通高考成绩查询,2021广西高考成绩什么时候出

2021广西高考成绩什么时候出2021-04-22 10:39:21文/叶丹2021广西高考成绩公布时间&#xff1a;预计6月23日。预计6月23日对考生开放高考成绩查询通道&#xff0c;并公布录取最低控制分数线。届时考生可查询高考成绩&#xff0c;请考生密切关注广西招生考试院官网、官方微博、官…

vmware安装中标麒麟高级服务器操作系统 V7.0

vmware安装中标麒麟高级服务器操作系统 V7.0 1、下载中标麒麟高级服务器操作系统 V7.0镜像2、安装中标麒麟高级服务器操作系统 V7.02.1、新建虚拟机2.2、安装虚拟机 3、配置中标麒麟高级服务器操作系统 V7.03.1、登录系统3.2、配置静态IP地址 和 dns3.3、查看磁盘分区3.4、查看…

2021年衢州高考的成绩查询,2021年衢州高考状元是谁分数多少分,历年衢州高考状元名单...

2020年衢州一年一度的高考考试已经结束&#xff0c;今年衢州高考状元是谁呢&#xff0c;衢州高考状元出自哪个高中学校&#xff0c;文理科分数是多少分&#xff0c;一起来了解。一、2020年衢州高考状元名单资料2020年衢州高考状元名单和学校相关信息&#xff0c;截至目前发文时…

计算机主机机箱面板指示灯,电脑主机指示灯不亮了是什么原因

公告&#xff1a; 为响应国家净网行动&#xff0c;部分内容已经删除&#xff0c;感谢读者理解。话题&#xff1a;电脑主机指示灯不亮了是什么原因&#xff1f;回答&#xff1a;是指示灯坏了。或者是主机主板出了问题。参考回答&#xff1a;绿灯不亮是电源问题红灯不亮是硬盘或者…