数据结构——循环链表,双向链表,线性表和有序表的合并详解

目录

1.循环链表

1.带尾指针循环链表的合并 

代码示例:

2.双向链表

代码示例:

  1.双向链表的插入

​代码示例:

2.双向链表的删除

代码示例:

3.单链表,循环链表,双向链表时间效率的比较

4.顺序表和链表的比较

 5.存储密度

6.线性表的应用

 1.线性表的合并

​ 代码示例:

2.有序表的合并

​1.用顺序表实现

代码示例:

2.用链表实现 

代码示例:

7.案例分析

1.一元多项式的运算 

2.稀疏多项式的运算 

3.图书信息管理系统 

8.总的代码

 


1.循环链表

36a08504222f4f44ace12b32fbe571a3.jpeg

1f181792458d401ba754b4af69b57aa0.jpeg ca015c945f10479790f8eae6aaf20a76.jpeg

1.带尾指针循环链表的合并 

a6017ad0443a44c7b3166947e084b706.jpeg d479fa317aaa4bab82ea0234b13c1e44.jpeg

代码示例:

linklist connect(linklist ta,linklist tb)
{lnode * p;p = ta -> next;ta -> next = tb -> next -> next;delete tb -> next;tb -> next = p;return tb;
}

2.双向链表

89f0f3bff9fe4afeba183b78d4fb245d.jpeg 547467a793694bd283b77b973b45df48.jpeg

代码示例:

typedef struct dulnode{int data;struct dulnode *prior,*next;
}dulnode,*dulinklist;

 

865ede2639904dae801c24a34ed7a96a.jpeg 1.双向链表的插入

9a7e29064985461588fec0746ed9ab50.jpeg

36ba44ac43cb47e8887fb07bb48e2a37.jpeg 代码示例:

void insert_dul(dulinklist &l,int i,int e)
{if((p = getelem_dul(l,i)) == NULL) return 0;dulnode * s;s -> data = e;s -> prior = p -> prior;p -> prior -> next = s;s -> next = p;p -> prior = s;return 1;
}

2.双向链表的删除

0b015518e7fd4716b97c931a4b958ea6.jpeg

代码示例:

void delete_dullist(dulinklist &l,int i,int &e)
{dulnode *p;if((p = getelem_dul(l,i)) == NULL) return 0;e = p -> data;p -> prior -> next = p -> next;p -> next -> prior = p -> prior;delete p;return 1;
}

3.单链表,循环链表,双向链表时间效率的比较

 4adce09d472846e29009dd41fc4adf7f.png

4.顺序表和链表的比较

 70d11e5d043d418ca30c7d1216131c1b.jpeg

4418aa2b63b74d32bc8a0ea68c570e0c.png 5.存储密度

50f99ebbe4d34bf0a06c3a99fe8240ed.jpeg

6.线性表的应用

30d550749b6646e08287f14552d6f680.jpeg 1.线性表的合并

1e3f3b97b214425a8f83c8fc93b75ef8.jpeg

5b2c50fcdf064463b27e6798674036cf.jpeg 代码示例:

void union(list &la,list &lb)
{int la_len = listlength(la);int lb_len = listlength(lb);for(int i = 1; i <= lb_len; i ++){int e = getelem(lb,i,e)//从b链表中取元素e,如果a链表中不存在元素e,就将元素e插入到链表a尾部并且让链表a长度加一if(!locateelem(la,e)){listinsert(&la,++la_len,e)}}
}

2.有序表的合并

cfc263d3202b4ee99ad0d470aab019b2.jpeg

7616cbf02c9543e28fb19e160fad034f.jpeg 1.用顺序表实现

d1998b66ff394b5ca9629206448eb51d.jpeg

 

06c1cac946654d3daf557d1db465de10.jpeg 

75e97ff3b83140048b0395935521eda4.png

代码示例:
void merge_list(sqlist la,sqlist lb,sqlist &lc)
{lnode *pa,*pb,*pc;pa = la.elem;pb = lb.elem;lc.length = la.length + lb.length;lc.elem = new int[lc.length];pc = lc.elem;lnode *pa_last,*pb_lastpa_last = la.elem + la.length - 1;pb_last = lb.elem + lb.length - 1;while(pa <= pa_last && pb <= pb_last){if(*pa < *pb){*pc++ = *pa++;}else{*pc++ = *pb++;}}while(pa <= pa_last) *pc++ = *pa++;while(pb <= pb_last) *pc++ = *pb++;
}

2.用链表实现 

8909502cd43c4f348514efb93fd06a5c.png

8a9f4f8945494eb192fdcd0d4df12b41.png

2015710684524d419063494d5624b364.png

c81591ffaa014018b543ba7f7e6ed226.png

b700923301b84fedae1f1c2266199ee9.png

代码示例:

void merge_list(linklist &la,linklist &lb,linklist &lc)
{lnode *pa,*pb,*pc;pa = la -> next;pb = lb -> next;pc = lc = la;while(pa != NULL && lb != NULL){if(pa -> data <= pb -> data){pc -> next = pa;pc = pa;pa = pa -> next;}else{pc -> next = pb;pc = pb;pb = pb -> next;}}if(pa == NULL) pc -> next = pb;else if(pb == NULL) pc -> next = pa;delete lb;
}

7.案例分析

1.一元多项式的运算 

9c6ec9ec1481423dbd0fdcacb1d07383.png

b4361abc1e534d0a9dc178c5aecd2bf2.png

2.稀疏多项式的运算 

d3f986d87357497692437fc8d047a3e2.png

1b722c7c3d1d43d7a147792804c31678.png

e29a8e243b234974af1d9e8109ebec54.png

c8ddac02e38e4cdca9ba9b0493854e3e.png

0ab93b5f44fc4fbf885e1da5c97cec0c.png

cfa7004cd8d54f1fbd3435374178e823.png

3.图书信息管理系统 

03bb8bb17f47419685f029cf2a93e61d.png

048c6d749b9f4f6c9055f2444f8abed7.png

69ba9ff027274aaab297ed1737a491c7.png

8.总的代码

typedef struct dulnode{int data;struct dulnode *prior,*next;
}dulnode,*dulinklist;linklist connect(linklist ta,linklist tb)
{lnode * p;p = ta -> next;ta -> next = tb -> next -> next;delete tb -> next;tb -> next = p;return tb;
}void insert_dul(dulinklist &l,int i,int e)
{dulinklist p;if((p = getelem_dul(l,i)) == NULL) return 0;dulnode * s;s -> data = e;s -> prior = p -> prior;p -> prior -> next = s;s -> next = p;p -> prior = s;return 1;
}void delete_dullist(dulinklist &l,int i,int &e)
{dulnode *p;if((p = getelem_dul(l,i)) == NULL) return 0;e = p -> data;p -> prior -> next = p -> next;p -> next -> prior = p -> prior;delete p;return 1;
}void union(list &la,list &lb)
{int la_len = listlength(la);int lb_len = listlength(lb);for(int i = 1; i <= lb_len; i ++){int e = getelem(lb,i,e)//从b链表中取元素e,如果a链表中不存在元素e,就将元素e插入到链表a尾部并且让链表a长度加一if(!locateelem(la,e)){listinsert(&la,++la_len,e)}}
}void merge_list(sqlist la,sqlist lb,sqlist &lc)
{lnode *pa,*pb,*pc;pa = la.elem;pb = lb.elem;lc.length = la.length + lb.length;lc.elem = new int[lc.length];pc = lc.elem;lnode *pa_last,*pb_lastpa_last = la.elem + la.length - 1;pb_last = lb.elem + lb.length - 1;while(pa <= pa_last && pb <= pb_last){if(*pa < *pb){*pc++ = *pa++;}else{*pc++ = *pb++;}}while(pa <= pa_last) *pc++ = *pa++;while(pb <= pb_last) *pc++ = *pb++;
}void merge_list(linklist &la,linklist &lb,linklist &lc)
{lnode *pa,*pb,*pc;pa = la -> next;pb = lb -> next;pc = lc = la;while(pa != NULL && lb != NULL){if(pa -> data <= pb -> data){pc -> next = pa;pc = pa;pa = pa -> next;}else{pc -> next = pb;pc = pb;pb = pb -> next;}}if(pa == NULL) pc -> next = pb;else if(pb == NULL) pc -> next = pa;delete lb;
}

 

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

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

相关文章

JVM基础篇

什么是JVM java虚拟机 JVM的功能 1.解释和运行 对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机执行 2.内存管理 自动为对象、方法等分配内存 自动的垃圾回收机制&#xff0c;回收不再使用的对象&#xff08;c不会自动回收&#xff0c;相当于降…

腾讯云轻量服务器地域选择教程以及不同地域的区别

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

net/http 框架源码解读

一、Hello World 使用net/http编写一个简单的web服务器, 定义了一个UserHandler的处理函数&#xff0c;通过HandleFunc来将路由和handler进行绑定&#xff0c;最后通过ListenAndServe启动web服务&#xff0c;后面我将handler统称为视图函数 package mainimport "net/htt…

PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融…

uniapp中人脸识别图片并圈起人脸

效果如上&#xff0c;我用的是阿里云的人脸识别。首先&#xff0c;我们先封装一个阿里云的请求js文件 faceRecognition.js import CryptoJS from crypto-js//SignatureNonce随机数字 function signNRandom() {const Rand Math.random()const mineId Math.round(Rand * 1000…

R语言lavaan结构方程模型(SEM)实践技术应用

基于R语言lavaan程序包&#xff0c;通过理论讲解和实际操作相结合的方式&#xff0c;由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量经典案例&#xff0c;这些案例来自Nature、Ecology、Ecological Applications、Journal of Ecolog…

MySQL 数据库 下载地址 国内阿里云站点

mysql安装包下载_开源镜像站-阿里云 以 MySQL 5.7 为例 mysql-MySQL-5.7安装包下载_开源镜像站-阿里云

C#,图论与图算法,输出无向图(Un-directed Graph)全部环(cycle)的算法与源代码

1 无向图(Un-directed Graph)全部环 图算法中需要求解全部的环。 2 方法 使用图着色方法,用唯一的数字标记不同循环的所有顶点。图形遍历完成后,将所有类似的标记数字推送到邻接列表,并相应地打印邻接列表。 3 算法 将边插入到邻接列表中。调用DFS函数,该函数使用着色方…

C# wpf 使用GDI实现截屏

wpf截屏系列 第一章 使用GDI实现截屏&#xff08;本章&#xff09; 第二章 使用GDI实现截屏 第三章 使用DockPanel制作截屏框 第四章 实现截屏框热键截屏 第五章 实现截屏框实时截屏 第六章 使用ffmpeg命令行实现录屏 文章目录 wpf截屏系列前言一、导入gdi32方法一、NuGet获取…

解决无法登录到 ArcGIS Server Administrator

目录 问题复现原因分析解决办法 问题复现 今天在访问arcgisserver后台准备设置arcgis api for js请求路径时&#xff0c;登录之后出现500错误。Services Directoryhttp://xxx.xxx.xxx.xxx:6080/arcgis/admin/system/handlers/rest/servicesdirectory 原因分析 我实在两台虚拟机…

【经验分享】Windows10无法通过SSHFS连接服务器

【经验分享】Windows10如何通过SSHFS连接服务器 前言问题分析解决方法 前言 现在很多公司出于成本考虑&#xff0c;不会为每一台电脑都提供高配置&#xff0c;所以需要通过访问云服务器来进行编译等操作。程序员如果配备的是一台windows电脑&#xff0c;那么需要访问linux服务…

vue iview 级联选择器遇到的坑

我们PC项目用到的前端技术栈是vue+iview,最近有个需求,要做个级联选择器,并且是懒加载动态加载后端返回的数据。效果如下: 如下图所示,在我们封装的公共组件form-box.vue里有我们级联选择器: 代码如下: <!--级联选择器--><template v-else-if="item.type…

基于Java的海南旅游景点推荐系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

在Django中使用PyJWT实现登录及验证功能

目录 1、安装PyJWT 2、对信息加密及解密 3、配置登录视图和及url 4、登录装饰器 5、在验证有登录权限的的视图中登录 PyJWT的使用 1、安装PyJWT pip isntall pyjwt 2、对信息加密及解密 import jwt import datetime from jwt import exceptions# 加密盐 JWT_SALT &qu…

腾讯云轻量服务器地域选择教程,2024最新地域选择攻略

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

Android 异常重启--踩坑归来--干货篇

如果你未对自己的app进行过处理&#xff0c;那么线上各种偶发莫名其妙的闪退、白屏、数据丢失&#xff0c;请检查一下是否因此而引发的。 起因 异常重建指的是非配置变更情况下导致的 Activity 重新创建。 常见场景大多是因为内存等资源不足&#xff0c;从而导致后台应用被系…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)

可用于EGL/OpenGLES和媒体数据写入&#xff0c;并显示在XComponent组件。 说明&#xff1a; 该组件从API Version 8 开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 构造参数type为"surface"时不支持。 从API version …

VsCode 使用密钥连接 Centos

在 centos 下生成密钥 ssh-keygen 执行上述命令后&#xff0c;一路回车&#xff0c;直到出现如下界面&#xff1a; 查看密钥生成情况 cd /root/.ssh ls 结果如下所示&#xff1a; 服务器上安装公钥 cd /root/.ssh cat id_rsa.pub >> authorized_keys ls >查看确…

Covalent Network(CQT)与 Celo 集成,推动 Web3 下一代现实资产解决方案的发展

Covalent Network&#xff08;CQT&#xff09;是一个统一的区块链 API 提供商&#xff0c;其已正式与 Celo 集成&#xff0c;Celo 是一个以移动优先的 EVM 兼容链。这一重要的里程碑旨在提升 Celo 生态系统中开发者的能力&#xff0c;通过授予他们访问关键链上数据的权限&#…

Python | Bootstrap图介绍

在进入Bootstrap 图之前&#xff0c;让我们先了解一下Bootstrap&#xff08;或Bootstrap 抽样&#xff09;是什么。 Bootstrap 抽样&#xff08;Bootstrap Sampling&#xff09;&#xff1a;这是一种方法&#xff0c;我们从一个数据集中重复地取一个样本数据来估计一个总体参数…