楔子
本文是在下学习 数据结构与算法 的记录以及一些感想。
学习资料和参考资料:
- 《漫画算法》
- JavaScript版数据结构与算法
- 百度百科
- 等等(别问我等等是谁!)
算法概述
什么是算法
- 在数学的领域中,算法是用于解决某一类问题的公式和思想。
- 在计算机领域中,算法的本质是一系列程序指令,用于解决特定的运算和逻辑问题。
算法的好坏
时间复杂度
时间复杂度是对一个算法运行时间长短的量度,用大O表示,记作 T(n)=O(f(n))
常见的时间复杂度按照从低到高的顺序有:
- O(1)
- O(logn)
- O(n)
- O(nlogn)
- O(n^2)
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用大O表示,记作 S(n)=O(f(n))
常见的空间复杂度按照从低到高的顺序有:
- O(1)
- O(n)
- O(n^2)
数据结构
什么是数据结构
数据结构是数据的组织、管理和存储格式。
数据结构可以简单的分类为两种:线性结构 和 非线性结构
线性结构
线性结构就是表中各个节点具有线性关系。
如果从数据结构的语言来描述,线性结构应该包含以下几点:
- 非空集合
- 有且只有一个开始节点和终端节点
- 所有节点都最多只有一个直接前趋节点和直接后继节点 典型的线性结构有:线性表、栈、队列、串等。
非线性结构
非线性结构就是表中各个结点之间具有多个对应关系。
如果从数据结构的语言来描述,非线性结构应该包含以下几点:
- 非空集合
- 一个节点可能有多个直接前趋节点和直接后继节点 典型的非线性结构有:广义表、树结构、图结构等。
逻辑结构 和 物理结构
关于 逻辑结构 和 物理结构,大家可以先思考一个题目:队列和链表有何区别呢?
逻辑结构
逻辑结构是指数据对象中数据元素之间的相互关系。
它是一种概念和抽象上的存在。
通常的数据结构一般指的是逻辑结构
逻辑结构可以分为以下几种:
- 集合结构
- 线性结构
- 树型结构
- 图型结构
物理结构
物理结构又可以称为内存结构,是指数据的逻辑结构在计算机中存储的形式。
通过数据的存储结构可以正确反应数据元素之间的逻辑关系。
物理结构可以分为以下几种:
- 顺序存储结构
- 链式存储结构
- 索引结构
- 散列结构
队列和链表有何区别呢?
其实这是一个伪命题,队列是一种逻辑结构,链表是一种物理结构,它们之间是无法进行比对的。
栈
栈(stack),又名堆栈,是典型的线性结构。
栈仅能在末尾进行添加数据和删除数据的操作,这一端被称之为栈顶,相对的另一端称之为栈底。
新增数据一般称之为入栈、进栈、压栈,它是把新的数据放到原来栈顶元素的上面,使之成为新的栈顶。
删除数据一般称之为出栈、退栈,它是把栈顶的数据删除掉,使其后方的数据成为新的栈顶。
看着是不是很累佷懵,我们来举个🌰(例子):
这样是不是就很直观了
未完待续