数据结构--绪论

1.数据结构的基本概念


1.1数据结构基本概念以及术语

(1)数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

(2)数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

(3)数据元素是数据的基本单位,一个数据元素可以由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

(4)数据类型是一个值的集合和定义在此集合上的一组操作的总称。

 1)原子类型:其值不可再分的数据类型。

 2)结构类型:其值可以再分解为若干分量的诗句类型。

 3)抽象数据类型(Abstract Data Type,ADT),抽象数据组织以及与之相关的操作。


1.2数据结构的三要素

逻辑结构,存储结构,数据的运算

1.2.1数据的逻辑结构

逻辑结构是指数据元素之间的逻辑关系,可以分为线性结构和非线性结构。

1.2.2数据的存储结构(物理结构)

存储结构是指数据结构在计算机中的表示,也称物理结构。它包括数据元素的表示和关系的表示。数据的存储结构主要包括顺序存储,链式存储,索引存储和散列存储。

(1)顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

(2)链式存储:逻辑上相邻的元素在位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

(3)索引存储:在存储元素信息的同时,还建立附加的索引表。索引表中的每一项成为索引项。(一般由关键字,地址组成)

(4)散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。

1.2.3数据的运算

施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

1.2.4总结

2.算法的基本概念

2.1基本概念

2.1.1什么是程序?

程序=数据结构+算法

2.1.2算法的五个重要特性

(1)有穷性:一个算法必须要在执行有限步结束,并且每一步时间都是有穷的。

(2)确定性:算法中的每条指令都有特定的含义,对于相同的输入只能得到相同的输出。

(3)可行性:算法中的操作都可以通过有限次基本运算来实现。

(4)输入:输入个数>=0

(5)输出:输出个数>=1

2.1.3好算法具有的特点

(1)正确性(你不能十进制下1+1=3吧)

(2)可读性(不要出现“我的程序只有我能看得懂”)

(3)健壮性:输入不规范数据时,算法可以做出反应,引导操作者出入正确的数据。(比如输入手机号,身份证号的时候,位数不够时界面会显示“输入不规范”)

(4)高效率,低内存

3.算法评价

3.1算法效率度量基本概念

3.1.1相关定义

(1)时间复杂度T(n):运行完程序所需要的时间。

(2)空间复杂度S(n):运行完一个程序所需要的临时内存的大小。

3.1.2算法时间复杂度的估算方法

算法的执行时间 = 基本操作(i)的执行次数 * 基本操作(i)的执行时间。

算法的执行时间与基本操作执行此时之和成正比。

算法的时间复杂度用该算法中起决定性作用的基本操作的执行次数估算。

int oneprint(void){printf("UPC\n"); //输出一次return 0;
}

上面的片段T(n)=O(1)

再比如,下面的片段时间复杂度就是O(n)了。

int prints(int n){for(int i=0;i<=n-1;i++){ //执行n次printf("UPC\n");}return 0;
}

但是这种情况呢?

int prints(int n){printf("UPC\n");  //执行1次for(int i=0;i<=n-1;i++){ //执行n次printf("UPC\n");}return 0;
}

这里我们就要抓住主要矛盾:O(n)+O(1)->O(n).

3.1.4时间复杂度的两条规则

(1)加法规则:O(m) + O(n) = O(max(m,n);

(2)乘法规则:O(m) * O(n) = O(m * n); 

3.1.5常见的时间复杂度排序

例如:

i=1;
while(i<=n){   //1    2    3....k  (执行次数)i*=2;     //2^1  2^2  2^3  2^k (时间复杂度)
}

最后i=2^k,即2^k > n时结束,那么2^k = n时,就是临界条件,此时k = log2^n;

所以,T(n) = O(log2^n).

3.1.6Fibonacci的特殊说明 

简要说明一下,后续在树形结构详细阐述。

空间复杂度S(n) = O(n); 

时间复杂度T(n) = ?

T(n) < 2^0 + 2^1 + 2^2 + ...+ 2^(n-1) = 2^n - 1.

根据量级判断,T(n) = O(2^n)

第一章绪论就到此为止啦,下一章是线性表,敬请期待... 

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

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

相关文章

sql server每天定时执行sql语句

sql server每天定时执行sql语句 1、打开SQL Server Management Studio 2、鼠标右击【SQL Server 代理】&#xff0c;选择【启动(S)】&#xff0c;如已启动&#xff0c;可以省略此步骤&#xff1b; 3、右键&#xff0c;新建-》作业&#xff0c;在作业上-》新建作业&#xff…

《RabbitMQ篇》基本概念介绍

MQ功能 解耦 MQ允许不同系统或组件之间松散耦合。发送者和接收者不需要直接连接&#xff0c;从而提高了系统的灵活性和可维护性。异步处理 使用MQ可以实现异步消息传递&#xff0c;发送者可以将消息放入队列后立即返回&#xff0c;不必等待接收者处理。这提高了系统的响应速度…

【STM32单片机_(HAL库)】4-5-1【定时器TIM】【感应开关盖垃圾桶】SG90舵机模块实验

1.硬件 STM32单片机最小系统SG90舵机模块 2.软件 sg90驱动文件添加main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "sg90.h"int main(void) {HAL_Init(); /* 初始化HAL库 */…

Linux命令大全及小例子

撰写一份关于Linux命令大全的详尽报道和分析是一项重要的任务&#xff0c;旨在让读者全面了解Linux命令的用途和应用场景。Linux系统因其强大的命令行工具而闻名&#xff0c;无论是系统管理、文件操作还是网络配置&#xff0c;Linux命令行都提供了灵活且强大的解决方案。以下是…

QT学习笔记2.2(安装部署_编译器)

QT学习笔记2.2&#xff08;安装部署_编译器) 编译器的版本&#xff0c;32位64位的 目前只用32位vs编译过&#xff0c;其他的还没有搞过。 一直没有搞清楚qt qtcreator 生成软件&#xff0c;32位和64位之间的关系 目前只使用32位qt生成打包了32位的项目。 编译器的安装 …

SAP HCM 抓取模拟工资核算日志RT表数据

一&#xff1a;故事背景 SAP的核算其实比较麻烦的就是没地方可以导出核算成功的人员编号&#xff0c;即使能导出也是树形的结构&#xff0c;需要反复加工多次才能整理好员工&#xff0c;所以非常麻烦&#xff0c;今天就想能不能抓取模拟工资的rt表数据. 二&#xff1a;解决办法…

ASP.NET Zero 多租户介绍

ASP.NET Zero 是一个基于 ASP.NET Core 的应用程序框架&#xff0c;它提供了多租户支持&#xff0c;以下是关于 ASP.NET Zero 多租户的介绍&#xff1a; 一、多租户概念 多租户是一种软件架构模式&#xff0c;允许多个客户&#xff08;租户&#xff09;共享同一套软件应用程序…

Unity 代码裁剪(Strip Engine Code)

文章目录 0.IL2CPP 打包运行闪退问题1.什么是代码裁剪2.为什么要使用代码裁剪3.代码裁剪设置与级别4.强制保留代码4.1 使用[Preserve]标签4.2 使用Link.xml文件 5.Strip中遇到的问题及解决方法6.注意事项 0.IL2CPP 打包运行闪退问题 Google Play要求从2019年8月1日起apk必须支…

2、项目配置设计(上)

文章目录 前言一、配置文件功能需求二、web工程设计思路三、Config实现思路 前言 配置文件作用&#xff1a;把需要经常修改的参数&#xff0c;从代码中分离出来,单独管理&#xff0c;方便后期维护。 开发一个web应用&#xff0c;肯定需要一些基础性的配置信息&#xff0c;这些信…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程&#xff1a;自动外呼进入机器人话术。问题&#xff1a;在机器人放音时用户挂断后&#xff0c;话术还会继续匹配流程&#xff0c;如果匹配上的是放音节点&#xff0c;还会进行放音&#xff0c;那么在数据库表conversation…

android Activity生命周期

android 中一个 activity 在其生命周期中会经历多种状态。 您可以使用一系列回调来处理状态之间的转换。下面我们来介绍这些回调。 onCreate&#xff08;创建阶段&#xff09; 初始化组件&#xff1a;在这个阶段&#xff0c;Activity的主要工作是进行初始化操作。这包括为Ac…

wsl中安装ubuntu,vscode访问这个ubuntu

WSL1升级为WSL2 wsl --set-default-version 2 wsl --set-version Ubuntu-22.04 2在windows商店中也可以安装ubuntu&#xff0c;在这个ubuntu中windows的c盘在/mnt/c中

【AIGC】2020-NIPS-去噪扩散概率模型

2020-NIPS-Denoising Diffusion Probabilistic Models 去噪扩散概率模型摘要1. 引言2. 背景3. 扩散模型和去噪自动编码器3.1 正向过程和 L T L_{T} LT​3.2 逆过程与 L 1 : T − 1 L_{1:T-1} L1:T−1​3.3 数据缩放、逆过程解码器和 L 0 L_{0} L0​3.4 简化的训练目标 4. 实…

强大的JVM监控工具

介绍 在生产环境中&#xff0c;经常会遇到各种各样奇葩的性能问题&#xff0c;所以掌握最基本的JVM命令行监控工具还是很有必要的 名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用…

Java 每日一刊(第20期):I/O 流

文章目录 前言流的起源及概念Java I/O 流概述字节流字符流转换流缓冲流对象流与序列化NIO&#xff08;New I/O&#xff09;流的关闭与资源管理本期小知识 前言 这里是分享 Java 相关内容的专刊&#xff0c;每日一更。 本期将为大家带来以下内容&#xff1a; 流的起源及概念J…

Leetcode: 0041-0050题速览

Leetcode: 0041-0050题速览 本文材料来自于LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer&#xff08;第 2 版&#xff09;》、《程序员面试金典&#xff08;第 6 版&#xff09;》题解 遵从开源协议为知识共享 版权归属-相同方式…

C++ | Leetcode C++题解之第447题回旋镖的数量

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfBoomerangs(vector<vector<int>> &points) {int ans 0;for (auto &p : points) {unordered_map<int, int> cnt;for (auto &q : points) {int dis (p[0] - q[0]) * (p…

【Node.js】内置模块FileSystem的保姆级入门讲解

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;Vscode 本文代码都经由博主PleaSure乐事实操后得出&#xff0c;可以放心使用。 1.FileSystem介绍 Node.js 的 fs&#xff08;filesystem&#xff09;模块是一个核心模块&#xff0c…

C++入门基础知识97——【关于C++ 条件运算符 ? :】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 条件运算符 ? :的相关内容&#xff…

【PCL】Ubuntu22.04 安装 PCL 库

文章目录 前言一、更新系统软件包二、安装依赖项三、下载 PCL 源码四、编译和安装 PCL五、测试安装成功1、 pcd_write.cpp2、CMakeLists.txt3、build 前言 PCL&#xff08;Point Cloud Library&#xff09;是一个开源的大型项目&#xff0c;专注于2D/3D图像和点云处理。PCL为点…