数据结构_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,底层是由数…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
