数据结构基础

数据是信息的载体,能被计算机识别,存储和加工处理

数据元素是数据的基本单位,可由若干数据项组成,数据项是具有独立含义的最小标识单位。

数据的存储结构:顺序存储,链接存储,索引存储,散列索引

评价算法的质量:正确性,易读性,健壮性,高效率。

算法的特征:有穷性,确定性,可行性,输入和输出。

决定算法运行时间的因素:问题规模,编译时间,指令执行速度,重复执行指令的速度

 

数据结构

 

node *p=(node*)malloc(sizeof(node)); 分配地址

free(p); 释放资源

 

顺序表

链表 prior data next

         typedef struct node

         {

                   datatype data,

                   struct node *next

         }*pNode;

 

栈 注意溢出 是否为空栈 栈顶进出

         typedef struct stack

         {

                   pNode Top,

                   pNode Bottom

         }*Pstack;

 

队列 是一种受限的线性表,允许删除的一端称为对首,允许插入的一端称队尾

         边界条件 為克服假上溢,i=(i+1)%queuesize

         解決方式,設置布尔变量区分队列满或空,少用一个元素,rear+1=front,使用计数器记录元素总数

         typedef struct Queue

         {

                   pNode rear,

                   pNode front,

                   int len,

                   int size

         }*pQueue;

 

串 存储结构:顺序存储与链接存储

多维数组

         特殊矩阵

         对称矩阵 转换为数据存储 n(n+1)/2  i(i+1)/2+j

         三角矩阵 n(n+1)/2+1 转换为数组时,分上下三角矩阵

                            上三角矩阵

                            下三角矩阵

 

         稀疏矩阵 压缩方式 三元表示法 (i,j,data) 行指针链表 十字链表

         树上任一结点拥有的子树数称为该结点的度

         树中的每个结点的子树不能变更其位置,称为有序树,反之称为无序树

         二叉树减枝

         二叉树性质:        

                   在二叉树的第i层最多有2(i-1) 个结点 2*0 2*1

                   二叉树中如果深度为K,那么最多具有2(k)-1 个结点

                   n0=n2+1 n0表示度数为0的结点 n2表示度数为2的结点

                   完全二叉树中,具有n个节点的完全二叉树的深度为(log2n)+1 ,其中(log2n)+1是向下取整

                   如果有一颗有n个结点的完全二叉树的节点是按层次序编号的,对任一层的结点i(1<=i<=n)有

                            1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整

                            2.如果2i>n那么节点i没有左孩子,否则其左孩子为2i

                            3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1

                   二叉树遍历 前序遍历 中序遍历 后续遍历 时间复杂度为O(0)

        typedef struct Treenode

         {

                   struct Treenode *lchild,

                   struct Treenode *rchild,

                   datatype data

         }*pTree;

 

         森林通常定义为树的集合

         树与二叉树的转换 1.所有的兄弟连线 2.保留与长子的连线,去除其他连线

         森林与二叉树的转换 1.将所有树转换成二叉树 2.将所有根节点连接

         森林的前序遍历等同前序遍历二叉树

         森林的后续遍历等同中序遍历二叉树

         路径:从树的一个结点到树的另一个结点之前的分支

         长度:路径上的分支数目

         结点的带权路径长度

         哈夫曼树

         字符集编码 前缀码

 

图 G=(V,E) 有向图<V1,V2> 无向图(V1,V2)

         度 入度 出度

         n个顶点,有n(n-1)/2条边的无向图为无向完全图,有n(n-1)条边的有向图为有向完全图

         联通图:任意两个顶点都可及

         一个联通图的生成树,极小联通子图

         强联通图:有向图中任意两点都有路径,极大联通图称为强联通分量

         网:带权的图

         图的存储结构:

                   邻接矩阵表示法

                   邻接表表示法

         图的遍历:

                   深度优先

                   广度优先

         最小生成树:权值最小的生成树

                   普里姆:从顶点v0开始,选取权值最小的边(v0,v1)加入最终序列中,再从剩余集合中选取连接到最终集合权值最小的边,依次将所有顶点加入最终集合中

                   克鲁斯卡尔:选择最小权的边,加入最终集合T,再依次选择不联通最终集合最小权的边加入最终集合T,直到将所有顶点加入集合T中。

         AOV网:顶点表示活动,有向边表示活动的先后关系

         拓扑序列:AOV网中的所有顶点排成一个序列,使得每个活动的前驱活动都排在该活动的前面

         拓扑存储:以向量存储所有顶点,包含入度数,数据,弧尾指针        

         拓扑排序:从AOV网中选择一个入度为0 的顶点输出,让后删除此顶点,并删除以此顶点为尾的弧;重复此操作,直到输出全部顶点或不存在入度为0的顶点为止。

posted @ 2016-03-30 16:01  欣欣点灯  阅读(224)  评论(0编辑  收藏  举报