数据结构(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. 高效性(时间代价与空间代价)
相关推荐
LittleStone83978 分钟前
C语言实现旋转一个HWC的图像
c语言
Schwertlilien21 分钟前
图像处理-Ch1-数字图像基础
图像处理·人工智能·算法
程序员一诺21 分钟前
【深度学习】嘿马深度学习笔记第10篇:卷积神经网络,学习目标【附代码文档】
人工智能·python·深度学习·算法
刚学HTML2 小时前
leetcode 05 回文字符串
算法·leetcode
Yan.love2 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
stm 学习ing2 小时前
HDLBits训练5
c语言·fpga开发·fpga·eda·hdlbits·pld·hdl语言
AC使者2 小时前
#B1630. 数字走向4
算法
冠位观测者2 小时前
【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序
数据结构·算法·leetcode
古希腊掌管学习的神3 小时前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca3 小时前
洛谷 P1706 全排列问题 C语言
算法