您的位置:首页 > 理论基础 > 数据结构算法

数据结构和算法

2015-09-26 11:56 447 查看
软考数据结构和算法基础:

思维导图:







知识说明:



线性表:

数据结构按存储结构分类可以划分为四种:顺序存储、链式存储、索引存储、散列存储。

数据结构按逻辑结构分类可以划分为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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: