当前位置: 首页 > news >正文

数据结构、数据类型、数字编码、字符编码:保姆级图文详解

文章目录

  • 前言
  • 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&#xff0…...

大疆机场及无人机上云

最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!...

用Cursor生成一个企业官网前端页面(生成腾讯、阿里官网静态页面)

用Cursor生成一个企业官网前端页面 第一版&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

Java 数组排序

目录 1.Java冒泡排序&#xff08;Bubble Sort&#xff09; 1.冒泡排序 2.冒泡排序的算法原理 3.冒泡排序的复杂度和性能 4.形成代码 2.Java快速排序&#xff08;Quick Sort&#xff09; 3.Java归并排序&#xff08;Merge Sort&#xff09; 4.Java选择排序&#xff08;S…...

LeetCode:78.子集

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;78.子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xf…...

【经济学通识——国债】

国债 政府的支出一般大于收入&#xff0c;会有赤字 于是会向全社会去借钱。美国债务上限&#xff0c;象征性的&#xff08;一直上调&#xff09;全球政府债务都在上升。 亚当斯密觉得市场竞争最有效率 市场自由竞争会不可避免的出现萧条。于是&#xff0c;凯恩斯提出政府调节…...

联合体(Union)

联合体&#xff08;Union&#xff09;简介 联合体&#xff08;union&#xff09;是 C 和 C 编程语言中的一种数据结构&#xff0c;和结构体&#xff08;struct&#xff09;类似&#xff0c;但有一些重要的区别。 定义 联合体中的所有成员共享同一段内存&#xff0c;也就是说…...

Kibana:ES|QL 编辑器简介

作者&#xff1a;来自 Elastic drewdaemon ES|QL 很重要 &#x1f4aa; 正如你可能已经听说的那样&#xff0c;ES|QL 是 Elastic 的新查询语言。我们对 ES|QL 寄予厚望。它已经很出色了&#xff0c;但随着时间的推移&#xff0c;它将成为与 Elasticsearch 中的数据交互的最强大…...

【工具】curl工具

curl 官网&#xff1a; https://curl.se/ github: https://github.com/curl?languagec curl 命令 所有参数介绍在线文档 简单使用教程 邮件发送命令 注&#xff1a; 支持SMTP&#xff08;或者POP3&#xff09;协议&#xff0c;curl的版本必须高于7.20&#xff08;含&…...

idea中远程调试中配置的参数说明

Ⅰ 远程调试中配置的端口号与服务本身端口号区别 一、远程调试中配置端口号的作用 在 IDEA 中进行远程调试时配置的端口号主要用于建立开发工具&#xff08;如 IDEA&#xff09;和远程服务之间的调试连接。当你启动远程调试时&#xff0c;IDEA 会监听这个配置的端口号&#xf…...

JavaWeb 前端基础 html + CSS 快速入门 | 018

今日推荐语 指望别人的救赎&#xff0c;势必走向毁灭——波伏娃 日期 学习内容 打卡编号2025年01月17日JavaWeb 前端基础 html CSS018 前言 哈喽&#xff0c;我是菜鸟阿康。 今天 正式进入JavaWeb 的学习&#xff0c;简单学习 html CSS 这2各前端基础部分&am…...

Debian 设定 tomcat 定时重启

目录 背景 过程记录 1、编辑sh文件&#xff0c;完成重启功能 2、设置sh的可执行权限 ​编辑 3、设置定时任务 背景 在Debian 12系统中&#xff0c;原本部署了两个tomcat&#xff0c;结果总是遇到CPU飙升到影响应用正常使用的程度&#xff0c;找了很久原因还是没有找到。 …...

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…...

下载文件,浏览器阻止不安全下载

背景&#xff1a; 在项目开发中&#xff0c;遇到需要下载文件的情况&#xff0c;文件类型可能是图片、excell表、pdf、zip等文件类型&#xff0c;但浏览器会阻止不安全的下载链接。 效果展示&#xff1a; 下载文件的两种方式&#xff1a; 一、根据接口的相对url&#xff0c;拼…...

基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台…...

【17】Word:林楚楠-供应链❗

目录 题目 NO1.2 NO3 NO4 NO5 NO6 NO7 NO89 题目 NO1.2 另存为&#xff1a;文件→另存为→文档→文件名/考生文件夹F12/FnF12→文件名/考生文件夹 插入→分节符→文本框→输入文件→排版_居中对齐→间距/回车去掉文本框的边框→选中文本框→格式&#xff1a;形状轮廓…...

Transformer中基于惊喜的遗忘机制

在语言建模任务上,拥有 760M 参数的 Titans(MAC) 在 WikiText 上达到了 19.93 的困惑度,显著优于同等规模的 Transformer++(25.21) 和 Mamba2(22.94)。在常识推理任务上,Titans 在包括 PIQA、HellaSwag、WinoGrande 等 9 个基准测试中的平均准确率达到 52.51%,超过了现…...

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中&#xff0c;51 单片机就像一颗独特的星辰&#xff0c;散发着神秘而迷人的光芒。对于无数电子爱好者而言&#xff0c;点亮 51 单片机上的第一颗 LED 灯&#xff0c;不仅仅是一次简单的操作&#xff0c;更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…...

基于机器学习的用户健康风险分类及预测分析

完整源码项目包获取→点击文章末尾名片&#xff01; 背景描述 在这个日益注重健康与体能的时代&#xff0c;健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息&#xff0c;包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...

CF 641A.Little Artem and Grasshopper(Java实现)

题目分析 蚂蚱会在n个房间中根据既定房间规则向固定方向跳跃固定长度&#xff0c;试问是否能够跳出这个长度&#xff08;即落点位置在0或n1&#xff09; 思路分析 输入n就有n个房间&#xff0c;n套规则&#xff08;固定方向和跳跃距离&#xff09;&#xff0c;蚂蚱到哪个房间就…...

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…...

1.Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…...

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q&#xff1a;怎样修改HPS Timer 0定时器产生的中断周期&#xff1f; A&#xff1a;在上一期实验的基础上&#xff0c;可以修改按键中断服务程序&#xff0c;实现红色LED上的计数值递增的速率&#xff0c;主程序和其余代码文件不用修改。 实现以下功能&#xff1a;按下KEY0…...