数据结构与算法2011/9/4
线性表:1.顺序表(内存顺序排列)
2.链表 (内存离散排列,通过指针连接)
链表:1.单链表(数据域,指针域)
2.循环列表(最后一个指针域的指针指向第一个节点)
3.双链表(有两个指针域)
单链表的操作:1.删除一个结点(next指针)
(next指针)2.插入一个结点(先连再断)
双链表的操作:1.删除一个结点
2.插入一个结点(先将新结点的前后指针指向要连接的节点,在将原来节点的指针指向新结点)

栈(先进后出)
队列(先进先出)
循环队列 (没有最后一个空间)1.为空时,head=tail;
2.满时,head=tail+1;
树和二叉树
(层树从0层开始,部分是从1层开始的)
1. 叶子节点
2. 分支结点(包括根结点)
3. 内部结点(比分子节点少个根结点)
4. n=k+1(n:节结点;k:总的度数)
树的遍历
1. 前序遍历(根到叶)
2. 后序遍历 (叶到根)
3. 层次遍历(按层次,从左到右)
二叉树
(左结点,又结点)
1. 满二叉树(所有结点都有,是完全二叉树)
2. 完全二叉树(n-1层是满二叉树,最后一层从左到右排列)
二叉树的重要性:
1. 在二叉树的第i层做多有2^i次;(从0层开始)
2. 深度为k的二叉树最多有2^(k+1)-1次;
3. 对任何一颗二叉树,如果叶子结点数为n0,度为2的节点数为n2,则n0=n2+1;
二叉树遍历
1. 前序遍历
2. 中序遍历
3. 后序遍历
4. 层次遍历
查找二叉排序树
一棵查找二叉树,要么是空,要么满足以下条件:
1. 左右子树是查找二叉树
2. 若左子树非空,则左子树的各个结点上的值都小于根结点的值;
3. 若右子树非空,则右子树的各个结点上的值都大于根结点的值;
二叉排序树插入结点
1. 如果存在相同结点,怎不允许插入
2. 如果,二叉排序树为空,则新结点我二叉排序树;
3. 插入的键值与父结点比较,确定是放在左子树还是右子树;
二叉排序树删除结点
1. 如果是叶子结点,直接删除;
2. 如果要删除的结点只有左子树,则删除该结点,并将左子树上移到它的位子;
3. 如果要删除的结点存在左子树和右子树,则删除该结点,并用中序遍历找出子树中的最大的结点s,并用最大的结点s代替该节点,然后删除s;
最优二叉树(哈夫曼树)
树的带权路径长度最短
如何构造最优二叉树:选两个全最小的构成一棵树,得出新的权,重复前面的操作,知道全部结束
哈夫曼编码:左为0,右为1
如何将二叉树改为线索二叉树:先写出二叉树的前序遍历、中序遍历、后序遍历,然后找出他的前驱和后续节点。
 
                    
                 
