第一章 概论

news2025/1/11 0:09:22

第一章 概论

  • 引言
  • 基本概念和术语
    • 数据、数据元素和数据项
    • 数据的逻辑结构
    • 数据的存储结构(物理结构)
    • 运算
  • 算法及描述
  • 算法分析
    • 时间复杂度
    • 空间复杂度
  • 牛刀小试

引言

数据结构是指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的一组操作

计算机解决具体问题的步骤如下:

  • 从具体问题中抽象出一个适当的数学模型
  • 设计一个求解该数学模型的算法
  • 用某种计算机语言编写实现该算法的程序,调试和运行程序直到问题得到解决。

在这里插入图片描述
注:

  • 原始数据:实际问题中的数据
  • 逻辑结构:原始数据之间按照逻辑关系组织起来,人为因素大
  • 存储结构:原始数据实实在在在计算机中是如何存储的

此处可以以一个人处理有经验事情拿来类比,首先再次处理已经处理过的事情我们会先思考上回我们是这么做的(模型),这回我该怎么做(算法),付诸实践(编写程序直到解决);原始数据可以理解为该问题本身如:我要去办一个XXX证书,我需要XXX做;逻辑结构就是我的这些申请材料应该给XXX,存储结构就是我的这些申请材料实际给了XXX(理想与现实的差别)

19761年瑞士尼克劳斯·维尔特(Wirth)提出:算法+数据结构=程序

基本概念和术语

数据、数据元素和数据项

  • 数据:所有被计算机存储、处理的对象
  • 数据元素:数据的基本单位,数据元素通常简称为元素
  • 数据项:数据元素的组成部分,是不可分割的最小标识单位;在数据库中又称为字段或域

下面以二维表为例,具体解释:
在这里插入图片描述

  • 一行即是一个数据元素;即827这一行数据代表一个数据元素
  • 一行中的每一列都是一个数据元素;即单827一个单元格代表一个数据项
  • 整张表代表数据;

数据可以由若干个数据元素组成,而数据元素又可由若干个数据项组成

数据的逻辑结构

  • 数据的逻辑结构是指数据之间的逻辑关系(数据元素之间的关联方式或“邻接方式”)
  • 四类基本结构如下图所示:

在这里插入图片描述

  • 集合:组织形式松散,两个结点之间没有邻接关系
  • 线性结构:结点按逻辑关系依次排列形成“链”,结点之间一个一个依次邻接
  • 树形结构:分支、层次
  • 图:任何两个结点都可以邻接,最复杂

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

  • 数据的存储结构定义:数据的逻辑结构在计算机中的实现
  • 存储结构包括:
    • 存储数据元素(存)
    • 数据元素之间的关联方式(怎么存)
  • 存储方式举例:
    • 顺序存储方式:所有结点存储在一个连续的存储区里,利用结点在存储器的相对位置来表达数据元素之间的逻辑关系
    • 链式存储方式:除数据元素外还有一个指针,每个指针指向下一个与本结点有逻辑关系的结点
      注: 顺序和链式最常用,除了上述两种,还有索引存储方式和散列存储方式
  • 存储结构的描述
    • 机器级:讨论存储结构在计算机存储器里的表现形式,直接以内存地址来描述存储结构
    • 语言级:用程序设计中的类型说明,变量说明等手段来描述存储结构;如数组、结构体和指针等

语言级可以经编译器转换为机器级

运算

运算:在某种逻辑结构上施加的操作,即对逻辑的加工

注:基本运算包括:建立、查找、读取、插入和删除等

算法及描述

C语言基本语法:

  • 函数描述形式
函数类型 函数名(函数参数表)
//算法说明
{
语句序列
}
  • 输入、输出语句
//输入
scanf(格式串,变量1,...,变量n);
//输出
printf(格式串,变量1,...,变量n);
  • 赋值语句
变量名=表达式
  • 选择语句
//if
if(表达式) 语句;
//if ...else...
if(表达式) 语句;
else 语句;
//switch
switch
{
case 条件1:语句序列;break;
......
default: 语句序列;
}
  • 循环语句
//for
for(赋初值表达式序列;条件;修改表达式序列)语句;
//while
while(条件) 语句;
//do...while
do
{
语句;
}while(条件);
  • 结束语句
//函数结束
return 表达式;
//case结束
break;
//异常结束语句
exit(异常代码);
  • 出错语句
error("错误描述")
  • 注释
单行注释://注释内容
多行注释:/* 注释内容 */

算法分析

评价算法好坏的因素:

  • 正确性:能正确实现预定的功能,满足具体问题的需要
  • 易读性:易于阅读、理解和交流,便于调试、修改和扩充
  • 健壮性:即使输入非法数据,算法也能适当的做出反应或处理,不会产生预料不到的结果
  • 时空性:该算法的时间性能和空间性能,前者是算法包含的计算量,后者是算法所需要的存储量

时间复杂度

  • 时间复杂度常见阶数:常数阶O(1)——与输入规模无关;对数阶O(log2 n)、线性阶O(n)、多项式阶O(nC)、指数阶O(Cn);其中C为大于1的正整数
  • 具有指数阶的算法是实际不可计算的,而阶数低于平方阶的算法是高效率的
  • 最坏时间复杂度:对于相同输入数据量的不同输入数据,算法时间用量的最大值
  • 平均时间复杂度:对所有相同输入数据量的各种不同输入数据,算法时间用量的平均值
  • 时间复杂度的计算看下图(由C知道支持):

在这里插入图片描述

空间复杂度

  • 空间复杂度:由程序代码所占用的空间、输入数据所占用的空间、辅助变量所占用的空间组成,一般只需分析辅助变量占用的空间即可

在这里插入图片描述

  • 算法f1、f2均是实现逆置的算法
  • 算法f1仅需2个辅助变量i,temp;与问题规模无关,空间复杂度为O(1)
  • 算法f2所需辅助变量为1个i和n为100的数组,与问题规模相关),空间复杂度为O(n)

牛刀小试

  • 在一般情况下,一个算法的时间复杂度是______的函数
  • 下列算法的时间复杂度T(n)=______
for(i=1;j<=n;i++)
{
k++;
for(j=1;j<=n;j++)
m+=k;
}
  • 与数据元素本身的形式、内容、相对位置、个数无关的是数据的_____

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

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

相关文章

【Java 进阶篇】JDBC PreparedStatement 详解

在Java中&#xff0c;与关系型数据库进行交互是非常常见的任务之一。JDBC&#xff08;Java Database Connectivity&#xff09;是Java平台的一个标准API&#xff0c;用于连接和操作各种关系型数据库。其中&#xff0c;PreparedStatement 是 JDBC 中一个重要的接口&#xff0c;用…

ARM---实现1-100求和任务

.text .globl _start_start:mov r0, #0x1mov r1, #0x1 给r1加一固定1不变mov r2, #0x64 100判断bl sumcmp r1, r2 sum:addcc r1, r1,#0x1 r1自增addcc r0, r0, r1 r0求和movcc pc,lrstop:b stop.end

Linux shell编程学习笔记6:查看和设置变量的常用命令

上节我们介绍了变量的变量命名规则、变量类型、使用变量时要注意的事项&#xff0c;今天我们学习一下查看和设置变量的一些常用命令&#xff0c;包括变量的提升&#xff0c;有些命令在之前的实例中已经使用过了。 一、 echo &#xff1a;查看变量的值 语法格式&#xff1a;ech…

金融机构操作风险与内控合规的介绍

目录 一.前言 术语 二.功能设计 三.部分功能简介 流程管理 流程清单 流程详情 流程重检 流程重检反馈 风险与控制自我评估&#xff08;RCSA&#xff09; 评估计划管理 评估结果管理 关键风险指标&#xff08;KRI&#xff09; 指标库管理 基础数据项录入 指标监测…

电阻的基础与应用

文章目录 电阻的基础与应用电阻的介绍与分类电阻介绍电阻的分类碳膜/金属膜电阻厚膜/薄膜电阻功能性电阻&#xff08;光敏/热敏/压敏&#xff09;特殊电阻&#xff08;绕线电阻/水泥电阻/铝壳电阻&#xff09; 电阻的主要厂家与介绍国外厂家VISHAY(威世)KOA(兴亚)Kyocera(京瓷)…

电脑右键新建记事本不见了--设置恢复篇(无需操作注册表)

电脑右键新建记事本不见了–设置恢复篇&#xff08;无需修改注册表&#xff09; 电脑不知怎么想右键新建记事本结果竟然不见了&#xff0c;搜寻网上的都是什么修改注册表&#xff0c;粘贴代码修复&#xff08;感觉太复杂了&#xff09;&#xff0c;这里介绍通过设置内重新对记…

❋JQuery的快速入门 1 了解jq

目录 选定元素 1. jquery基本选择器 2. 层级选择器 3. 元素精确定位 4. 内容选择器 5. 属性选择器及其他 元素解析 操作元素内容与样式 操作文档的文本结构 jq事件 jq动画 JQuery 是一个“写的更少&#xff0c;但做的更多”的轻量级 JavaScript 库。 使用前要先导入…

自定义实现hashmap-python

前文 ​ 今天这篇文章给大家讲讲hashmap&#xff0c;这个号称是所有前后端工程师都会的数据结构。 hashmap基本结构 ​ hashmap这个数据结构其实并不难&#xff0c;它的结构非常清楚&#xff0c;说白了就是一个定长的链表&#xff0c;这个数组的每一个元素都是一个链表。我们…

AutoForm R11安装说明视频教程

AutoForm R11安装说明视频教程 安装AutoForm.Forming.R11.Win64_01在安装过程中选择安装许可证服务器并输入许可证服务器2375localhost和完成 安装 -继续解文件夹复制2个文件并在C:\Program files\RLM_v14.1BL3上替换它们作为管理员运行RLM.exe 确保您的系统环境如下所示&a…

(unordered)map和set封装(底层红黑树)

map和set封装 文章目录 map和set封装设计问题&#xff08;知其所以然&#xff09;为什么要对iterator进行封装&#xff1f;为什么要引入Self Ref Ptr这些模板参数&#xff1f;为什么是试图从non_const转变为const&#xff0c;而不是const转为non_const如何解决 为什么说能加con…

vscode 乱码解决

windows 10 系统 vs code 编译运行和调试 C/C_vscode windows编译_雪的期许的博客-CSDN博客 VS Code默认文件编码时UTF-8&#xff0c;这对大多数情况是没有问题的&#xff0c;却偏偏对C/C有问题。如果以UTF-8编码保存C/C代码&#xff0c;那么只能输出英文&#xff0c;另外使用…

【Java-LangChain:使用 ChatGPT API 搭建系统-4】评估输入-分类

第三章&#xff0c;评估输入-分类 如果您正在构建一个允许用户输入信息的系统&#xff0c;首先要确保人们在负责任地使用系统&#xff0c;以及他们没有试图以某种方式滥用系统&#xff0c;这是非常重要的。 在本章中&#xff0c;我们将介绍几种策略来实现这一目标。 我们将学习…

优先级队列--合并多个有序链表

如果本文章有不懂的&#xff0c;请进入预习链接&#xff1a;优先级队列_加瓦不加班的博客-CSDN博客 这道题目之前解答过&#xff0c;现在用刚学的优先级队列来实现一下 题目中要从小到大排列&#xff0c;因此选择用小顶堆来实现&#xff0c;自定义小顶堆如下 //小顶堆的操作与…

图像处理与计算机视觉--第五章-图像分割-Canny算子

文章目录 1.边缘检测算子分类2.Canny算子核心理论2.1.Canny算子简单介绍2.2.Canny算子边缘检测指标2.3.Canny算子基本原理 3.Canny算子处理流程3.1.高斯滤波去噪声化3.2.图像梯度搜寻3.3.非极大值抑制处理3.4.双阈值边界处理3.5.边界滞后技术跟踪3.6.Canny算子边缘检测的特点 4…

Linux使用之xshell、xftp保姆教学(含安装包,详细使用方法,连接失败解决方法)

前言 链接: FTP&#xff0c;SSH服务器介绍 这是我之前写的一篇博客&#xff0c;其中介绍了Ubuntu操作系统的一些常用命令以及服务器介绍&#xff0c;这篇文章就向大家详细介绍如何安装及应用这些服务器&#xff0c;我以xshell、xftp为例。 安装包&#xff0c;使用方法&#xf…

认识柔性数组

在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 限制条件是&#xff1a; 结构体中最后一个成员未知大小的数组 1.柔性数组的形式 那么我们怎样写一个柔性数组呢 typedef struct st_type {int i;int a[0];//柔性数组成员 }ty…

GD32F103x IIC通信

1. IIC通信 1.IIC的介绍 IIC总线有两条串行线&#xff0c;其一是时钟线SCK&#xff08;同步&#xff09;&#xff0c;其二是数据线SDA。只有一条数据线属于半双工。应用中&#xff0c;单片机常常作为主机&#xff0c;外围器件可以挂载多个。&#xff08;当然主机也可以有多个。…

【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIso…

stable diffusion学习笔记【2023-10-2】

L1&#xff1a;界面 CFG Scale&#xff1a;提示词相关性 denoising&#xff1a;重绘幅度 L2&#xff1a;文生图 女性常用的负面词 nsfw,NSFW,(NSFW:2),legs apart, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, (…

位置编码器

目录 1、位置编码器的作用 2、代码演示 &#xff08;1&#xff09;、使用unsqueeze扩展维度 &#xff08;2&#xff09;、使用squeeze降维 &#xff08;3&#xff09;、显示张量维度 &#xff08;4&#xff09;、随机失活张量中的数值 3、定义位置编码器类&#xff0c;我…