【单链表,循环链表和双向链表的时间效率比较,顺序表和链表的比较,有序表的合并------用顺序表实现,用链表实现】

news2024/7/6 19:56:33

文章目录

  • 一、单链表,循环链表和双向链表的时间效率比较
  • 二、顺序表和链表的比较
  • 三、线性表的应用
    • 1.线性表的合并
    • 1.1有序表的合并------用顺序表实现
    • 1.2有序表的合并--------用链表实现

一、单链表,循环链表和双向链表的时间效率比较

查找表头结点(首元结点)查找表尾结点查找结点*p的前驱结点
带头结点的单链表LL->next时间复杂度O(1)从L->next依次向后遍历时间复杂度为O(n)通过*p无法找到其前驱
带头结点仅设头指针为L的循环单链表L->next时间复杂度为0(1)从L->next依次向后遍历时间复杂度为O(n)通过p->next可以找到其前驱时间复杂度为O(n)
带头结点仅设尾指针R的循环链表R->next时间复杂度为O(1)R时间复杂度O(1)通过p->next可以找到其前驱的时间复杂度O(n)
带头结点的双向循环链表LL->next时间复杂度为O(1)L->prior时间复杂度为O(1)p->prior时间复杂度为O(1)

二、顺序表和链表的比较

  • 链式存储结构的优点:
    结点空间可以动态申请和释放;
    数据元素的逻辑次序靠结点的指针来指示,插入和删除不需要移动数据元素。
  • 链式存储结构的缺点:
    存储密度小,每个结点的指针域额外需要占用存储空间。(存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比),即:(结点本身占用的空间)/(节点占用的空间总量))
    在这里插入图片描述
    一般的,存储密度越大,存储空间的使用率就越高。显然,顺序表的存储密度为1(100%),而链表的存储密度小于1.
  • 链式存储结构非随机存储。
    在这里插入图片描述

三、线性表的应用

1.线性表的合并

假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A = A∪B。
在这里插入图片描述
【算法步骤】
依次取出Lb中的每一个元素,执行以下操作:
1.在La中查找该元素。
2.如果找不到,则将其插到La的最后。

1.1有序表的合并------用顺序表实现

已知线性表La和Lb中的数据元素按值递增有序排列,现要求将La和Lb归并为一个新的线性表Lc,且Lc也按递增排列。
在这里插入图片描述

//线性表的合并
void Union(Sqlist La, Sqlist Lb) {
	int La_len = La.length;
	int Lb_len = Lb.length;
	for (int i = 1; i <= La.length; i++) {
		Elemtype e;
		GetElem(Lb, i, e);//查找Lb中的第i个元素,若果存在就赋值给e
		if (!LocateElem(La, e, i)) {//La中不存在与e相同的元素
			//将e插在La的最后
			int m = 0;
			ListInsert(La, ++m, e);
		}
	}
}

1.2有序表的合并--------用链表实现

在这里插入图片描述
①将La的头结点作为Lc的头结点(Lc表示最后合并好的链表)。
②指定三个三个结点
在这里插入图片描述
③比较La和Lb的结点的指针指向的数据域的大小:pa->data < pb->data;那个小的pa连接到Lc上:pc->next = pa就将小的那个链表放进Lc中。
④将pa复制给pc:pc=pa;pa指向下一个结点。
⑤再比较pa和pb的大小,这里的pb比较小,所以在pc后面接上pb:pc->next= pb;
在这里插入图片描述
⑥再将pb赋值给pc;pb往后面移pc=pb->next;
⑦继续比较pa->data和pb->data的值
⑧直到将某一个链表的结点都加入了,就完成链表的合并。
在这里插入图片描述
⑨如果哪个链表非空,就指向哪个链表:pc->next = pa ? pa:pb;

void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc) {
	LinkList pa = La->next;
	LinkList pb = Lb->next;
	LinkList pc = Lc = La;
	while (pa && pb) {
		if (pa->data <= pb->data) {
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else {
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
	}
	pc->next = pa ? pa : pb;//如果pa非空那么pc->next = pa,否则pb
	delete Lb;//释放Lb的头结点
}

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

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

相关文章

C语言每日一题(19)回文素数

牛客网 BC157 回文素数 题目描述 描述 现在给出一个素数&#xff0c;这个素数满足两点&#xff1a; 1、 只由1-9组成&#xff0c;并且每个数只出现一次&#xff0c;如13,23,1289。 2、 位数从高到低为递减或递增&#xff0c;如2459&#xff0c;87631。 请你判断一下&am…

React中的Virtual DOM(看这一篇就够了)

文章目录 前言了解Virtual DOMreact创建虚拟dom的方式React Element虚拟dom的流程虚拟dom和真实dom的对比后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react合集 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌…

双非本两年经验,靠这套Java面试题拿下拿下阿里、百度、美团、滴滴、快手、拼多多等大厂offer

背景 博主是双非大学毕业&#xff0c;有两年的互联网经验 社招面试也是一样的流程&#xff1a;项目 八股 算法 项目&#xff1a; 公司项目&#xff0c;涉及的技术包括但不限&#xff1a; 管理域&#xff1a;DDD、CQRS、事件总线、命令总线 运行域&#xff1a;微内核、规则…

卡尔曼滤波(Kalman Filter)原理及Python实现

Kalman-Filter-Example 项目地址 https://github.com/zhengjie9510/kalman-filter-example 理论公式 详细理论可参考DR_CAN关于卡尔曼滤波器的视频讲解。https://www.bilibili.com/video/BV1dV411B7ME 卡尔曼滤波公式分为预测和更新两部分。 预测公式为&#xff1a; x_hat…

IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘t_user‘ 中的标识列插入显式值

出现这个问题的原因 出现这个问题一般都是SQL server数据库&#xff0c;在创建表主键的时候双击修改标识规范默认自增&#xff0c;如果再插入显示的值就会出现这样的问题。这样的问题是非常常见的&#xff0c;通常会出现在大量数据插入表中&#xff0c;列如 解决的办法 在…

最新发布!阿里云卓越架构框架重磅升级

云布道师 10 月 19 日阿里云峰会山东上&#xff0c;阿里云重磅升级《阿里云卓越架构白皮书》&#xff0c;助力企业在阿里云上构建更加安全、高效、稳定的云架构。《阿里云卓越架构白皮书》在今年的阿里云峰会粤港澳大湾区首度亮相&#xff0c;这是阿里云基于多年服务各行各业客…

RK3399平台开发中安卓系统去除USB权限弹窗

RK3399平台开发中安卓系统去除USB权限弹窗 问题方法 问题 当我们在访问一个插入到Android系统的USB设备的时候往往是需要权限的&#xff0c;此时系统会弹出询问权限的对话框&#xff0c;而我们此时希望让它默认允许访问USB设备并且不希望用户看到这个对话框。 方法 文件目录&…

Dart HttpClient 网络请示框架的使用详解

Dart的HttpClient库是一个用于发送HTTP请求的库&#xff0c;它提供了一个简单的API来执行HTTP请求和接收响应。下面是一个详细的HttpClient使用指南。 1. 导入HttpClient库 首先&#xff0c;确保你已经将HttpClient库导入到你的Dart项目中。你可以使用pubspec.yaml文件中的de…

Java程序设计进阶

Java异常处理机制 异常 异常的最高父类是 Throwable&#xff0c;在 java.lang 包下。 Throwable 类的方法主要有&#xff1a; 方法说明public String getMessage()返回对象的错误信息public void printStackTrace()输出对象的跟踪信息到标准错误输出流public void printSta…

【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段

本文实现借助arcgis模型构建器,实现批量为多个土地利用矢量数据添加相同的字段,例如DLMC,DLTB等。 文章目录 问题分析模型构建问题分析 有多个土地利用数据矢量图层,每个图层中有很多个图斑,现在需要给每个图层添加一个或者多个字段,如DLCM,DLBM等。 属性表如下所示: …

javaEE -10(11000字详解5层重要协议)

一&#xff1a;应用层重点协议 1.1&#xff1a; DNS DNS&#xff0c;即Domain Name System&#xff0c;域名系统。DNS是一整套从域名映射到IP的系统。 TCP/IP中使用IP地址来确定网络上的一台主机&#xff0c;但是IP地址不方便记忆&#xff0c;且不能表达地址组织信息&#x…

python+requests+unittest执行自动化接口测试!

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest <2> pycharm里安装 2、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施…

mysql读取文件

环境地址&#xff1a;phpMyAdmin LOAD DATA INFILE 任意文件读取漏洞 | VULNSPY 参考文章&#xff1a; mysql任意文件读取漏洞学习_BerL1n的博客-CSDN博客 从一道ctf题学习mysql任意文件读取漏洞 - 安全客&#xff0c;安全资讯平台 MYSQL 任意文件读取 小组CTF出题感想 - …

linux离线环境中进入docker镜像安装python包

背景 当发现docker镜像因缺少python包执行失败时,需要修改docker镜像,这时候需要用到这个方法 执行失败步骤 (1)、拷贝docker镜像文件 (2)、加载镜像文件 docker load -i jetz_match.tar(3)、执行容器 docker run --name jetz_match -v /opt/jetz_match:/jetzmatch…

第2篇 机器学习基础 —(2)分类和回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习中的分类和回归都是监督学习的问题。分类问题的目标是将输入数据分为不同的类别&#xff0c;而回归问题的目标是预测一个连续的数值。分类问题输出的是物体所属的类别&#xff0c;而回归问题输出的是数值。本节课就…

waf绕过

1.市场Waf分类 硬件Waf&#xff1a;绿盟、安恒、启明、知道创宇等 需要选择模式 透明模式 反向代理分为反向代理&#xff08;代理模式&#xff09;与反向代理&#xff08;牵引模式&#xff09; 反向代理又分为两种模式&#xff0c;反向代理…

C++常见容器实现原理

引言 如果有一天&#xff01;你骄傲离去&#xff01;&#xff08;抱歉搞错了&#xff09;如果有一天&#xff0c;你在简历上写下了这段话&#xff1a; 那么你不得不在面试前实现一下STL常见的容器了。C的常用容器有&#xff1a;vector、string、deque、stack、queue、list、se…

合宙ESP32C3之Arduino、MicroPython上手

此处所说的ESP32C3&#xff0c;是合宙9.9元包邮的那一款&#xff0c;即所谓的“简约款”&#xff0c;无串口芯片。虽然有串口芯片的经典款版本兼容性更好&#xff0c;但随着各种IDE的不断升级&#xff0c;无串口使用起来也能游刃有余。 1.Arduino环境搭建 首先到Arduino.cc上下…

利用MATLAB创建栅格地图(代码可复制)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…