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

文章目录

  • 前言
  • 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 字节,适配性差,占用空间大。
在这里插入图片描述

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

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

相关文章

【JavaScript】基础内容,HTML如何引用JavaScript, JS 常用的数据类型

HTML 嵌入 Javascript 的方式 引入外部 js 文件 <head> <script Language "javaScript" src"index.js"/> </head>内部声明 <head> <script language"javascript">function hello(){alert("hello word&qu…

解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用

在当今数字化时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成&#xff0c;到栩栩如生的图像创作&#xff0c;再到动听的音乐旋律&#xff0c;AIGC的魔力无处不在。而这一切的背后&#…

Web前端------HTML表格

一.表格标签介绍 表格&#xff0c;类似操作的软件excel一样&#xff0c;通过规范的行列方式展示数据的一种视图&#xff01; 网页中&#xff08;初级开发&#xff09;&#xff0c;对于这种规范的数据&#xff0c;使用表格标签最方便的&#xff1b; 实际开发&#xff08;高级开…

关于AWS网络架构的思考

目录&#xff1a; AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 在AWS K8S中部署的业务&#xff0c;有不同的流量路径。 流量进入 客户端请求 普通的客户端流量流向从前到后是: 客户端公司网关(endpoint)业务的Endpoint ServiceLoad Balancers(监听80和…

玩转随机数:用 JavaScript 掌控不可预测的魔力!

玩转随机数&#xff1a;用 JavaScript 掌控不可预测的魔力&#xff01; 当计算机遇上“随机”&#xff0c;我们能做什么&#xff1f; 你曾想过在生活中拥有“超能力”吗&#xff1f;比如&#xff0c;可以预测下一个天气变化&#xff0c;或是猜中下一个彩票号码&#xff1f;虽…

ThreeJs功能演示——几何体操作导入导出

1、内部创建几何体导出编辑能力 1&#xff09;支持内部创建的面、正方体、球体 内部创建物体时&#xff0c;如果是三维物体&#xff0c;要创建集合形状geometry&#xff0c;和对应的材质material。再一起创建一个三维物体。 // 存储创建的几何体列表const geometries [];cre…

nginx 配置域名前缀访问 react 项目

说明一下&#xff1a;我是使用域名转发访问的&#xff0c;访问流程如下&#xff1a; 浏览器 》 服务器1 》 服务器2 由于服务器1已经为 https 的访问方式做了 ssl 证书等相关配置&#xff0c;然后转发到服务器2&#xff0c; 所以在服务器2中不需要再配置 ssl 证书相关的东西了&…

thinkphp8.0 likeadmin 框架添加API 文档自动生成工具 apidoc支持

Apidoc 是一个便捷的 API 文档自动生成工具&#xff0c;它能帮助开发者快速生成和管理 API 文档。以下是 Apidoc 的主要特点和功能&#xff1a; 主要特点 开箱即用 安装后&#xff0c;无需繁杂配置&#xff0c;直接按照文档编写注释&#xff0c;即可自动生成 API 文档。 轻松编…

leetcode 面试经典 150 题:快乐数

链接快乐数题序号202题型数组解题方法哈希表难度简单熟练度✅✅✅✅ 题目 编写一个算法来判断一个数 n 是不是快乐数。 [快乐数] 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0…

每天一篇逻辑漏洞

前言&#xff1a; 不赶进度了&#xff0c;学习并运用吧 内容&#xff1a; 该文章有bili赞助发布摆烂哥如何从0开始到年入20w 到多家SRC TOP10白帽的心路历程分享_哔哩哔哩_bilibili 逻辑漏洞 验证码回显 //一般站没有&#xff0c;边缘资产有 用户名枚举 …

Ruby语言的数据结构

Ruby语言的数据结构详解 Ruby是一种动态、面向对象的编程语言&#xff0c;因其简洁优雅的语法而受到开发者的喜爱。在Ruby中&#xff0c;数据结构是构建和管理数据的一种方式&#xff0c;不同的数据结构适用于不同的场景。本文将详细探讨Ruby中的几种主要数据结构&#xff0c;…

【向量数据库 Milvus】linux 源码安装 Milvus 2.5.3

在 Linux 系统&#xff08;如 ai 5.10.134-16.2.an8.x86_64&#xff09;上通过源码安装 Milvus 2.5.3 的步骤如下。该指南适用于 x86_64 架构的系统。 1. 环境准备 确保系统满足以下要求&#xff1a; 操作系统: Linux&#xff08;x86_64 架构&#xff09;Go: 1.21 或更高版本…

imbinarize函数用法详解与示例

一、函数概述 众所周知&#xff0c;im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…

centos使用dpdk库

yum -y install dpdk dpdk-devel 在 C 中使用 DPDK&#xff08;Data Plane Development Kit&#xff09;库通常涉及到以下几个步骤&#xff1a;安装 DPDK、配置编译环境、编写 C 代码并链接 DPDK 库。以下是如何在 C 中引用和使用 DPDK 的详细步骤。 1. 安装 DPDK 首先&#…

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…

【postgres】sqlite格式如何导入postgres数据库

step1 在ubuntu系统安装pgloader&#xff08;centos系统难以直接通过yum安装&#xff0c;如果源码安装的话&#xff0c;会比较费劲&#xff09; step2&#xff0c;执行如下python脚本 from pathlib import Path import subprocess dataset_dir Path(/app/sqlite_to_pg/chas…

【C++指南】类和对象(八):匿名对象

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 引言 在C编程中&#xff0c;匿名对象是一种特殊的对象&#xff0c;它在创建时没有被命名。 这种对象通常用…

编译pytorch——cuda-toolkit-nvcc

链接 https://blog.csdn.net/wjinjie/article/details/108997692https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#switching-between-driver-module-flavorshttps://forums.developer.nvidia.com/t/can-not-load-nvidia-drivers-on-ubuntu-22-10/239750https://…

智汇云舟参编《城市轨道交通安全防范系统技术要求》国标正式发布

近日&#xff0c;根据国家标准化管理委员会官网&#xff0c;全国标准信息公共服务平台发布的公告&#xff0c;国家标准《城市轨道交通安全防范系统技术要求》&#xff08;GB/T 26718-2024&#xff09;已由全国城市轨道交通标准化技术委员会上报国家标准化管理委员会&#xff0c…

45_Lua模块与包

Lua中的模块系统是该语言的一个重要特性,它允许开发者将代码分割成更小、更易于管理的部分。通过使用模块,你可以创建可重用的代码片段,并且可以降低代码间的耦合度。下面我将详细介绍Lua模块的基本概念、语法以及一些实际案例。 1.Lua模块 1.1 模块的基本概念 从Lua 5.1…