Skip to content

Commit 34107f4

Browse files
Merge pull request #83 from yrt2007/main
feat: 提交了今年数据结构试卷
2 parents e722454 + 3a80f08 commit 34107f4

1 file changed

Lines changed: 132 additions & 0 deletions

File tree

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# 《数据结构与算法》2025-2026期末考试试卷
2+
> 说明:单选多选无法还原,仅参考题干与考查知识点;题目数据为现编,考点与原题一致 ——————— by 赤团开时
3+
4+
## 一、填空题(本大题共 2 小题,共 5 空,每空两分)
5+
> 考试无注释,采用类实现,代码片段仅作参考
6+
7+
### 1. 插入排序算法实现(共3空)
8+
标准插入排序代码片段,根据注释补全逻辑:
9+
```c
10+
void insertionSort(int arr[], int n) {
11+
for (int i = 1; i < n; i++) {
12+
int key = arr[i];
13+
int j = i - 1;
14+
15+
// 填空 (1):使用不等号判断,查找大于/小于已知值(key)的合适插入位置
16+
while (________________________________________) {
17+
18+
// 填空 (2):执行元素的“向后赋值”(即将当前元素后移一位)
19+
________________________________________;
20+
j--;
21+
}
22+
23+
// 填空 (3):内层循环结束后,将原空出来的关键位置赋予已知值(key)
24+
________________________________________;
25+
}
26+
}
27+
```
28+
29+
### 2. 顺序栈的 pop() 出栈操作(共2空)
30+
顺序栈出栈核心逻辑补全:
31+
```c
32+
int pop(Stack *s, int *e) {
33+
// 填空 (4):进行栈的安全检查,判断当前栈是否为空
34+
if (________________________________________) {
35+
return ERROR;
36+
}
37+
38+
*e = s->data[s->top];
39+
40+
// 填空 (5):更新栈顶指针(描述栈顶指针应当如何变化)
41+
________________________________________;
42+
43+
return OK;
44+
}
45+
```
46+
47+
## 二、简答题(本大题共 4 小题,每题十分)
48+
### 1. 循环时间复杂度推导
49+
算法循环控制变量 `i` 初始值为 `0`
50+
迭代增长规则:
51+
- 第1步:`i += 1`
52+
- 第2步:`i += 2`
53+
- 第3步:`i += 3`
54+
依次累加,终止条件 `i > n` 时退出循环。
55+
56+
要求:详细写出推导过程,给出大O时间复杂度。
57+
58+
### 2. 快速排序(Quicksort)过程演练
59+
原始无序序列:`[28, 15, 42, 9, 67, 33, 21, 54]`
60+
要求:
61+
1. 基准值选取规则:`floor((low + high) / 2)` 向下取整对应元素
62+
2. 写出每一趟 Partition 划分后的完整序列或者绘制完整递归调用树展示分治流程
63+
64+
### 3. 平衡二叉查找树(AVL 树)构建流程
65+
输入序列(从左至右依次插入空树):`[45, 12, 58, 6, 18, 52, 70, 31, 64]`
66+
要求:
67+
1. 插入失衡时,标注失衡节点、旋转类型(LL/RR/LR/RL)
68+
2. 画出每次旋转后的局部/整体树结构
69+
3. 给出最终完整平衡AVL树形态
70+
71+
### 4. Dijkstra 最短路径算法分析
72+
有向带权图邻接矩阵(∞代表无直接边):
73+
74+
| 起点 \ 终点 | A | B | C | E |
75+
| ---- | ---- | ---- | ---- | ---- |
76+
| A | 0 | 10 || 100 |
77+
| B || 0 | 50 ||
78+
| C ||| 0 | 10 |
79+
| D ||| 20 | 60 |
80+
| E |||| 0 |
81+
82+
源点指定为顶点A,要求:
83+
1. 完整求解步骤,绘制状态更新表格(记录集合S、各顶点距离动态更新)
84+
2. 输出A到其余所有顶点的最短路径与对应距离
85+
86+
## 三、代码题(本大题共 2 小题,每题十分)
87+
### 1. 单链表相邻节点成对指针翻转
88+
功能:交换第 `2i-1``2i` 个相邻节点,**仅修改指针,禁止交换节点数值**,返回新头指针。
89+
输入示例:`1 → 2 → 3 → 4 → 5`
90+
输出示例:`2 → 1 → 4 → 3 → 5`
91+
92+
节点结构体:
93+
```c
94+
struct ListNode {
95+
int val;
96+
struct ListNode *next;
97+
};
98+
```
99+
函数框架:
100+
```c
101+
struct ListNode* swapPairs(struct ListNode* head) {
102+
// 编写实现代码
103+
}
104+
```
105+
106+
### 2. 二叉树任意节点间最大路径长度
107+
功能:求二叉树内部最长路径跨度,路径不一定经过根节点。
108+
示例说明:
109+
树结构:
110+
```
111+
1
112+
/ \
113+
2 3
114+
/ \ \
115+
4 5 6
116+
```
117+
最长路径:`4 → 2 → 1 → 3 → 6`,路径长度为4。
118+
119+
节点结构体:
120+
```c
121+
struct TreeNode {
122+
int val;
123+
struct TreeNode *left;
124+
struct TreeNode *right;
125+
};
126+
```
127+
函数框架:
128+
```c
129+
int maxPathSum(struct TreeNode* root) {
130+
// 编写实现代码
131+
}
132+
```

0 commit comments

Comments
 (0)