数据结构、数据类型、数字编码、字符编码:保姆级图文详解
文章目录
- 前言
- 1、数据结构分类
- 1.1、逻辑结构:线性与非线性
- 1.2、物理结构:连续与分散
- 1.3、数据结构的实现方式
- 1.4、数据结构的选择依据
- 2、基本数据类型
- 2.1、定义与分类
- 2.2、存储形式
- 3、数字编码
- 3.1、原码、反码与补码
- 3.2、浮点数编码
- 3.3、整数与浮点数区别
- 4、字符编码
- 4.1、ASCII 字符集
- 4.2、GBK 字符集
- 4.3、Unicode 字符集
- 4.4、UTF-8 编码
前言
亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com
1、数据结构分类
从两个维度划分:
①逻辑结构:关注数据元素之间的逻辑关系。
②物理结构:关注数据在计算机内存中的存储方式。
1.1、逻辑结构:线性与非线性
①定义:逻辑结构揭示数据元素之间的逻辑关系。数据线性排列或呈现更复杂的层次或网络关系。
②分类:
i:线性结构:
数据呈一对一的顺序关系。常见结构:数组、链表、栈、队列、哈希表。
ii:非线性结构:
数据呈一对多或多对多的关系。分为以下两类:
i:树形结构:如树、堆、哈希表。
ii:网状结构:如图。

③特点:
i:线性数据结构:简单直观,逻辑关系呈线性排列。
ii:非线性数据结构:适合表示复杂层次和网络关系,逻辑关系更复杂。
1.2、物理结构:连续与分散
①定义:物理结构描述数据在计算机内存中的存储方式。内存由单元格(内存空间)组成,每个单元格通过内存地址访问。

②分类
i:连续空间存储:数据存储在连续的内存块中。常见结构:数组。
ii:分散空间存储:数据存储在非连续的内存块中,通过指针连接。常见结构:链表。

③特点:
i:连续存储:访问效率高,但需要大块连续内存。适用于静态数据结构。
ii:分散存储:内存利用率高,支持动态调整。适用于动态数据结构。
1.3、数据结构的实现方式
①基于数组的实现:
i:可实现:栈、队列、哈希表、树、堆、图、矩阵、张量等。
ii:特点:初始化后长度固定,但可通过重新分配内存实现一定的动态性。
②基于链表的实现:
i:可实现:栈、队列、哈希表、树、堆、图等。
ii:特点:支持动态长度调整,适合在运行时需要频繁修改长度的场景。
③动态与静态数据结构
i:链表:动态数据结构,长度可在运行时调整。
ii:数组:静态数据结构,长度在初始化时固定,但通过内存重分配可具备动态性。
1.4、数据结构的选择依据
①性能与内存效率的权衡
i:连续存储(如数组):适合需要快速访问的数据结构,但对内存连续性要求高。
ii:分散存储(如链表):适合需要频繁插入和删除操作的数据结构,内存利用率更高。
②实际应用中的组合
数据结构往往基于数组和链表的组合实现。如哈希表可能结合数组(存储槽位)和链表(处理冲突)。
2、基本数据类型
2.1、定义与分类
基本数据类型是 CPU 直接运算的数据类型,用于表示数据基本形式。包括整数、浮点数、字符和布尔类型。
①主要类型:
i:整数类型:byte、short、int、long,用于表示整数。
ii:浮点数类型:float、double,用于表示小数。
iii:字符类型:char,用于表示字母、标点符号及其他字符。
iv:布尔类型:bool,用于表示“是/否”判断。
2.2、存储形式
所有基本数据类型以二进制形式存储,一个二进制位(bit)是计算的最小单位。一个字节(byte)由 8 个比特(bit)组成(绝大多数现代操作系统遵循此规则)。基本数据类型的取值范围取决于其占用的空间大小,例如:

3、数字编码
3.1、原码、反码与补码
①定义:
i:原码:二进制表示中,最高位为符号位(0表示正数,1表示负数),其余位表示数值。
ii:反码:正数的反码与原码相同,负数的反码为原码符号位不变,其余位按位取反。
iii:补码:正数的补码与原码相同,负数的补码为其反码加1。

②补码特点:
解决原码和反码中“正零”和“负零”带来的歧义问题。通过将负数的运算转化为加法运算,简化硬件设计。
支持负数范围比正数多一个。
③计算机使用补码原因:
统一正负数的加减法运算,不需要单独设计减法电路。消除正负零的歧义,简化条件判断。硬件电路设计更简单,高效支持并行化运算。
3.2、浮点数编码
①表示方式:
根据 IEEE 754 标准,32 位浮点数 float 由以下三部分组成:
i:符号位(1 位):表示正数或负数。
ii:指数位(8 位):表示数值的指数部分。
iii:分数位(23 位):表示有效数字部分。
计算公式:

3.3、整数与浮点数区别
①存储空间:
int 和 float 都占用 4 字节,但表示范围和精度不同。int 使用所有比特表示均匀分布的整数。float 使用部分比特表示指数位,扩展范围但降低精度。
②适用场景:
整数类型适用于精确计算,如计数或索引操作。浮点数类型适用于需要表示小数或范围极大的数值。
4、字符编码
**①定义:**字符编码通过“字符集”将字符与二进制数一一对应,实现二进制数到字符的转换。
②需求背景:不同语言和符号的表示需要统一规则,字符编码规范解决这一问题。
4.1、ASCII 字符集
①特点:ASCII 是最早的字符集,使用7位二进制表示,共支持128个字符。包含英文大小写字母、数字、标点符号及控制字符。
②扩展:EASCII:扩展到8位,可表示256个字符。不同地区的 EASCII 字符集后128个字符定义不同,以适应本地语言需求。

4.2、GBK 字符集
①背景:GB2312(1980 年发布)解决汉字表示问题,支持 6763 个汉字,但无法覆盖罕见字和繁体字。
②扩展:GBK 在 GB2312 基础上扩展,支持 21886 个汉字。
③编码方式:ASCII 字符使用 1 字节。汉字使用 2 字节。
4.3、Unicode 字符集
①特点:统一字符集,支持全球语言和符号,理论上可容纳 100 多万个字符。通过统一的“码点”为每个字符分配编号。
②意义:解决多语言环境乱码问题。消除不同字符集之间的兼容性障碍。
③问题:Unicode 只是定义字符码点,没有规定如何存储字符,导致在实际实现中需要额外编码方案。

4.4、UTF-8 编码
①定义:UTF-8 是 Unicode 的一种编码方式,使用 1 至 4 字节表示一个字符。根据字符复杂性调整字节数,具备高效性和兼容性。
②规则:1 字节:ASCII 字符(最高位为 0)。多字节:起始字节高位以 1 标识字节长度,其余位用于编码字符码点。后续字节以 10 开头用于填充字符码点。
③优点:向下兼容 ASCII,适合处理历史遗留文本。多字节的起始位和校验位设计便于错误检测。
④其他编码方式:
UTF-16:2 或 4 字节表示字符,常用非英文字符占 2 字节。
UTF-32:固定使用 4 字节,适配性差,占用空间大。

相关文章:
数据结构、数据类型、数字编码、字符编码:保姆级图文详解
文章目录 前言1、数据结构分类1.1、逻辑结构:线性与非线性1.2、物理结构:连续与分散1.3、数据结构的实现方式1.4、数据结构的选择依据 2、基本数据类型2.1、定义与分类2.2、存储形式 3、数字编码3.1、原码、反码与补码3.2、浮点数编码3.3、整数与浮点数区…...
DM适配连接kettle迁移工具(资源库+数据源配置)
适配改造介绍及说明 本次修改基于8.2.0.0版本调整,在该源码基础上进行DM的适配,已支持DM为资源库的配置以及相关数据迁移。kettle资源库是Kettle ETL工具内置的一个资源库。配置好的数据库可以直接缓存到资源库当中;创建、编辑好的转换/作业…...
WINFORM - DevExpress -> alertControl1提示信息框
第一个按钮为常规按钮, 单击触发 ButtonClick 事件. 第二个按钮有选中和未选中状态. 单击触发 ButtonDownChanged 事件。 if (e.ButtonName "alertButton2") { } 在dev用户界面中进行提示(usecontrolwinform) AlertInfo info new AlertInfo("提示",…...
STM32-串口-UART-Asynchronous
一,发送数据 #include "stdio.h" uint8_t hello[]"Hello,blocking\r\n"; HAL_UART_Transmit(&huart1,hello,sizeof(hello),500); 二,MicroLIB-printf(" hello\r\n") #include "stdio.h" #ifdef __GNUC…...
Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年1月15日13点14分 目录 1. 基于域名的虚拟主机 …...
Shell控监Kafka积压
1、获取Kafka消息堆积情况 vi check-kafka-lag.sh #!/bin/bashTOPIC"total_random" GROUP_ID"etl-dw" BOOTSTRAP_SERVER"node-01:9092,node-02:9092,node-03:9092"# 检查第一个参数是否为数字 if ! [[ $1 ~ ^[0-9]$ ]]; thenecho &…...
element-ui textarea备注 textarea 多行输入框
发现用这个组件,为了给用户更好的体验,要加下属性 1. 通过设置 autosize 属性可以使得文本域的高度能够根据文本内容自动进行调整,并且 autosize 还可以设定为一个对象,指定最小行数和最大行数。:autosize"{ minRows: 3, ma…...
Transformer创新模型!Transformer+BO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab)
Transformer创新模型!TransformerBO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab) 目录 Transformer创新模型!TransformerBO-SVR多变量回归预测,添加气泡图、散点密度图(Matlab࿰…...
大疆机场及无人机上云
最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!...
用Cursor生成一个企业官网前端页面(生成腾讯、阿里官网静态页面)
用Cursor生成一个企业官网前端页面 第一版: <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
Java 数组排序
目录 1.Java冒泡排序(Bubble Sort) 1.冒泡排序 2.冒泡排序的算法原理 3.冒泡排序的复杂度和性能 4.形成代码 2.Java快速排序(Quick Sort) 3.Java归并排序(Merge Sort) 4.Java选择排序(S…...
LeetCode:78.子集
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:78.子集 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集…...
【经济学通识——国债】
国债 政府的支出一般大于收入,会有赤字 于是会向全社会去借钱。美国债务上限,象征性的(一直上调)全球政府债务都在上升。 亚当斯密觉得市场竞争最有效率 市场自由竞争会不可避免的出现萧条。于是,凯恩斯提出政府调节…...
联合体(Union)
联合体(Union)简介 联合体(union)是 C 和 C 编程语言中的一种数据结构,和结构体(struct)类似,但有一些重要的区别。 定义 联合体中的所有成员共享同一段内存,也就是说…...
Kibana:ES|QL 编辑器简介
作者:来自 Elastic drewdaemon ES|QL 很重要 💪 正如你可能已经听说的那样,ES|QL 是 Elastic 的新查询语言。我们对 ES|QL 寄予厚望。它已经很出色了,但随着时间的推移,它将成为与 Elasticsearch 中的数据交互的最强大…...
【工具】curl工具
curl 官网: https://curl.se/ github: https://github.com/curl?languagec curl 命令 所有参数介绍在线文档 简单使用教程 邮件发送命令 注: 支持SMTP(或者POP3)协议,curl的版本必须高于7.20(含&…...
idea中远程调试中配置的参数说明
Ⅰ 远程调试中配置的端口号与服务本身端口号区别 一、远程调试中配置端口号的作用 在 IDEA 中进行远程调试时配置的端口号主要用于建立开发工具(如 IDEA)和远程服务之间的调试连接。当你启动远程调试时,IDEA 会监听这个配置的端口号…...
JavaWeb 前端基础 html + CSS 快速入门 | 018
今日推荐语 指望别人的救赎,势必走向毁灭——波伏娃 日期 学习内容 打卡编号2025年01月17日JavaWeb 前端基础 html CSS018 前言 哈喽,我是菜鸟阿康。 今天 正式进入JavaWeb 的学习,简单学习 html CSS 这2各前端基础部分&am…...
Debian 设定 tomcat 定时重启
目录 背景 过程记录 1、编辑sh文件,完成重启功能 2、设置sh的可执行权限 编辑 3、设置定时任务 背景 在Debian 12系统中,原本部署了两个tomcat,结果总是遇到CPU飙升到影响应用正常使用的程度,找了很久原因还是没有找到。 …...
【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
🔥 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用(Enabled) 2.3 坐标系(Geometry) **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题(windowTiltle&a…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
