数据结构与算法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

如何将二叉树改为线索二叉树:先写出二叉树的前序遍历、中序遍历、后序遍历,然后找出他的前驱和后续节点。

 

 

 

 

 

posted @ 2011-09-04 21:52  戴月耿  阅读(160)  评论(0)    收藏  举报