数据结构(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)图状结构或网状结构:结构中的数据元素之间存在多个对多个的关系。
这些逻辑结构在实际应用中可以灵活组合和应用,以满足不同的数据处理需求。
数据的存储结构
数据的存储结构是指在计算机系统中,用于存储和组织数据的方式。常见的数据存储结构有以下几种:
-
数组(Array):是一种线性结构,将相同类型的数据按顺序存储在连续的内存空间中。可以通过索引值快速访问数组中的元素。
-
链表(Linked List):也是一种线性结构,但元素不一定连续存储。每个元素包含数据和指向下一个元素的指针,通过指针可以进行遍历和访问。
-
栈(Stack):是一种特殊的线性结构,采用后进先出(LIFO)的原则。只能在栈顶进行插入和删除操作,类似于一摞盘子。
-
队列(Queue):也是一种线性结构,采用先进先出(FIFO)的原则。只能在队尾插入元素,在队首删除元素,类似于排队等候。
-
树(Tree):是一种非线性结构,由节点和边组成。每个节点可以有多个子节点,形成层次关系。常见的树结构包括二叉树、二叉搜索树等。
-
图(Graph):也是一种非线性结构,由节点和边组成。节点之间的关系可以是任意的,常用于表示网络、社交关系等复杂结构。
-
散列表(Hash Table):使用散列函数将数据映射到固定大小的数组中,可以快速进行插入、查找和删除操作。适用于需要快速查找的场景。
以上仅是常见的数据存储结构,实际应用中还可能会使用其他更复杂的数据结构来满足特定需求。
按值的不同特性,高级语言中数据类型
高级语言中的数据类型可以根据其特性分为几个不同的类型,包括:
-
基本数据类型:这些类型包括整数、浮点数、字符和布尔值。基本数据类型在内存中占用固定的空间,并具有特定的取值范围和操作规则。
-
组合数据类型:这些类型包括数组、结构体和枚举。数组是一组相同类型的元素的集合,结构体是一组不同类型的数据成员的集合,而枚举是一组离散的命名常量。
-
引用数据类型:这些类型包括指针和引用。指针是存储内存地址的变量,可以用于间接访问其他变量或数据结构。引用是一个已存在变量的别名,通过引用可以直接访问原始变量。
-
抽象数据类型:这些类型包括类、接口和模块。类是一种封装了数据和相关操作的用户定义类型,接口定义了一组行为规范,而模块是一组相关功能的集合。
每种数据类型在编程中都有其特定的用途和限制,开发人员可以根据实际需求选择合适的数据类型来存储和操作数据。
算法与算法分析
算法的特性:
- 输入: 0个或多个输入
- 输出: 有一个或者多个输出
- 确定性: 每步都是确定的,无歧义
- 有穷性: 算法应该在有穷步后结束
- 可行性:每一条运算都是能够执行的
设计算法的要求:
- 正确性
- 可读性
- 健壮性
- 高效性(时间代价与空间代价)