数据结构(复习)

1.串的模式匹配 KMP

2.二叉树先序遍历,后序遍历,中序遍历 递归算法和非递归算法
①后续遍历递归算法

void PostOrder(BitTree T)
{
if(T!=NULL)
 PostOrder(T_>lchild);
  PostOrder(T_>rchild);
   visit(T);
}

②非递归算法中序遍历

void InOrder(BitTree T)
{
  InitStack(S);
  BiTree p=T;
  while(p|| !IsEmpty(S))
  {
  if(p)
  {
  Push(S,p);
  p=p->lchild;
  }
else{
  Pop(S,p);
  visit(p);
  p=p_>rchild;
}
}

}

③层序遍历

void LevelOrder(BiTree T)
{
InitQueue(Q);
BiTree p;
EnQueue(Q,T)while(!IsEmpty(Q))
{
DeQueue(Q,p);
visit(p);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild)if(p->rchild!=NULL)
EnQueue(Q,p->rchild)}
}

3.树的存储结构
1.双亲表示法

#define MAX_TREE_SIZE 100
typedef struct{
ElemType data;
int parent;
} PTNode;//节点
typedef struct
{
PTNode nodes[MAX_TREE_SIZE 100];
int n;/节点个数
}PTree;//树

2.孩子表示法
3.孩子兄弟表示法

typedef struct CSNnode
{
 ElemType data;
 struct CSNode *firstchild,*nextsibling;

}CSNode,*CSTree;

4.树与二叉树的应用
哈夫曼树和哈夫曼编码 带权路径长度
并查集
二叉排序树 中序遍历二叉树得到一个递增序列
平衡二叉树(是二叉排序树)
5.图的存储方法

邻接矩阵法

 #define MaxVertexNum 100
 typedef char VertexType;
  typedef  int EdgeType;
  typedef struct
  {
  VertexType Vex[MaxVertexNum ];
  EdgeType Edge[[MaxVertexNum][[MaxVertexNum];
  int vexnum,arcnum;
}

邻接表存储结构

#define MaxVertexNum 100
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;

}ArcNode;
typedef struct Vnode
{
VertexType data;
 ArcNode *first;
} Vnode,AdjList[ MaxVertexNum];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
} ALGraph;

6.图的遍历
广度优先搜索(迪杰斯特拉,普利姆最小生成树)
BFS(先visit再入队)

void BFS(Graph G, int v)
{
  visit(v);
  visited[v]=TRUE;
  EnQueue(Q,v);
  while(!IsEmpty(Q))
  {
 DeQueue(Q,v);
 for(w=FirstNeighbor(G,v);w>0;w=NextNeighbor(G,v,w))
  if(!visited[w]){
    visit(w);
  visited[w]=TRUE;
   EnQueue(Q,v);
  }

}
}

深度优先搜搜(递归)
DFS

void  DFS(Graph G,int v)
{
   visit(v);
    visited[v]=TRUE;
 
 for(w=FirstNeighbor(G,v);w>0;w=NextNeighbor(G,v,w))
  if(!visited[w]){
  DFS(G,w);
  }


}

7.图的应用
最小生成树 prime kruskal
最短路径 Dijkstra算法 O(V^2) Floyd算法 O(V^3)
拓扑序列(AOV网) DFS
关键路径(AOE网)
8.查找
顺序查找 O(n)
折半查找O(log2n)
分块查找法

树型查找:
二叉排序树BST O(n)-O(log2n)
平衡二叉树 O(log2n)
B树和B+树 定义和区别
B树是为实现高效的磁盘存取而设计的多叉平衡搜索树。这个概念在文件系统,数据库系统中非常重要。和二叉树相比,极大地减少了磁盘读取的次数
B+树是B树的一种变形,它更适合实际应用中操作系统的文件索引和数据库索引。
❀B+树和B树相比,主要的不同点在以下3项:
①内部节点中,关键字的个数与其子树的个数相同,不像B树中,子树的个数总比关键字个数多1个
②所有指向文件的关键字及其指针都在叶子节点中,不像B树,有的指向文件的关键字是在内部节点中。换句话说,B+树中,内部节点仅仅起到索引的作用,
③在搜索过程中,如果查询和内部节点的关键字一致,那么搜索过程不停止,而是继续向下搜索这个分支。

9.散列表哈希表
1.处理冲突的方法
拉链法 开放定址法(线性探测,平方探测,伪随机序列法) 再散列法
2.散列函数的构造方法
除留取余法 直接定址法 平方取中法
10.排序
1.内部排序
①插入排序 O(n^2)(直接插入排序,折半插入,希尔排序)
②交换排序(冒泡排序O(n2),快速排序O(nlog2n)-O(n2) )
③选择排序(简单选择O(n^2)和堆排序O(nlog2n))
④归并排序O(nlog2n)
⑤基数排序
2.外部排序
①多路归并排序
( 败者树 置换选择排序 最佳归并树)