数据结构基本概念
数据元素与数据项
- 数据元素:数据的基本单位,可由若干个数据项组成。
- 数据项:构成数据元素的不可分割的最小单位。
- 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。形式化定义为 Data_Structure = (D, S),其中 D 是数据元素的有限集,S 是 D 上关系的有限集。
逻辑结构与物理结构
- 逻辑结构:反映数据元素之间的逻辑关系。
- 线性结构:一般线性表、栈、队列、串、数组(一对一)。
- 非线性结构:树形结构(一对多)、图形或网状结构(多对多)、集合。
- 存储结构(物理结构):数据在计算机中的表示。
- 顺序存储:逻辑上相邻的元素存储在物理位置也相邻的存储单元中(常用,随机存取)。特点:存储密度大,插入删除需移动大量元素。
- 链式存储:借助指示元素存储地址的指针。适用于大量数据的插入和删除。
- 索引存储:建立索引表。
- 散列存储:通过哈希函数计算地址。
算法特征与分析
- 五大特征:有穷性、确定性、可行性、输入、输出。
- 好算法特征:正确性、可读性、健壮性、效率与低存储量需求。
- 时间复杂度:计算算法执行次数,关注 n 的算术式。
线性表
定义
具有相同数据类型的 n(n ≥ 0) 个数据元素的有限序列。除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继。
顺序表
结构描述
// 静态分配
#define MaxSize 50
typedef struct {
ElemType data[MaxSize];
int length;
} SqList;
// 动态分配
#define InitSize 100
typedef struct {
ElemType *data;
int MaxSize, length;
} SeqList;
基本操作
InitList(&L):初始化表Length(L):求表长LocateElem(L, e):按值查找GetElem(L, i):按位查找ListInsert(&L, i, e):插入操作ListDelete(&L, i, &e):删除操作PrintList(L):输出操作Empty(L):判空操作DestroyList(&L):销毁操作


