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

news2024/9/27 21:26:45

目录

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_last
	pa_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_last
	pa_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.coloradmin.cn/o/1517123.html

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

相关文章

LSM树(Log-Structured-Merge-Tree)

学习笔记&#xff1a;参考LSM树详解 - 知乎 (zhihu.com) NoSQL&#xff08;HBase,LevelDB,RocksDB&#xff09;采用LSM树 核心&#xff1a;利用顺序写来提高性能&#xff0c;但因为分层&#xff08;内存和文件两部分&#xff09;的设计会降低读性能。//牺牲小部分读性能来换高…

Hack The Box-Codify

目录 信息收集 rustscan nmap dirsearch WEB 提权 get user get root 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -b 2250 10.10.11.239 --range0-65535 --ulimit4500 -- -A -sC .----. .-. .-. .----..---. .----. .---. .--. .-. …

漏洞复现-金蝶系列

漏洞复现-金蝶系列 Apusic 金蝶天燕Apusic 应⽤中间件代码命令执⾏金蝶云星空RCE金蝶云OA星空 CommonFileserver 任意文件读取金蝶云星空 管理中心介绍⾦蝶 EAS 系统存在⽬录遍历金蝶EAS myUploadFile任意文件上传实战之金蝶RCE上传绕过金蝶云金蝶云SaveUserPassport存在反序列…

音视频实战---读取音视频文件的AAC音频保存成aac文件

1、使用avformat_open_input函数打开音视频文件 2、使用avformat_find_stream_info函数获取解码器信息。 3、使用av_dump_format设置打印信息 4、使用av_init_packet初始化AVPacket。 5、使用av_find_best_stream查找对应音视频流的流下标。 6、使用av_read_frame读取音视…

移动硬盘分区误删?别担心,数据恢复来帮忙!

在日常使用移动硬盘的过程中&#xff0c;有时会因为各种原因导致分区被误删。这种情况一旦发生&#xff0c;很多人会感到惊慌失措&#xff0c;担心数据丢失无法找回。然而&#xff0c;只要及时采取正确的数据恢复措施&#xff0c;大多数情况下都能够成功恢复误删的分区和数据。…

变量直接赋值、浅拷贝、深拷贝、递归、异常

对象拷贝(对象存在堆中) 变量直接赋值 赋值 就是一个&#xff0c;比如let obj2obj1 这就是赋值&#xff0c;只是把栈中存储的值&#xff0c;赋值给另一个变量 把obj1在栈中的地址&#xff0c;赋值给obj2 <script>let str hellolet str2 str //把str的值,赋值给str2.也…

公派访问学者申请被拒签的原因有哪些?

在申请公派访问学者时&#xff0c;拒签是一种常见的结果&#xff0c;其原因多种多样。首先&#xff0c;申请材料不完整或者不符合要求可能是导致拒签的主要原因之一。例如&#xff0c;个人简历、研究计划书、推荐信等材料未能清晰地展示申请人的学术背景和研究意图&#xff0c;…

想零基础转行Python开发,怎么学习呢?

转行零基础学Python编程开发难度大吗&#xff1f;从哪学起&#xff1f;近期很多小伙伴问我&#xff0c;如果自己转行学习Python&#xff0c;完全0基础能否学会呢&#xff1f;Python的难度到底有多大&#xff1f;今天&#xff0c;小编就来为大家详细解读一下这个问题。 学习 Py…

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…

用这个工具制作企业宣传册,效果也太酷了

​随着市场的竞争日益激烈&#xff0c;企业的宣传册成为了展示企业形象和实力的重要途径。而如何制作一份既美观又实用的宣传册&#xff0c;成为了许多企业家和设计师们关注的焦点。 今天&#xff0c;笔者要向大家介绍的就是这样一款工具&#xff0c;它能够让用户轻松制作出既具…

软件测试中的AI-为什么它在软件自动化测试中很重要?

通俗地说&#xff0c;人工智能&#xff08;AI&#xff09;是计算机科学的一个领域&#xff0c;它专注于使机器“智能化”。所谓智能&#xff0c;就是使系统能够像人类一样学习和做出决策。因此&#xff0c;人工智能机器将能够学习如何在特定情况下做出反应&#xff0c;然后根据…

基于springboot社团管理系统的设计与实现

互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳…

使用vscode+clangd+bear+publickeyssh远程开发Linux程序

目录 配置ssh密钥远程登录登录远程Linux主机安装必要软件安装vscode插件1.安装remote-ssh插件2.通过vscode远程连接到linux机器3.在远程安装插件clangd4.关闭C/C Intellense engine 使用vscodeclangdbear1.修改Makefile2.编译内核3.结果 配置ssh密钥远程登录 一定要配置成密钥…

Nacos安装遇到的问题

Windows安装nacos双击startup.cmd执行出错 改成用cmd窗口输入命令 startup.cmd -m standalone启动之后登录的问题 权限认证失败 没有 命名空间的访问权限&#xff01; 把默认的登录url改成&#xff1a; http://127.0.0.1:8848/nacos/#/login登录之后&#xff0c;点击导入配置…

基于springboot实现驾校信息管理系统项目【项目源码+论文说明】

基于springboot实现驾校信息管理系统演示 摘要 随着人们生活水平的不断提高&#xff0c;出行方式多样化&#xff0c;也以私家车为主&#xff0c;那么既然私家车的需求不断增长&#xff0c;那么基于驾校的考核管理也就不断增强&#xff0c;那么业务系统也就慢慢的随之加大。信息…

用python证明一生一世很容易,但要爱一个人一生一世就比较难了

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

halconOCR文字识别

1、OCR文字识别 FontFile : Universal_0-9_NoRej dev_update_window (off) read_image (bottle, bottle2) get_image_size (bottle, Width, Height) dev_open_window (0, 0, Width, Height, black, WindowHandle) set_display_font (WindowHandle, 16, mono, true, false) dev…

JS-06-数组

一、数组的创建与访问 见&#xff1a;JS-04-javaScript数据类型和变量 JavaScript的Array可以包含任意数据类型&#xff0c;并通过索引来访问每个元素。 要取得Array的长度&#xff0c;直接访问length属性&#xff1a; let arr [1, 2, 3.14, Hello, null, true]; console.l…

单头注意力机制(ScaledDotProductAttention) python实现

输入是query和 key-value&#xff0c;注意力机制首先计算query与每个key的关联性&#xff08;compatibility&#xff09;&#xff0c;每个关联性作为每个value的权重&#xff08;weight&#xff09;&#xff0c;各个权重与value的乘积相加得到输出。 import torch import tor…

AS-V1000 视频监控平台产品介绍:web客户端功能介绍(上)

目 录 一、引言 1.1 AS-V1000视频监控平台介绍 1.2 平台服务器配置说明 二、软件概述 2.1 软件用途 2.2 登陆界面 2.3 主界面 2.4 视频浏览 三、web端主要功能介绍 3.1 多画面风格 3.1.1风格切换 3.1.2 切换效果 3.2截屏 3.2.1 单画面截屏 3.2.2 …