C++之数据结构
做了好多题,发现了好多新的定义,如根节点,二叉树,图等等,涉及到了好多有关数据结构的知识,刚开始的几道选择题貌似都是和此相关的东西,以下是自己画的简单的思维导图
![](https://img-blog.csdn.net/20140310112124031?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvMDY1MDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
对于数据结构,自己只是先明白了其中的一些简单的定义:
线性表:
1)定义:数据表中的数据元素是一对一的关系,即除了第一个和最后一个数据元素之外,其他数据元素都是首尾相接的。
2)结构特点:均匀性,有序性
在实现线性表数据元素的存储方面,可用顺序存储结构和链式存储结构两种方法。另外,栈,队列,和串也是线性表的特殊情况,固这些都属于线性结构。
3)链式存储和顺序存储的比较:
![](https://img-blog.csdn.net/20140309204536484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvMDY1MDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
队列:
1)先进先出的特点,排队买东西则是一个很好的举例,排头的顾客买完后走掉,新来的顾客排在队尾。
2)链式存储:要知道任何一种实现表的方法,都可以用于实现队列。栈也同此;用指针实现的队列得到的实际上是一个单链表。
![](https://img-blog.csdn.net/20140309163333156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvMDY1MDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二叉树:
1)定义:二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
2)概念:
![](https://img-blog.csdn.net/20140309200303796?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvMDY1MDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3)性质:
![](https://img-blog.csdn.net/20140309202753812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvMDY1MDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
线性结构和非线性结构:
1)线性结构:是n个数据元素的有序集合,在数据结构中指的是数据元素之间存在着“一对一”的线性关系的数据结构。
四个基本特征:
- 集合中必存在唯一的一个“第一个元素”;
- 集合中必存在唯一的一个“最后的元素”;
- 除最后元素之外,其它数据元素均有唯一的“后继”;
- 除第一元素之外,其它数据元素均有唯一的“前驱”。
2)非线性结构的一个逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。
3)常见的线性结构:线性表(顺序表,链表),栈,队列,双队列,数组,串
常见的非线性结构:二维数组,多维数组, 广义表,树(二叉树),图(网)