***什么是数据结构?
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,优秀的数据结构可以带来更高的运行或者存储效率,高效的检索算法和索引技术。
程序设计=数据结构+算法
物理结构+逻辑结构=数据结构
一、逻辑结构:
集合结构:

线性结构:

树形结构:

图形结构:

二、物理结构
顺序存储结构:

链式存储结构:

算法概念
不同的算法可以提高计算相同算术题的效率,那么算法的研究就变得有意义了。
算法的特性
1.有输入。
2.有输出。
3.有穷性(执行有限的步骤)。
4.确定性(每一个步骤仅有一个含义)。
5.可行性。
算法设计要求
没有无法错误、有合法输入和输出。
算法效率
通过度量方法和事前分析估算方法计算。
算法时间复杂度 O(n)


(注意:执行次数==时间)
算法的空间复杂度是什么?
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。
什么是线性表?
例如:按照学号排序的班级花名册表,同一个学号不可能有2名相同的同学。
什么是单链表?

单链表读取核心思想:“工作指针后移”;
什么是静态链表?
游标+数据+下标;插入操作、删除操作;快慢指针。
什么是循环链表?

什么是双向链表?
有前驱节点+后继节点,多了一个prior指针。

栈、堆和队列是什么?
栈(stack):它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
堆(Heap):是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。
(完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树)
(完全二叉树)
队列:是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
递归是什么?
程序调用自身的编程技巧称为递归,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。


什么是二叉树?
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 。
|