很多同學把實驗報告當成“湊 100-120 行文字”的任務,實則報告是展示實驗過程、分析問題、總結收穫的技術文檔。規範報告不僅拿高分,更能鍛煉工程文檔能力。
| 維度 | 普通報告(湊行數) | 高分報告(技術文檔) |
|---|---|---|
| 代碼呈現 | 全貼無註釋,或截圖模糊 | 關鍵模塊貼代碼,關鍵行加註釋,排版清晰 |
| 錯誤分析 | “有錯誤後改對了” | 具體現象、堆棧跟蹤、根因定位、修正前後對比 |
| 測試數據 | 一組輸出截圖 | 正常/邊界/異常多組數據表格,含預期與實際對比 |
| 圖表運用 | 無或只有運行截圖 | 流程圖、內存佈局圖、性能柱狀圖、調試器截圖 |
| 總結深度 | “學到了指針” | “理解指針是地址變量,區別於引用;掌握雙指針刪除鏈表節點技巧” |
# 實驗 3:單鏈表增刪查改綜合實現
## 1. 實驗目的
1. 掌握結構體定義與動態內存分配
2. 實現鏈表頭插/尾插/指定位置插入/刪除/查找
3. 熟練使用 VS Code + GDB 調試段錯誤
## 2. 關鍵數據結構
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
```
## 3. 核心函數簽名
```c
Node* list_insert(Node *head, int pos, int val); // 返回新頭指針
Node* list_delete(Node *head, int pos);
Node* list_find(Node *head, int val);
void list_print(Node *head);
void list_free(Node *head);
```
## 4. 測試用例表
| 編號 | 操作序列 | 預期結果 | 實際結果 | 通過 |
|------|----------|----------|----------|------|
| 1 | insert(0,10), insert(1,20), print | 10 20 | 10 20 | ✅ |
| 2 | insert(0,5), delete(0), print | 10 20 | 10 20 | ✅ |
| 3 | delete(5) (越界) | 打印錯誤不崩潰 | 打印錯誤不崩潰 | ✅ |
## 5. 遇到的問題與解決
### 問題 1:插入位置 0 時頭指針未更新
- **現象**:頭插後打印丟失新節點
- **原因**:函數內修改形參 `head` 不影響實參
- **解決**:函數返回新頭指針,調用處 `head = list_insert(head, 0, val);`
- **預防**:所有修改鏈表結構的函數均返回新頭指針
## 6. 心得
雙指針遍歷(prev/cur)是鏈表操作核心模式,需肌肉記憶。GDB `watch cur->next` 能精準定位指針篡改點。
clang-format 格式化,報告用 Markdown/LaTeX 排版,體現專業度。優秀的實驗報告 = 清晰的問題定義 + 可復現的實現過程 + 深度的錯誤復盤 + 結構化的知識內化。拒絕湊行數,從今天開始寫屬於你的技術資產。