数据结构(C语言版)概念、数据类型、线性表

数据结构(C语言)基本概念

数据的基本单位

数据的基本单位是位(bit)和字节(byte)。位是最小的存储单位,它可以表示一个二进制的0或1。字节由8个位组成,用于表示一个字符或数字。在计算机中,常用的数据单位还有千字节(KB)、兆字节(MB)、吉字节(GB)等,它们分别是1024字节、1024千字节和1024兆字节。

数据相关定义

数据(data):所有能输入到计算机中的符号,包含 数值型数据与非数值数据(文本,字符,文件等)

数据元素(data element): 数据的基本单位,也称节点(node)或记录(record)

数据项(data item): 有独立含义的数据最小单位,也称为域 (feild)

数据对象(data object):相同特性的数据元素的集合

数据结构(data structure): 相互之间存在一种或者多种关系的数据元素的集合

数据的逻辑结构

数据的逻辑结构指的是数据元素之间的关系,它描述了数据元素之间的逻辑关联和组织方式。常见的数据逻辑结构有以下几种:

  1. 线性结构:数据元素之间存在一对一的关系,即每个数据元素只有一个直接前驱和一个直接后继,形成线性序列。常见的线性结构有线性表、栈、队列等。

  2. 非线性结构:数据元素之间存在一对多或多对多的关系,即一个数据元素可能有多个直接前驱或直接后继。常见的非线性结构有树、图等。

  3. 集合结构:数据元素之间没有任何特定的顺序关系,每个元素都是平等的,且各个元素之间相互独立。常见的集合结构有集合、哈希表等。

  4. 顺序结构:数据元素之间存在一种顺序关系,即数据元素的排列顺序是固定的。常见的顺序结构有数组、链表等。

  5. 嵌套结构:数据元素可以包含其他数据元素,形成层次关系或者复杂的结构。常见的嵌套结构有树、图等。

四种基本结构:

(1)集合:结构中的数据元素之间除了"同属一个集合"的关系之外,别无其他关系;

(2)线性结构:结构中的数据元素之间存在一个对一个的关系;

(3)树形结构:结构中的数据元素之间存在一个对多个的关系;

(4)图状结构或网状结构:结构中的数据元素之间存在多个对多个的关系。

这些逻辑结构在实际应用中可以灵活组合和应用,以满足不同的数据处理需求。

数据的存储结构

数据的存储结构是指在计算机系统中,用于存储和组织数据的方式。常见的数据存储结构有以下几种:

  1. 数组(Array):是一种线性结构,将相同类型的数据按顺序存储在连续的内存空间中。可以通过索引值快速访问数组中的元素。

  2. 链表(Linked List):也是一种线性结构,但元素不一定连续存储。每个元素包含数据和指向下一个元素的指针,通过指针可以进行遍历和访问。

  3. 栈(Stack):是一种特殊的线性结构,采用后进先出(LIFO)的原则。只能在栈顶进行插入和删除操作,类似于一摞盘子。

  4. 队列(Queue):也是一种线性结构,采用先进先出(FIFO)的原则。只能在队尾插入元素,在队首删除元素,类似于排队等候。

  5. 树(Tree):是一种非线性结构,由节点和边组成。每个节点可以有多个子节点,形成层次关系。常见的树结构包括二叉树、二叉搜索树等。

  6. 图(Graph):也是一种非线性结构,由节点和边组成。节点之间的关系可以是任意的,常用于表示网络、社交关系等复杂结构。

  7. 散列表(Hash Table):使用散列函数将数据映射到固定大小的数组中,可以快速进行插入、查找和删除操作。适用于需要快速查找的场景。

以上仅是常见的数据存储结构,实际应用中还可能会使用其他更复杂的数据结构来满足特定需求。

按值的不同特性,高级语言中数据类型

高级语言中的数据类型可以根据其特性分为几个不同的类型,包括:

  1. 基本数据类型:这些类型包括整数、浮点数、字符和布尔值。基本数据类型在内存中占用固定的空间,并具有特定的取值范围和操作规则。

  2. 组合数据类型:这些类型包括数组、结构体和枚举。数组是一组相同类型的元素的集合,结构体是一组不同类型的数据成员的集合,而枚举是一组离散的命名常量。

  3. 引用数据类型:这些类型包括指针和引用。指针是存储内存地址的变量,可以用于间接访问其他变量或数据结构。引用是一个已存在变量的别名,通过引用可以直接访问原始变量。

  4. 抽象数据类型:这些类型包括类、接口和模块。类是一种封装了数据和相关操作的用户定义类型,接口定义了一组行为规范,而模块是一组相关功能的集合。

每种数据类型在编程中都有其特定的用途和限制,开发人员可以根据实际需求选择合适的数据类型来存储和操作数据。

算法与算法分析

算法的特性:

  • 输入: 0个或多个输入
  • 输出: 有一个或者多个输出
  • 确定性: 每步都是确定的,无歧义
  • 有穷性: 算法应该在有穷步后结束
  • 可行性:每一条运算都是能够执行的

设计算法的要求:

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效性(时间代价与空间代价)
相关推荐
天呐草莓5 分钟前
聚类(Clustering)算法
人工智能·python·算法·机器学习·数据挖掘·数据分析·聚类
m0_743106467 分钟前
【基础回顾】针孔相机、深度、逆深度、与SfM的统一
人工智能·算法·计算机视觉·3d·几何学
炽烈小老头16 分钟前
【每天学习一点算法 2025/12/30】最大子序和
学习·算法
Flash.kkl18 分钟前
优选算法专题十八——BFS解决拓扑排序
算法·宽度优先
C++ 老炮儿的技术栈19 分钟前
时序数据库 相对于关系型数据库,有什么区别
c语言·开发语言·c++·机器人·时序数据库·visual studio
hetao173383723 分钟前
2025-12-30 hetao1733837 的刷题笔记
c++·笔记·算法
小袁顶风作案27 分钟前
leetcode力扣——27.移除元素、26.删除有序数组的重复项、80.删除有序数组中的重复项 II
数据结构·算法·leetcode
goodlook012339 分钟前
监控平台搭建-监控指标展示-Grafana篇(五)
java·算法·docker·grafana·prometheus
这是个栗子40 分钟前
前端开发中的常用工具函数(持续更新中...)
前端·javascript·算法
断剑zou天涯41 分钟前
【算法笔记】有序表——相关题目
笔记·算法