1.数据结构与算法的关系
数据结构与算法研究的是程序中数据的组织方式.对于同一个程序,使用不同的数据结构,代码的执行效率是不同的.代码的优雅程度也不同.
我们可以说 程序 = 数据结构 +算法
数据结构是底层,算法高层。数据结构为算法提供服务。算法的实现依赖于数据结构。
每个算法的实现需要选择正确的数据结构,这个执行效率才会高(时间复杂度低)
要学好算法,先要学好数据结构.这里我们就认为 数据结构分为逻辑数据结构和存储数据结构
同一逻辑结构可以对应不同的存储结构,算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。(这里我想把算法看做逻辑数据结构)
2.数据结构的分类
按照逻辑数据结构可以将数据结构分为:线性结构与非线性结构.
2.1 线性结构
(1) 线性结构就是表中各个结点具有线性关系。数据元素之间存在一对一的线性关系.
(2)线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息.
典型的线性结构(逻辑数据结构):栈,队列,数组(这些都是线性表)等都属于线性结构.他们各有两种存储数据结构,因此队列,栈,数组,线性表各存在两个实现方式。
代码实现(参考链接见文末)
1.顺序存储的线性表(顺序表)
按照我们的习惯,存放东西时,一般是找一块空间,然后将需要存放的东西依次摆放,这就是顺序存储。计算机中的顺序存储是指在内存中用一块地址连续的空间依次存放数据元素,用这种方式存储的线性表叫顺序表.其特点是表中相邻的数据元素在内存中存储位置也相邻,如下图:
2. 链式存储的线性表(链表)
我们要储存一堆东西,但是空间不够,我们就在一个地方放一件,然后写上下一件的位置,并且假设我们只能记住第一件东西的位置,这样,我们寻找某件东西的时候就只能从第一件开始,(所以链表查询慢)
上图演示的是单向链表,只能向下找.为了向上找,就出现了双向链表.在存放物品的时候既记录上一件物品的位置又记录下一件物品的位置
2.2 非线性结构
非线性结构就是表中各个结点之间具有多个对应关系(一对多,多对一)。如二维数组,多维数组,广义表,树结构,图结构