408数据结构算法题
线性表
顺序表的应用
顺序表的定义
1 |
|
单链表的应用
单链表的定义
1 |
|
基本操作
- 创建节点
1
2
3
4LNode *p;
p = (LNode*)malloc(sizeof(LNode)); // 函数malloc分配一个类型为LNode的结点变量的空间
p -> data = x; // 结点p的元素值为x
p -> next = NULL; - 赋值操作
- $P = Q$ :将$P$的值赋给$Q$,此时两者同时指向一个结点
- $P = Q \rightarrow next$ :将$P$赋值给$Q$的直接后继节点
- $P = P \rightarrow next$ : 将指针$P$向后移动一个位置
在指针$P$后插入指针$Q$
1
2Q -> next = P -> next;
P -> next = Q;删除指针$P$的后继节点$Q$
1
2
3Q = P -> next;
P -> next = Q -> next;
<font color = red>free(Q);</font>
二叉树(Binary Tree)
二叉树的结构体定义
1 |
|
遍历二叉树
- 先序遍历(根 - 左 - 右)
1
2
3
4
5
6
7void preOrderTraversal(TreeNode *root){
if(root != null){
cout << root -> data;
preOrderTraversal(root -> Lchild);
pretOrderTraversal(root -> Rchild);
}
} - 中序遍历(左 - 根 - 右)
1
2
3
4
5
6
7void inOrderTraversal(TreeNode *root){
if(root != null){
inOrderTraversal(root -> Lchild);
cout << root -> data;
inOrderTraversal(root -> Rchild);
}
} - 后序遍历(左 - 右 - 根)
1
2
3
4
5
6
7void postOrderTraversal(TreeNode *root){
if(root != null){
postOrderTraversal(root -> Lchild);
postOrderTraversal(root -> Rchild);
cout << root -> data;
}
}递归求二叉树深度
- 深度(最大深度)
1
2
3
4
5
6
7
8
9
10int DepthTree(TreeNode *root){
if(root == null)
return 0;
int lH = DepthTree(root -> Lchild);
int rH = DepthTree(root -> Rchild);
if(lH > rH)
return lH + 1;
else
return rH + 1;
} - 最小深度(根节点到最近叶节点的最短路径上的节点数)
1
2
3
4
5
6
7int minDepth(TreeNode *root){
if(root == null)
return 0;
int lH = minDepth(root -> Lchild);
int rH = minDepth(root -> Rchild);
return min(lH, rH) + 1;
}二叉树的最大宽度
宽度: 各层节点的个数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20int TreeWidth(TreeNode *root){
if(root == null)
return 0;
int width = 0, maxWidth = 0;
queue<BTnode*> Q;
Q.push(root);
while(!Q.empty()){
width = Q.size();
maxWidth = max(maxWidth, width);
for(int i = 0; i < width; i++){
BTnode *p = Q.front();
Q.pop();
if(p -> Lchild != null)
Q.push(p -> Lchild);
if(p -> Rchild != null)
Q.push(p -> Rchild);
}
}
return maxWidth;
}图(Graph)
结构体定义(实际题一般会给出)
- 邻接表(过于复杂,没考过)
- 邻接矩阵
1
2
3
4
5
6
7
8
bool visited[Max_Vertex];
typedef struct{
ElemType arc[Max_Vertex][Max_Vertex]; // 邻接矩阵
int numVertex, numEdge;
int GraphType; // 图的类型(0无向,1有向)
}Graph;
深度优先遍历(邻接矩阵)
1 | void DFS(Grapg G, int i){ |
广度优先遍历(邻接矩阵)
1 | queue<ElemType> Q; |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


