算法--基本数据结构总结
2015-03-18 20:56
267 查看
其实数据结构和算法真的很重要,以前一直不怎么在意,所以每次笔试面试都被鄙视。“编程就是算法和数据结构,算法和数据结构是编程的灵魂”,现在感觉这句话还是有点道理的。今天翻了翻一些基本的数据结构,记了一些基本的性质,进行总结,后面还会继续总结一些常见的查找和排序算法。
链式存储线性表:将元素按照逻辑顺序链接在依次,不要求地址连续;
栈:仅在表的一端进行插入、删除操作的线性表,“后进先出”;
队列:仅在表的一端进行插入,另一端进行删除的线性表,“先进先出”
栈和队列有时候笔试会针对”FIFO“这些特性出问题,不过一般理解了,就比较简单。
二、树
2.1概念
二叉树是每个节点最多有两个子树(“左子树”和“右子树”)的树结构。
满二叉树:二叉树的每一层节点个数都达到最大(即深度为k,且有2^k-1个节点);
完全二叉树:只有最下面两层节点的度数可以小于2,并且最下一层的节点都集中在左边(深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应)。
满二叉树是完全二叉树的特例,如下图:
平衡二叉树:又被称为AVL树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树(完全二叉树是平衡二叉树),如下图
2.2二叉树性质:
a.二叉树的第i层至多有2^{i-1}个结点;
b.深度为k的二叉树至多有2^k-1个结点;
c.具有n个节点的完全二叉树的深度k=log2n+1;
d.对任何一棵二叉树T,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
2.3二叉树遍历
二叉树遍历记住一点就行了,即遍历的顺序都是针对根节点而言的。例如先序即先访问根节点,再遍历左子树,最后遍历右子树。结合实例来讲,如下图:
先序遍历结果:abdgcefh
中序遍历结果:dgbaechf
后序遍历结果:gdbehfca
三、图
无向完全图:任意两个顶点都有一条直接边相连接;在含有n个顶点的无向完全图中,有n(n-1)/2条边;
有向完全图:任意两个顶点都有方向互为相反的两条弧相连接;在含有n个顶点的有向完全图中,有n(n-1)条边。
图的深度优先遍历:类似于树的先序遍历,下图显示了深度优先搜索顶点被访问的顺序:
图的广度优先遍历:类似于树的按层次遍历,下图显示了广度优先搜索顶点被访问的顺序:
ps.上面两张图片来源 http://blog.csdn.net/andyelvis/article/details/1728378。 由于CSDN加了水印,有些模糊,看不清楚的话可以去图片原址去看。
一、线性结构
顺序存储线性表:将元素依次存储在地址连续的存储单元中,物理上相邻;链式存储线性表:将元素按照逻辑顺序链接在依次,不要求地址连续;
栈:仅在表的一端进行插入、删除操作的线性表,“后进先出”;
队列:仅在表的一端进行插入,另一端进行删除的线性表,“先进先出”
栈和队列有时候笔试会针对”FIFO“这些特性出问题,不过一般理解了,就比较简单。
二、树
2.1概念
二叉树是每个节点最多有两个子树(“左子树”和“右子树”)的树结构。满二叉树:二叉树的每一层节点个数都达到最大(即深度为k,且有2^k-1个节点);
完全二叉树:只有最下面两层节点的度数可以小于2,并且最下一层的节点都集中在左边(深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应)。
满二叉树是完全二叉树的特例,如下图:
平衡二叉树:又被称为AVL树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树(完全二叉树是平衡二叉树),如下图
2.2二叉树性质:
a.二叉树的第i层至多有2^{i-1}个结点;b.深度为k的二叉树至多有2^k-1个结点;
c.具有n个节点的完全二叉树的深度k=log2n+1;
d.对任何一棵二叉树T,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
2.3二叉树遍历
二叉树遍历记住一点就行了,即遍历的顺序都是针对根节点而言的。例如先序即先访问根节点,再遍历左子树,最后遍历右子树。结合实例来讲,如下图:先序遍历结果:abdgcefh
中序遍历结果:dgbaechf
后序遍历结果:gdbehfca
三、图
无向完全图:任意两个顶点都有一条直接边相连接;在含有n个顶点的无向完全图中,有n(n-1)/2条边;有向完全图:任意两个顶点都有方向互为相反的两条弧相连接;在含有n个顶点的有向完全图中,有n(n-1)条边。
图的深度优先遍历:类似于树的先序遍历,下图显示了深度优先搜索顶点被访问的顺序:
图的广度优先遍历:类似于树的按层次遍历,下图显示了广度优先搜索顶点被访问的顺序:
ps.上面两张图片来源 http://blog.csdn.net/andyelvis/article/details/1728378。 由于CSDN加了水印,有些模糊,看不清楚的话可以去图片原址去看。
相关文章推荐
- 各种基本数据结构和算法总结清单
- 数据结构基本算法:单向链表
- 数据结构和算法面试总结
- JVM垃圾回收机制总结(2) :基本算法概述
- 数据结构和算法总结(一)
- java基本算法总结(冒泡排序、选择排序、插入排序)
- 《C算法》——基本数据结构及其算法
- 一步一步复习数据结构和算法基础-稀疏矩阵基本操作
- PHP 基本的数据结构算法
- 新手学习数据结构与算法---单链表的基本操作
- 数据结构和算法总结(三)
- 常用算法总结之排序(二)----基本冒泡
- 基本数据结构(算法导论)与python
- 【百度分享】dictmatch及多模算法串讲 -- dictmatch基本数据结构及算法
- 算法导论——第七章——基本数据结构
- 算法和数据结构基本概念
- JVM调优总结(三)-基本垃圾回收算法
- JVM调优总结(三)-基本垃圾回收算法
- 基本数据结构(算法导论)与python
- 图论(1) 图的基本数据结构和算法