小杰数据结构(one day)——心若安,便是晴天;心若乱,便是阴天。

1.数据结构

计算机存储、组织数据的方式;

有特定关系的数据元素集合;

研究数据的逻辑结构、物理结构(真实存在)和对应的算法

新结构仍保持原结构类型;

选择更高的运行或存储效率的数据结构。

逻辑结构——面向问题

物理结构面向计算机

基本目标是将数据及其逻辑关系存储到计算机的内存中

(1)基本概念

数据——数据对象——数据元素(节点-链表中常出现)-整体处理——数据项(数据最小单位)

(2)逻辑结构

1.集合结构

2.线性结构

3.树状结构(层次结构)

4.图形结构(网状结构)

(3)物理结构

①顺序存储结构

数据元素/节点存放在地址连续的存储单元里

1.内存连续

2.相对于链式存储结构每个元素占用空间少

②链式存储结构

数据元素/节点存放在任意的内存空间内,通过指针域来表示、连接

1.内存不连续

2.通过指针连接

③索引存储结构

存储数据同时,建立一个附加索引表(如通讯录)

1.索引速度快

2.多了一张索引表,占用内存多

3.删除数据文件时需及时更改索引表

④散列存储结构

构造相应散列函数,由散列函数值来确定  数据元素/节点  存放的地址

1.存时需按对应关系存

2.取时也按对应关系取

2.算法

(1)概念

软件 = 程序 + 文档

程序 = 数据结构 + 算法

软件 = 数据结构 + 算法 + 文档

算法 = 对结点集合的运算和操作 + 控制结构

软件、程序、算法——逐层包含关系

算法用来描述特定问题的求解步骤,指令有限序列,每个指令代表一个及以上操作

(2)五大特征

1.有穷性

        算法必须在有穷时间内完成

2.确切性

        指令必须有确切含义,不可有二义性。为True或False

3.可行性

        算法可行,算法中描述的操作都可实现

4.输入性

        可输入,以刻画对象的初始情况

5.输出性

        必须有一个或多个输出

(3)描述

算法的描述样式多样化,常用有四种。

1.自然语言描述法:

        最简单的描述法

        优点:简单、便于理解

        缺点:不够严谨、易产生歧义。

2.算法框图法:

        使用算法描述工具描述算法(如程序流程图)

        特点:便于理解交流、简洁明了

3.伪代码语言描述法:

        介于高级程序设计语言与自然语言之间

        忽略了一些严格的语法规则与描述细节

        比高级程序设计语言更容易描述和被人所理解

4.高级程序设计语言描述法:

        可在计算机中执行的程序描述算法

        优点:不用转换,可直接编译执行

        缺点:比较难理解

所谓“程序”是指对所要解决问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说“数据结构+算法 = 程序”。

程序可以不满足算法的有穷性(如,操作系统)

(4)标准

衡量一个算法的四个标准:

1.正确性

        能够正常运行,且得到正确答案

2.可读性

        便于阅读、理解和交流

3.健壮性

        当输入不合法时,算法能做出相关处理。

4.时间效率高与、低存储量需求

        执行时间少,耗内存少

(5)时间复杂度

        一个算法的复杂性分析主要是对算法效率的分析,运行速度的时间效率,以及其运行时所需要占用的空间大小。

        算法的时间复杂度是一个函数,它定性描述该算法的运行时间,时间复杂度常用 O 表述。

①概念

要想计算时间复杂度首先得找到该算法中的循环,算法中循环执行的次数就是算法的时间复杂度。

函数表达式:

        T(n) = O(f(n))

T(n) 问题规模的时间函数

n 代表的是问题的规模 输入数据量的大小

O 时间数量级

f(n) 算法中可执行语句重复执行的次数

由此可得计算时间复杂度的一般规律(大O表示法),如:N*N+N+10

  1. 如果有常数项将其置为1N*N+N+1
  2. 去除表达式中所有加法常数。 N*N+N
  3. 修改的表达式中 只保留最高阶项,因为只有它才会对最终结果产生影响。 N*N
  4. 如果最高阶项系数存在且不是1,则将其系数变为1,得到最后的表达式。 N*N

计算冒泡排序的时间复杂度:

        Sn = [n*(a1+a2)]/2

3.顺序表

每种结构都有存在的意义

线性表的特点:一对一,每个节点最多一个前驱和一个后继,首尾节点特殊:首节点无前驱,尾节点无后继。

逻辑结构:线性结构

物理结构:顺序存储结构

def show(buf: list[int]):

        遍历列表中的有效元素

last:

        始终标记列表中最后一个有效元素下标

        用global修饰

例:

        练习:自己实现insert()思想

                 列表:buf = [1, 996, 520, 4, 5]

                要求:第三个位置插入一个元素

def insert(buf, index, data):''':param buf:列表的首地址:param index:插入的位置:param data:给列表中插入的数据:return:'''for i in range(len(buf) - 1, index, -1):# 防止越界buf[i] = buf[i - 1]buf[index] = datadef show(buf):for i in range(len(buf)):print("buf[%s] = %s" % (i, buf[i]))if __name__ == '__main__':buf = [1, 520, 996, 4, 5]show(buf)insert(buf, 3, 888)show(buf)
last版本:
# 始终标记列表中最后一个有效元素的下标
last = 4def insert(buf, index, data):''':param buf:列表的首地址:param index:插入的位置:param data:给列表中插入的数据:return:'''global lastfor i in range(last, index - 1, -1):  # last 0 index = 5 ;index + 1# 防止越界buf[i + 1] = buf[i]buf[index] = datalast = last + 1def show(buf):for i in range(last + 1):print("buf[%s] = %s" % (i, buf[i]))if __name__ == '__main__':buf = [1, 520, 996, 4, 5] + [0] * 16show(buf)insert(buf, 3, 888)show(buf)

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

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

相关文章

力扣面试150(44/150)

7.30 155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…

Linux实战:从零搭建基于LNMP+NFS+DNS的WordPress博客系统

前言 在数字化时代,拥有一个个人博客是技术爱好者展示成果、分享经验的重要方式。本文将带您从零开始,在Linux环境下通过两台服务器协作,搭建一个功能完整的WordPress博客系统。我们将整合LNMP架构、NFS文件共享和DNS域名解析服务&#xff0c…

Apache Ignite 的对等类加载(Peer Class Loading, P2P Class Loading)机制

这段内容是关于 Apache Ignite 的“对等类加载”(Peer Class Loading, P2P Class Loading)机制的详细说明。这是 Ignite 为了简化开发而设计的一个非常强大的功能,但同时也存在一些安全和性能上的考量。 下面我将用通俗易懂的语言 结构化解…

预过滤环境光贴图制作教程:第四阶段 - Lambert 无权重预过滤(Stage 3)

在完成高光反射的 GGX 预过滤后,我们还需要处理环境光的漫反射部分。本阶段(Stage 3)将基于 Lambert 分布对环境贴图进行无权重预过滤,生成用于漫反射计算的环境数据。与高光反射的方向性不同,漫反射是光线在粗糙表面的均匀散射,因此需要用更适合均匀分布的 Lambert 模型…

Spring与SpringBoot:从手动挡到自动挡的Java开发进化论

大家好!我是程序员良辰,今天我们来聊聊Java开发界的两位"重量级选手":Spring 和 SpringBoot。它们之间的关系就像手动挡汽车和自动挡汽车——一个给你完全的控制权但操作复杂,一个让你轻松上路但保留了切换手动模式的能…

1.4.Vue 的模板事件

Vue 的模板事件1. 最常见和推荐的做法。将复杂的逻辑封装在 methods 中。<!-- ✅ 正确&#xff1a;调用 methods 中的方法 --> <button click"handleClick">点击我</button>new Vue({methods: {handleClick(event) {// 这里可以写任意语句if (this…

SQLite 子查询详解

SQLite 子查询详解 引言 SQLite 是一种轻量级的数据库&#xff0c;以其简单、易用和跨平台而著称。在数据库查询中&#xff0c;子查询是一个非常重要的概念&#xff0c;它允许我们在查询中使用查询结果。本文将详细讲解 SQLite 中的子查询&#xff0c;包括其定义、用法以及在实…

可以组成网络的服务器 - 华为OD统一考试(JavaScript 题解)

题目描述 在一个机房中,服务器的位置标识在n*m的整数矩阵网格中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网,请你统计机房中最大的局域网包含的服务器个数。 输入描述 第一行输入两个正整数,…

redis,MongoDB等未授权访问靶场复现

redis未授权访问在docker中启动vulhub对应的靶场目录&#xff1a;cd /vulhub-master/redis/4-unacc在kali上安装redis程序进行服务连接安装redis apt-get install redis redis链接 redis-cli -h IP -p 端口输入info可以查看信息接下来我们使用redis-rogue-server来获取命令执行…

设计模式:代理模式 Proxy

目录问题解决方案结构代码代理是一种结构型设计模式&#xff0c;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f; 举个例子&#xff1a; 有这样一…

Linux零基础Shell教学全集(可用于日常查询语句,目录清晰,内容详细)(自学尚硅谷B站shell课程后的万字学习笔记,附课程链接)

此文章为学习了 尚硅谷B站课程 后的学习笔记 【尚硅谷】Shell脚本从入门到实战_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1hW41167NW/?spm_id_from333.337.search-card.all.click&vd_source68e0bbe20c8b1102b59ced40f67db628注意&#xff1a;需要先学Linux基础…

GitLab 中的分支和标签的定义及操作

&#xff08;一&#xff09;GitLab 中的分支和标签的定义及操作 1. 分支&#xff08;Branch&#xff09; 定义&#xff1a; 分支是代码仓库中的独立开发路径&#xff0c;允许你在不影响主线&#xff08;通常是 main 或 master 分支&#xff09;的情况下&#xff0c;进行实验、开…

第2章 cmd命令基础:常用基础命令(3)

Hi~ 我是李小咖&#xff0c;主要从事网络安全技术开发和研究。 本文取自《李小咖网安技术库》&#xff0c;欢迎一起交流学习&#x1fae1;&#xff1a;https://imbyter.com 本节介绍的命令有显示系统信息&#xff08;systeminfo&#xff09;、启动指定程序&#xff08;start&am…

RabbitMQ 发送方确认的两大工具 (With Spring Boot)

核心概念解析 发布者确认机制的核心思想是&#xff1a;将消息投递的可靠性从“尽力而为”提升为“契约保证”。生产者不再是“发后不理”&#xff0c;而是与 Broker 建立一个双向的沟通渠道。 在 Spring AMQP 的封装下&#xff0c;这个机制主要由两个回调接口实现&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API网关&#xff09;时&#xff0c;理解其核心概念是掌握其工作原理的基础。这些概念既体现了Kong的设计哲学&#xff0c;也决定了它如何适配复杂的API管理场景&#xff08;如微服务、多团队协作等&#xff09;。本文将系统梳理Kong的核心概…

如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题 摘要 在开发过程中&#xff0c;我们经常会遇到各种模块安装的问题&#xff0c;尤其是在使用PyCharm时&#xff0c;经常会遇到pip install时的…

3 运算符与表达式

运算符&#xff1a;对字面量或者变量进行操作的符号 表达式&#xff1a;用运算符把字面量或者变量连接起来符合java语法的式子就可以称作表达式不同运算符连接的表达式体现的是不同类型的表达式int a 10; int b 20; int c a b;&#xff1a;运算符&#xff0c;并且是算术运算…

MySQL的单行函数:

目录 函数的理解&#xff1a; MySQL的内置函数及分类&#xff1a; 单行函数&#xff1a; 数值函数&#xff1a; 基本函数&#xff1a; 角度与弧度互换函数&#xff1a; 三角函数&#xff1a; 指数与对数&#xff1a; 进制转换&#xff1a; 字符串函数&#xff1a; 日…

设计模式(二十一)行为型:状态模式详解

设计模式&#xff08;二十一&#xff09;行为型&#xff1a;状态模式详解状态模式&#xff08;State Pattern&#xff09;是 GoF 23 种设计模式中的行为型模式之一&#xff0c;其核心价值在于允许一个对象在其内部状态改变时改变其行为&#xff0c;使得对象看起来像是修改了它的…

深入理解 Doris Compaction:提升查询性能的幕后功臣

在 Doris 的数据存储与查询体系里&#xff0c;Compaction 是保障查询效率、优化存储结构的关键机制。如果你好奇 Doris 如何在高频写入后仍能高效响应查询&#xff0c;或是想解决数据版本膨胀带来的性能问题&#xff0c;这篇关于 Compaction 的深度解析值得收藏 &#x1f447; …