软考18-上午题-线性结构

一、线性结构

线性结构是一种逻辑结构。

特点:一个出度 + 一个入度(一个接一个排列)

1-1、线性表

最简单,最基本的线性结构。

定义:n(n >= 0)个元素的有限序列。

特点:

线性表的存储结构:

  • 顺序存储
  • 链式存储 

基本操作:插入、删除、查找。

1-1-1、线性表的顺序存储

一组地址连续的存储单元。如:数组

逻辑上相邻的两个元素,物理位置上也相邻。

  • 优点:随机存取;O(1)
  • 缺点:插入、删除需要移动元素。

表长为n的线性表中插入元素,等概率下,插入一个新元素需要移动的元素个数的数学期望:

E = n/2

表长为n的线性表中删除元素,等概率下,删除一个新元素需要移动的元素个数的数学期望:

E = (n-1)/2

1、插入操作的代码实现

在数组的第K个位置,插入元素x

时间复杂度:

2、删除操作的代码实现

删除数组第K个位置的元素

时间复杂度:

3、查找操作的代码实现

查找数组中第K个位置的元素 

1-1-2、线性表的链式存储

通过指针链接起来的节点存储元素

优点:

支持动态内存分配,结点空间需要的时候才申请,无需实现分配。

支持高效的插入、删除操作,时间复杂度为O(1)。

缺点:

不支持随机访问,需要从头节点开始遍历整个链表才能访问任意位置的元素。

特点: 

数据元素,逻辑上连续,物理上分开。

单链表 = 线性链表 

单链表分为:

  • 带头结点的单链表;
  • 不带头结点的单链表 

无论是否有头结点,头指针始终指向链表的第一个结点!!!

1、单链表的定义

或者:

2、单链表的插入操作

在链表list的位置K处,插入一个节点(K = 1,2,......list.length+1)

2-1、不带头结点

①不带头结点的链表,在表头插入结点

x->next = head;
head = x;

 ②不带头结点的链表,在表头以外的地方插入结点

x->next = p->next;
p->next = x;

P指向k-1的位置 

2-2、带头结点(推荐)

头结点:(可以看做第0个节点)

        在单链表的第一个结点之前附加一个结点,称为头结点。

        头结点的Data域可以不设任何信息,也可以记录表长等相关信息。 

①带头结点的链表,在任意位置插入结点(包括第一个位置)

x->next = p->next;
p->next = x;

【对比小结】:

        这个时候你会发现,不带头结点的链表的两种情况操作步骤不一样;而带头结点的两种情况操作步骤是一样的。

所以,带头节点的单链表的插入操作更加方便!!!

2-3、时间复杂度

代表头/不带表头的单链表,插入的时间复杂度:

  • 最好:O(1)——表头
  • 最坏:O(n)——表尾
  • 平均:O(n)

3、单链表的删除操作

删除第K个位置的节点

重点:找到k-1位置的节点,将k-1位置的节点指向k+1位置的节点

3-1、不带头结点

①删除第一个节点(k=1)

list = list.next;

②删除除了第一个节点以外的节点

Node s = p.next;
p.next = s.next;

 

3-2、带头结点

Node s = p.next;
p.next = s.next;
3-3、时间复杂度

带头结点/不带头结点的单链表,删除操作的时间复杂度

4、单链表的查找操作 
4-1、不带头结点

代码和带头结点的查询操作一样!!! 

 

4-2、带头结点

 

 

4-3、时间复杂度

带头结点/不带头结点的单链表,查询操作的时间复杂度

5、循环单链表
 

特点:

        可以从表中任意节点开始,遍历整个链表。

 

5-1、初始化

head.next = head;

 

 5-2、插入操作

尾指针,好处:

        可以直接通过尾指针,找到头结点。​​​​​​​

        在末尾(n+1)插入节点的时候,没有尾指针,则时间复杂度为O(n),若是有尾指针,则时间复杂度为O(1)。

但是在第n个位置插入节点时,还是时间复杂度为O(n)

6、双链表

 

特点:

        可以从表中任意的节点出发,从两个方向上,遍历链表。 

 

6-1、插入操作

插入到非第一个和非最后一个位置的节点。

 

s.front = p.front;
p.front.next = s;
s.next = p;
p.front = s;
6-2、删除节点

删除到非第一个和非最后一个位置的节点。

p.next = s.next;
s.next.front = p; 

二、真题

真题1:

单链表的查找时间复杂度(平均):O(n) 

真题2:

 

删除第K个节点,要先找到第k-1个节点。 (前一个节点)

真题3:

 

真题4:

顺序表:

 

单链表:

  • 查找:O(n)
  • 删除:O(n)
  • 插入:O(n)

 真题5:

真题6:

 

真题7:

 

真题8:

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

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

相关文章

如何读论文

如何读论文 0. 目的 单篇文章从头读到尾,可以; 世界上那么多篇文章, 都这样读, 时间上划不来。 适合你的文章就那么一小撮。 paper 的八股文结构: titleabstractintromethodexpconclusion 1. 第一遍 海选&#…

152基于matlab的GUI滚动轴承特征频率计算

基于matlab的GUI滚动轴承特征频率计算,输入轴承参数,包括转速,节圆直径、滚子直径、滚子数、接触角,就可得滚动特征频率结果,程序已调通,可直接运行。 152 matlab 轴承特征频率 GUI (xiaohongshu.com)

react-activation实现缓存,且部分页面刷新缓存,清除缓存

1.安装依赖 npm i -S react-activation2.使用AliveScope 包裹根组件 import { AliveScope } from "react-activation" <AliveScope><Router><Switch><Route exact path"/" render{() > <Redirect to"/login" push …

代码随想录 Leetcode222.完全二叉树的节点个数

题目&#xff1a; 代码&#xff08;首刷自解 2024年1月30日&#xff09;&#xff1a; class Solution { public:int countNodes(TreeNode* root) {int res 0;if (root nullptr) return res;queue<TreeNode*> deque;TreeNode* cur root;deque.push(cur);int size 0;w…

Shopee菲律宾选品:如何找到畅销产品并提高销售业绩

在电子商务行业中&#xff0c;产品的选择是取得成功的关键之一。对于在Shopee菲律宾平台上销售的卖家来说&#xff0c;找到畅销产品是至关重要的。本文将介绍一些有效的方法&#xff0c;帮助卖家在Shopee菲律宾平台上选择热销产品&#xff0c;并提高销售业绩。 先给大家推荐一…

【Linux】理解系统中一个被打开的文件

文件系统 前言一、C语言文件接口二、系统文件接口三、文件描述符四、struct file 对象五、stdin、stdout、stderr六、文件描述符的分配规则七、重定向1. 重定向的原理2. dup23. 重谈 stderr 八、缓冲区1. 缓冲区基础2. 深入理解缓冲区3. 用户缓冲区和内核缓冲区4. FILE 前言 首…

169. 多数元素-面试经典150

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3 示例 …

25考研|660/880/1000/1800全年带刷计划

作为一个参加过两次研究生考试的老学姐&#xff0c;我觉得考研数学的难度完全取决于你自己 我自己就是一个很好的例子 21年数学题目是公认的简单&#xff0c;那一年考130的很多&#xff0c;但是我那一年只考了87分。但是22年又都说是有史以来最难的一年&#xff0c;和20年的难度…

Entity实体设计

Entity实体设计 &#x1f4a1;用来和数据库中的表对应&#xff0c;解决的是数据格式在Java和数据库间的转换。 &#xff08;一&#xff09;设计思想 数据库Java表类行对象字段&#xff08;列&#xff09;属性 &#xff08;二&#xff09;实体Entity编程 编码规范 &#x1f4a…

谈谈BlueStore

目录 未完待续前言组成前期准备工作基础概念对象PextentextentBlobNode 线程事务磁盘的抽象与分配位图法分层位图 上电流程写流程读流程参考资料 未完待续 前言 BlueStore是什么&#xff1f; Ceph是一个统一的分布式存储系统。BlueStore是Ceph的存储引擎。 它的作用是什么&am…

【Go语言成长之路】引入外部包

文章目录 引入外部包一、查找需要引用的包二、引入需要导入的包三、运行程序 引入外部包 ​ 实现Demo: 引用rsc.io/quote包来实现打印输出 一、查找需要引用的包 ​ 比如说我现在想要找一个quote的包&#xff0c;那么可以通过如下步骤进行操作&#xff1a; 访问pkg.go.dev,并…

服务器运行中发生脚本错误怎么办

在服务器运行过程中&#xff0c;由于各种原因&#xff0c;可能会出现脚本错误。这些错误可能源于编程错误、不兼容的库或依赖项&#xff0c;或者不良的服务器环境配置。这些错误可能会导致服务器的正常运行受到影响&#xff0c;甚至导致整个网站或应用程序的崩溃。因此&#xf…

2024美赛数学建模E题思路分析 - 财产保险的可持续性

1 赛题 问题E&#xff1a;财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来&#xff0c;世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年&#xff0c;保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。[…

【Spring源码分析】推断构造方法

推断构造方法源码解析 一、确认候选构造——AutowireAnnotationBeanPostProcessor#determineCandidateConstructors二、autowireConstructor 方法源码解析三、总结 阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系…

基于大数据的淘宝电子产品数据分析的设计与实现

&#xff08;1&#xff09;本次针对开发设计系统并设置了相关的实施方案&#xff0c;利用完整的软件开发流程进行分析&#xff0c;完成了设置不同用户的操作权限和相关功能模块的开发&#xff0c;最后对系统进行测试。 &#xff08;2&#xff09;框架可以帮助程序开发者快速构建…

Gson源码解读

一&#xff0c;概述 gson作为流行的json工具&#xff0c;笔者使用较多。本文主要目的是解读下Gson的源码实现&#xff0c;就没有然后了。 二&#xff0c;实例 实例如下图所示&#xff0c;笔者简单调用gson的toJson方法获得json字符串&#xff0c;fromJson则从json字符串解析…

Cmake语法学习2:常用变量

目录 1.常用变量简介 1.1提供信息的变量 1.2改变行为的变量 1.3描述系统的变量 ​编辑1.4控制编译的变量 2.提供信息的变量 2.1PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR 2.2 CMAKE_SOURCE_DIR 和 CMAKE_BINARY_DIR 2.3CMAKE_CURRENT_SOURCE_DIR 和CMAKE_CURRENT_BIN…

【文件上传WAF绕过】<?绕过、.htaccess木马、.php绕过

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

【笔记】React Native实战练习(仿网易云游戏网页移动端)

/** * 如果系统看一遍RN相关官方文档&#xff0c;可能很快就忘记了。一味看文档也很枯燥无味&#xff0c; * 于是大概看了关键文档后&#xff0c;想着直接开发一个Demo出来&#xff0c;边学边写&#xff0c;对往后工作 * 开发衔接上能够更顺。这期间肯定会遇到各种各样的问题&a…

Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)

一、QStateMachine 简单应用&#xff1a; 实现按钮的文本切换 QStateMachine machine; //定义状态机&#xff08;头文件定义&#xff09;QState *off new QState(); //添加off 状态off->assignProperty(ui->pushButton_2, "text", "Off"); //绑定该…