什么是数据结构
1、数据结构起源
1968年,美国高德纳教授,《计算机程序设计艺术》的第一卷《基本算法》的出版,开创了数据结构和算法的先河
数据结构是一门研究数据之间关系和操作的学科,而非计算方法
数据结构 + 算法 = 程序 沃斯凭借这个观点写的论文获得了图灵奖,这句话展示了程序的本质
2、数据结构的基本概念
数据: 所有能够输入到计算机中,能够被程序处理的描述客观事物的符号
数据项: 有独立含义的最小单位,也叫做域(结构的成员项)
数据元素: 组成数据结构且有一定意义的基本单位,也叫做节点、记录一个数据元素由若干个数据项组成(结构变量)
数据结构: 相互之间存在一种或多种特定关系的数据元素的集合
算法: 数据结构所具备的功能、解决特定问题的方法
3、数据结构的三个方面
数据的逻辑关系
数据的存储(物理)关系
数据结构的运算
逻辑关系和存储关系
数据的逻辑结构:
集合: 数据元素同属于一个集合,但元素之间没有任何关系
线性结构: 数据元素之间存在一对一的关系 (表)
树型结构: 数据元素之间存在一对多的关系 (树)
图形结构: 数据元素之间存在多对多的关系 (图)
数据的存储结构:
顺序存储: 数据元素存储在连续的内存中,用数据元素的相对位置来表示关系
优点: 支持随机访问、访问效率极高、适合查找数据
缺点: 空间利用率低、对内存要求高、插入、删除不方便
链式存储: 数据元素存储在彼此独立的内存空间中,每个数据元素中增加一个数据项用于存储其他元素的地址,以此来表示数据元素之间的关系
优点: 空间利用率高、适合频繁增删数据、插入、删除方便
缺点: 不支持随机访问、只能从前到后逐个访问
逻辑结构与存储结构的关系:
表: 顺序、链式(取决运算操作)
树: 链式、顺序(优先级先前再后)
图: 顺序 + 链式(难度比较高)
每种逻辑结构采用什么物理存储方式没有明确规定,通常根据实现的难易程度以及空间、时间方面的要求,来选择最合适的物理存储结构
数据结构的运算
1、建立数据结构 create
2、销毁数据结构 destory
3、清空数据结构 clean
4、数据结构排序 sort
5、遍历数据结构 show/print/ergodic
6、插入元素 insert
7、删除元素 delete
8、访问元素 access
9、修改元素 modify
10、查询元素 query
(**)顺序表和链式表的实现
顺序表:(array.c)
数据项:
存储元素的内存首地址
表的容量
元素的数量
运算:
创建、销毁、清空、插入、删除、访问、查询、修改、排序、
遍历
注意:
1、不要越界
2、时刻保持元素的连续性
优点: 支持随机访问,修改、访问、排序的效率比较高,大块的连续内存,不容易产生内存碎片
缺点: 对内存要求比较高(内存的连续),插入、删除元素时不方便且效率低
链式表:
节点的数据项:
数据域: 可是由若干个各种类型的数据项组成
指针域: 专门用于指向下一个节点的指针
由若干个节点通过指针域连接在一起,形成链式表
不带头节点: 第一个节点的数据域存储的是有效的数据
缺点:
1、添加、删除时有可能会改变第一个节点的指针指向,参数需要传递
2、二级指针,而且删除第一个节点时,还需要额外处理
带头节点的: 第一个节点不使用,仅仅只是用来指向第一个数据域有效节点(list.c)
注意: 操作需要从第二个节点,也就是第一个有效数据节点开始
注意: 下标从第一个有效数据节点开始
/*常考面试题: 数组和链表的缺点?*/