数据结构_day1
目录
大纲
1.数据结构基础知识
1.1 什么是数据结构
1.2 数据
1.3 逻辑结构
1.4 存储结构
1.4.1 顺序存储
1.4.2 链式存储
1.4.3 索引存储结构
1.4.4 散列存储
1.5 操作
2.算法基础知识
2.1 什么是算法
2.2 算法的设计
2.3 算法的特性
2.4 评价算法的好坏
大纲
数据结构、算法(理解)
线性表:顺序表(数组)、链表(单向链表、单向循环链表、双向链表、双向循环链表)、栈(顺序栈、链式栈)、队列(循环队列、链式队列)
树:特性、二叉树(性质、创建、遍历)
排序方法、查询方法(原理、思路)
1.数据结构基础知识
1.1 什么是数据结构
数据结构就是数据的逻辑结构以及存储操作 (类似数据的运算)
数据结构就教会你一件事:如何更有效的存储数据
1.2 数据
数据:不再是单纯的数字,而是类似于集合的概念。
数据元素:是数据的基本单位,由若干个数据项组成。
数据项:数据的最小单位,描述数据元素的有用的信息。
数据元素又叫节点
例如:
计算机处理的对象(数据)已不再是单纯的数值:
图书管理中的数据,如下表所列:

数据:图书
数据元素:每一本书
数据项:编号、书名、作者、出版社等
1.3 逻辑结构
数据元素并不是孤立存在的,它们之间存在着某种关系(或联系、结构)。元素和元素之间的关系:
- 线性关系
线性结构 ==> 一对一 ==> 线性表:顺序表、链表、栈、队列

- 层次关系
树形结构 ==> 一对多 ==> 树:二叉树

- 网状关系
图状结构 ==> 多对多 ==> 图

例题:
田径比赛的时间安排问题


1.4 存储结构
数据的逻辑结构在计算机中的具体实现(数据的运算)
1.4.1 顺序存储
特点:内存连续、随机存取、每个元素占用较少
实现:数组
1.4.2 链式存储
通过指针存储
特点:内存不连续,通过指针实现
链表实现:
结构体:

#include <stdio.h>struct node
{int data; //数据域:存放节点中要保存的数据struct node *next; //指针域:保存下一个节点的地址,也就是说指向了下一个节点 (类型为自身结构体指针)
};int main()
{//定义三个节点struct node A = {1, NULL}; //定义结构体变量的同时给每个成员赋值struct node B = {2, NULL};struct node C = {3, NULL};// struct node D; //先定义结构体变量,再单独给其中成员赋值// D.data=4;// D.next=NULL;//连接三个节点A.next = &B; //连接A和B节点,通过让A中的指针域保存B的地址B.next = &C;printf("%d\n", A.data);printf("%d\n", A.next->data);printf("%d\n", A.next->next->data);
}

1.4.3 索引存储结构
在存储数据的同时,建立一个附加的索引表。
也就是索引存储结构 = 索引表 + 存数据的文件
可以提高查找速度,特点检索速度快,但是占用内存多,删除数据文件要及时更改索引表。

1.4.4 散列存储
数据存储按照和关键码之间的关系进行存取。关系由自己决定,比如关键码是key, 存储位置也就是关系是key+1。获取关键数据,通过元素的关键码方法的返回值来获取。
存的时候按关系存
取的时候按关系取
1.5 操作
增删改查
2.算法基础知识
2.1 什么是算法
算法就是解决问题的思想方法,数据结构是算法的基础。
数据结构 + 算法 = 程序
2.2 算法的设计
算法的设计: 取决于数据的逻辑结构
算法的实现:依赖于数据的存储结构
2.3 算法的特性
有穷性: 步骤是有限
确定性:每一个步骤都有明确的含义,无二义性
可行性:在规定时间内可以完成
输入
输出
2.4 评价算法的好坏
正确性
易读性
健壮性:容错处理
高效性:执行效率,通过重复执行语句的次数来判断,也就是时间复杂度(时间处理函数)来判断。
时间复杂度:
语句频度:用时间规模函数表达
时间规模函数: T(n)=O(f(n))
T(n) //时间规模的时间函数
O //时间数量级
n //问题规模,例如:a[100], n=100
f(n) //算法可执行重复语句的次数
称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
渐进时间复杂度用大写O来表示,所以也被称为大O表示法。直白的讲,时间复杂度就是把时间规模函数T(n)简化为一个数量级,如n,n^2,n^3。
例1:
求1+2+3+4+...+n的和
算法1:
int sum=0;
for(int i=1;i<=n;i++)
{sum += i; //重复执行n次
}
f(n) = n
==>T(n) = O(n)
算法2:
利用等差数列前n项和公式:Sn=n*a1+n(n-1)d/2 或 Sn=n(a1+an)/2 (d是公差)
int sum = (1+n)*n/2; //重复执行1次 f(n) = 1
==> T(n) = O(1)
例2:
int i,j;
for(i=0;i<n;i++)
{for(j=0;j<n;j++){printf("ok\n"); //重复执行n*n次}
}
T(n) = O(n^2)
例3:
int i,j;
for(i=0;i<n;i++)
{for(j=0;j<=i;j++){printf("ok\n"); }
}
1 + 2 + ... n
f(n) = n*(1+n)/2 = n^2/2 + n/2 //只保留最高项n^2/2, 除以最高项系数 得到n^2
T(n) = O(n^2)
计算大O的方法
- 根据问题规模n写出表达式f(n)
- 如果有常数项,将其置为1 //当f(n)的表达式中只有常数项,例如f(n) = 8 ==> O(1)
- 只保留最高项,其他项舍去。
- 如果最高项系数不为1,则除以最高项系数。
f(n) = 3*n^4 + 2*n^3 + 6*n^7 +10;
==> O(n^7)
相关文章:
数据结构_day1
目录 大纲 1.数据结构基础知识 1.1 什么是数据结构 1.2 数据 1.3 逻辑结构 1.4 存储结构 1.4.1 顺序存储 1.4.2 链式存储 1.4.3 索引存储结构 1.4.4 散列存储 1.5 操作 2.算法基础知识 2.1 什么是算法 2.2 算法的设计 2.3 算法的特性 2.4 评价算法的好坏 大纲 数据结构、算法(理…...
c# using 声明进行资源管理
在 C# 8 中,using 声明引入了一种新的语法,称为 using 声明,它使得开发人员在处理资源时的代码更加简洁和清晰。主要的变化包括 使用声明 和 使用上下文(using declaration) 的引入。 使用语句的简化 在 C# 8 中&…...
Kafka之基本概念
1、Kafka是什么? Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢? 回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…...
倪师学习笔记-天纪-斗数简介
一、学习过程 学习->验证->思考 二、算命方法 算命方法特点铁板神数适合核对六亲子平法准确度一般紫微斗数天文地理融合最好,批六亲不准,配合相可以提升准确率 三、果 天地人三者一起影响果,天时地利人和促成成功1/31/31/31算命部…...
Python酷库之旅-第三方库Pandas(143)
目录 一、用法精讲 646、pandas.Timestamp.is_quarter_start属性 646-1、语法 646-2、参数 646-3、功能 646-4、返回值 646-5、说明 646-6、用法 646-6-1、数据准备 646-6-2、代码示例 646-6-3、结果输出 647、pandas.Timestamp.is_year_end属性 647-1、语法 647…...
细说QT各种线程锁的特点和用法
文章目录 QMutex特点用法QReadWriteLock特点用法QSemaphore特点用法QWaitCondition特点用法在Qt框架中,提供了多种线程同步机制,包括互斥锁(Mutex)、读写锁(Read-Write Lock)、信号量(Semaphore)和条件变量(Wait Conditions)。这些机制用于处理多线程编程中的数据一致性和线程…...
Caffeine+Redis两级缓存架构
CaffeineRedis两级缓存架构 在高性能的服务项目中,我们一般会将一些热点数据存储到 Redis这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…...
kafka和zookeeper单机部署
安装kafka需要jdk和zookeeper环境,因此先部署单机zk的测试环境。 zookeeper离线安装 下载地址: zookeeper下载地址:Index of /dist/zookeeper 这里下载安装 zookeeper-3.4.6.tar.gz 版本,测试环境单机部署 上传服务器后解压缩 …...
别了,公有云!下云迁移真的是大趋势么?
【科技明说 | 科技热点关注】 不知道你们还有没有印象,早在2022年,IBM发布了《IBM 企业转型指数:云现状》中也反映了这一趋势:80%的企业已经考虑或正在考虑将已经部署到公有云上的工作负载迁回私有的基础设施。 然而&…...
网关在不同行业自动化生产线的应用
网关在不同行业自动化生产线的应用,展示了其作为信息与物理世界交汇点的广泛影响力,尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …...
C++ socket编程(1)
这里是一个socket编程Demo,不考虑出错情况,代码简单,便于了解socket流程。 Demo分为服务器程序和客户端程序,运行需要先启动服务器程序,再启动客户端程序。 服务器会等待连接,客户端连接后,服…...
C# 文件夹类的实现与文件属性处理
在现代软件开发中,处理文件和文件夹是非常常见的任务。 C# 提供了丰富的类库来操作这些文件系统的基本元素。本篇文章将探讨如何在 C# 中实现一个简单的文件夹类,以及如何获取文件名、文件路径、大小和创建日期等文件属性。 一、使用 System.IO 命…...
基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
【论文笔记】DKTNet: Dual-Key Transformer Network for small object detection
【引用格式】:Xu S, Gu J, Hua Y, et al. Dktnet: dual-key transformer network for small object detection[J]. Neurocomputing, 2023, 525: 29-41. 【网址】:https://cczuyiliu.github.io/pdf/DKTNet%20Dual-Key%20Transformer%20Network%20for%20s…...
设计模式之适配器模式(Adapter)
一、适配器模式介绍 适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口, 适配器可以让不兼容的两个类一起协同工作。 适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口…...
[git] github管理项目之环境依赖管理
导出依赖到 requirements.txt pip install pipreqs pipreqs . --encodingutf8 --force但是直接使用pip安装不了torch,需要添加源!! pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html想到一个麻烦的…...
【STM32 Blue Pill编程实例】-SD卡文件读写(SPI接口)
SD卡文件读写(SPI接口) 文章目录 SD卡文件读写(SPI接口)1、SD卡模块介绍2、硬件准备与接线3、模块配置3.1 SPI接口配置3.2 SPI接口的片选信号引脚配置3.3 FATFS配置4、代码实现在本文中,我们将介绍如何将 microSD 卡与 STM32 Blue Pill 连接,并在STM32CubeIDE中对SD卡进行…...
为什么需要软件测试?
软件测试 软件测试是评估和验证计算机程序或系统是否按预期运行的过程。 它涉及执行程序或系统以识别预期结果和实际结果之间的任何错误或差距。 目标是确保软件满足指定的要求,没有缺陷,并在不同场景中可靠地工作。 为什么需要软件测试?…...
成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么?
成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么? 我的问题是事业就讲 10 年装逼学习法失效① 光说不练,还是太懒真正的勤奋,解决温饱后,只专注赚钱这件事 ② 信念飘摇,随波流转万…...
Java 集合 Collection常考面试题
理解集合体系图 collection中 list 是有序的,set 是无序的 什么是迭代器 主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。 ArrayList 和 Vector 的区别? ArrayList 可以存放 null,底层是由数…...
OpenAI Codex 安装部署指南:从零到跑通,2026最新版
⏱️ 阅读时间:8分钟 | 📌 难度:入门级 | 🔧 适用系统:macOS / Linux / Windows(WSL2) 前言 距离上次写 Codex 测评已经有一段时间了,这期间 Codex 又经历了好几轮大更新:Computer Use 能力、内…...
从VOC到YOLO:用Labelimg标注后,一键转换数据格式的完整避坑指南
从VOC到YOLO:数据格式转换的工程化实践与避坑指南 当你用Labelimg完成目标检测任务的标注工作,看着满屏的XML文件,是否觉得离模型训练还差"最后一公里"?这恰恰是许多初学者从标注到训练的关键断裂点。本文将带你深入VOC…...
避坑指南:STM32 HAL库SPI读写W25Q64时,你可能遇到的时序问题和调试技巧
STM32 HAL库SPI驱动W25Q64实战:时序陷阱与波形诊断全解析 当你的SPI Flash突然开始"装聋作哑",返回的不是预期数据而是清一色的0xFF或0x00时,这往往不是芯片的罢工抗议,而是时序对话中的"鸡同鸭讲"。本文将带…...
飞凌FETMX8MP-C核心板多媒体实战:编解码、多屏与4K摄像头深度测评
1. 项目概述与核心板定位作为一名在嵌入式行业摸爬滚打了十多年的老工程师,我经手过不少核心板方案,从早期的ARM9到现在的多核A系列,各家方案在性能、功耗和功能集成度上的差异,直接决定了终端产品的竞争力。最近,飞凌…...
从STEMA风车题看Scratch画笔模块:如何用‘自制积木+不刷新’优化动画性能
从STEMA风车题看Scratch画笔模块:如何用‘自制积木不刷新’优化动画性能 在Scratch编程竞赛中,流畅的动画效果往往是评分的关键因素之一。以第15届蓝桥杯STEMA测评中的"绘制风车"真题为例,许多参赛者虽然能够实现基本功能ÿ…...
Python点云处理入门:从零开始用pypcd4库读取.pcd文件并可视化(附完整代码)
Python点云处理入门:从零开始用pypcd4库读取.pcd文件并可视化 点云数据正逐渐成为三维感知领域的通用语言,从自动驾驶的环境建模到工业质检的精密测量,这些由数百万个空间点构成的数据集正在重塑我们与物理世界交互的方式。对于刚接触这一领域…...
Ubuntu20.04下Mapviz插件生态与多源数据融合实战
1. Mapviz简介与核心价值 Mapviz是ROS生态中一款专注于2D数据可视化的神器,它的独特之处在于模块化插件架构。不同于Rviz主要处理3D数据,Mapviz更擅长处理地理空间信息的可视化,比如我在做农业机器人项目时,需要同时监控GPS轨迹、…...
Bilibili视频转文字完整指南:一键将B站视频转为可编辑文字稿
Bilibili视频转文字完整指南:一键将B站视频转为可编辑文字稿 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为观看Bilibili视频时需要做…...
BooruDatasetTagManager自定义界面与快捷键:打造个性化工作流程的终极指南 [特殊字符]
BooruDatasetTagManager自定义界面与快捷键:打造个性化工作流程的终极指南 🎨 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager BooruDatasetTagManager是一款强大的AI训练数据标签…...
人工智能术语库:2442个专业AI词汇一站式查询指南
人工智能术语库:2442个专业AI词汇一站式查询指南 【免费下载链接】Artificial-Intelligence-Terminology-Database A comprehensive mapping database of English to Chinese technical vocabulary in the artificial intelligence domain 项目地址: https://gitc…...
