Pascal 之父 Nicklaus Wirth 曾经凭借一个公式获得了图灵奖(计算机领域的诺贝尔奖)。
算法 + 数据结构 = 程序
在日常的工作中,数据结构与算法好像与自身相距甚远,即使没有高深的结构也能完成开发工作。而在大多数的企业面试中,算法却显得尤为重要。
数据结构与算法是每一个开发者的必修课,它能帮助建立正确的开发思维,在适当的时机他也能解决我们开发中的困局,数据结构与算法对于开发来说尤为重要。
1. 数据结构
数据结构是指计算机中存储、组织数据的方式。
1.1 数据
数据是信息的载体,在计算机科学中是指所有能输入到计算机中并能被计算机程序识别和处理的符号集合。可以将数据分为两大类:一类是整数、实数等数值数据;另一类是文字、声音、图形和图像等非数值数据。
1.2 数据项
不可分割的、具有独立意义的最小数据单位,也称字段或域
1.3 数据元素
数据的的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。
1.4 数据对象
性质相同的数据元素的集合(类似于数组)。
1.5 结构
数据元素之间不是独立的,存在特定的关系,这些关系即是结构。
1.6 数据结构
指的数据对象中的数据元素之间的关系。
例如
// 数据元素:Person 类
struct Person {
char *name; // 数据项:名字
int age; // 数据项:年龄
int gender; // 数据项:性别
};
int main() {
struct Person p; // 单个数据元素
p.name = "Cloud";
p.age = 22;
p.gender = 1;
struct Person pArr[10]; // 多个数据元素构成的数据对象
return 0;
}
2 逻辑结构与物理结构
数据结构是指互相之间存在着一种或多种关系的数据元素的集合。在任何问题中,数据元素都不会是孤立的,在它们之间存在着这样或那样的关系,这种数据元素之间存在的关系称为数据的逻辑结构。
2.1 逻辑结构
数据的逻辑结构可以看做从具体问题抽象出来的数学模型,它与数据的存储无关。
基于物理结构实现的高级数据结构,根据逻辑上的数据关系分为以下几类
- 集合结构:在集合结构中,数据元素之间的关系是“属于同一个集合”。数据元素之间除了同属一个集合外,不存在其他关系。
- 线性结构:在该结构中,数据元素除了同属于一个集合外,数据元素之间还存在着一对一的顺序关系。
- 树形结构:该结构的数据元素之间存在着一对多的层次关系。
- 图状结构:该结构的数据元素之间存在着多对多的任意关系,图状结构也称为网状结构
2.2 物理结构
数据的逻辑结构在计算机中的存储表示称为数据的物理结构(或称存储结构),它所研究的是数据结构在计算机中的实现方法,包括数据结构中数据元素的存储表示及数据元素之间关系的表示。 在计算机中,数据的存储方法包括顺序存储和链式存储。
- 顺序存储:开辟一段连续的空间来存储数据的线性表结构。
- 内存连续,数据访问简单
- 使用前需先开辟足够的空间,不能扩容
- 链式存储:由不连续的空间相连组成的链表结构。
- 内存不连续,访问不如顺序存储便捷
- 空间可根据需求变化