数据结构和算法
2015-09-26 11:56
447 查看
软考数据结构和算法基础:
思维导图:
![](http://img.blog.csdn.net/20150926114818371?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150926114345191?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
知识说明:
线性表:
数据结构按存储结构分类可以划分为四种:顺序存储、链式存储、索引存储、散列存储。
数据结构按逻辑结构分类可以划分为3部分:集合、线性结构、非线性结构。
其中线性结构的数据结构包括:一维数组、队列、栈;
非线性结构的数据结构包括:树、图、多维数组;
下面着重介绍几个方面:
线性表是按照存储结构(顺序存储和链式存储)来划分为顺序表和链表。其中需要重点说明的是链表的操作:
单链表的删除:从前向后;删除n节点;n-1节点的炼狱指向n+1;n节点释放。
单链表的插入:从后向前;插入n节点;n节点的炼狱指向n+1;n-1的炼狱指向n。
双链表的插入: 从后向前;插入n; n的后链域指向n+1; n的前链域指向n+1; n+1的前链域指向n的后链域; n-1的后链域指向n的前炼狱。
循环队列:包括head、tail两个涉及名称。
Head 等于对头指向的是存储的第一个元素。tail等于队尾指向的是存储的最后一个元素的下一个。
初始时:head和tail同指向一处。head指针不变,如果添加新元素(tail指针加+1)=tail+1;
循环队列的最后一个存储位置为null====当tail指针指向null时进行tail+1=head的操作。
问题:
最初时利用head和tail相等的条件判断存储空间为空的情况;
现在出现相等的情况下还有可能是存储空间为满的情况;
解决:
牺牲一个存储空间-----最后一个存储空间为空null值
用tail+1=head来判断存储空间为满状态的情况。
树和二叉树:
基本操作:
查找: 查找n值
判断 n< => 根节点?
= 返回根节点
< 和根节点的左子树比较(重复上述判读)
< 和根节点的右子树比较(重复上述判读)
插入:如果相同键值得节点已在查找二叉树中,则不再插入;
如果查找二叉树为空树,则以新结点为查找二叉树;
将要插入结点的键值与插入后的父节点的键值比较,从而确定插入结点是父节点的左子结点还是右子结点。
删除:删除节点P。
如果P是叶子节点,则直接删除;
如果P只有一子节点M,将M和P的父节点L相连接后,删除P;
如果P有两个子节点。在P左子树上,用中序遍历找关键值最大的节点S,用S代替P的值,然后删除P。
思维导图:
知识说明:
线性表:
数据结构按存储结构分类可以划分为四种:顺序存储、链式存储、索引存储、散列存储。
数据结构按逻辑结构分类可以划分为3部分:集合、线性结构、非线性结构。
其中线性结构的数据结构包括:一维数组、队列、栈;
非线性结构的数据结构包括:树、图、多维数组;
下面着重介绍几个方面:
线性表是按照存储结构(顺序存储和链式存储)来划分为顺序表和链表。其中需要重点说明的是链表的操作:
单链表的删除:从前向后;删除n节点;n-1节点的炼狱指向n+1;n节点释放。
单链表的插入:从后向前;插入n节点;n节点的炼狱指向n+1;n-1的炼狱指向n。
双链表的插入: 从后向前;插入n; n的后链域指向n+1; n的前链域指向n+1; n+1的前链域指向n的后链域; n-1的后链域指向n的前炼狱。
循环队列:包括head、tail两个涉及名称。
Head 等于对头指向的是存储的第一个元素。tail等于队尾指向的是存储的最后一个元素的下一个。
初始时:head和tail同指向一处。head指针不变,如果添加新元素(tail指针加+1)=tail+1;
循环队列的最后一个存储位置为null====当tail指针指向null时进行tail+1=head的操作。
问题:
最初时利用head和tail相等的条件判断存储空间为空的情况;
现在出现相等的情况下还有可能是存储空间为满的情况;
解决:
牺牲一个存储空间-----最后一个存储空间为空null值
用tail+1=head来判断存储空间为满状态的情况。
树和二叉树:
基本操作:
查找: 查找n值
判断 n< => 根节点?
= 返回根节点
< 和根节点的左子树比较(重复上述判读)
< 和根节点的右子树比较(重复上述判读)
插入:如果相同键值得节点已在查找二叉树中,则不再插入;
如果查找二叉树为空树,则以新结点为查找二叉树;
将要插入结点的键值与插入后的父节点的键值比较,从而确定插入结点是父节点的左子结点还是右子结点。
删除:删除节点P。
如果P是叶子节点,则直接删除;
如果P只有一子节点M,将M和P的父节点L相连接后,删除P;
如果P有两个子节点。在P左子树上,用中序遍历找关键值最大的节点S,用S代替P的值,然后删除P。
相关文章推荐
- 数据结构学习---中缀表达式转后缀表达式
- 数据结构学习---中缀表达式转后缀表达式
- 【数据结构与算法】Hash表
- 数据结构与算法学习
- 《数据结构》——排序
- Catch That Cow
- 11991 - Easy Problem from Rujia Liu?(的基础数据结构)
- 数据结构 尾插法
- 数据结构概述
- Java Map数据结构与排序
- 抽象数据结构
- OC基础-OC三大基本数据结构-NSDictionary
- Kefa and Company
- 重学数据结构-队列、串、多维数组、广义表
- 数据结构与算法小结
- OC基础-OC三大基本数据结构-NSArray
- OC基础-OC三大基本数据结构-NSString
- 线索二叉树-数据结构
- 队列学习笔记
- 数据结构之线段树