本文展示線性表陣列實現的早期原型版本,僅包含初始化、追加、插入、遍歷、判空等核心骨架,刪除、排序、倒置等功能待補全。代碼結構與完整版一致,適合對比學習功能迭代過程。
struct Arr {
int *pBase; // 動態陣列首址
int len; // 容量
int cnt; // 當前元素數
};
// 函數聲明(部分未實現)
void init_arr(struct Arr *pArr, int length);
bool append_arr(struct Arr *pArr, int val);
bool insert_arr(struct Arr *pArr, int index, int val);
// bool delete_arr(); // 未實現
// int get(); // 未實現
bool is_empty(struct Arr *pArr);
// bool is_full(); // 未實現
// void sort_arr(); // 未實現
void show_arr(struct Arr *pArr);
// void inversion_arr(); // 未實現
void init_arr(struct Arr *pArr, int length) {
pArr->pBase = (int *)malloc(sizeof(int) * length);
if (NULL == pArr->pBase) {
printf("動態記憶體分配失敗!\n");
exit(-1);
}
pArr->len = length;
pArr->cnt = 0;
}
bool append_arr(struct Arr *pArr, int val) {
if (pArr->cnt < pArr->len) {
pArr->pBase[pArr->cnt] = val;
(pArr->cnt)++;
return true;
}
printf("陣列已滿\n");
return false;
}
bool insert_arr(struct Arr *pArr, int index, int val) {
if (pArr->cnt < pArr->len && index <= pArr->cnt) {
for (int i = pArr->cnt - 1; i >= index - 1; i--) {
pArr->pBase[i + 1] = pArr->pBase[i];
}
pArr->pBase[index - 1] = val;
(pArr->cnt)++;
return true;
}
printf("插入失敗\n");
return false;
}
void show_arr(struct Arr *pArr) {
if (is_empty(pArr)) { printf("陣列為空\n"); return; }
for (int i = 0; i < pArr->cnt; i++) printf("%d", pArr->pBase[i]);
}
bool is_empty(struct Arr *pArr) {
return pArr->cnt == 0;
}
int main(void) {
struct Arr arr;
init_arr(&arr, 6);
append_arr(&arr, 3);
append_arr(&arr, 2);
append_arr(&arr, 9);
insert_arr(&arr, 2, 7); // 第2位插入7
show_arr(&arr); // 輸出: 3729
return 0;
}
| 功能 | 本版本 | 完整版 (ID:198338) |
|---|---|---|
| 刪除元素 | ❌ 僅聲明 | ✅ 完整實現 |
| 獲取元素 | ❌ 僅聲明 | ✅ 實現 get() |
| 判斷已滿 | ❌ 僅聲明 | ✅ 實現 is_full() |
| 排序 | ❌ 僅聲明 | ✅ 直接插入排序 |
| 倒置 | ❌ 僅聲明 | ✅ 實現 inversion_arr() |
| 代碼規範 | HTML 實體編碼殘留 | 純代碼可直接編譯 |
此版本記錄了從介面設計到核心邏輯落地的演進過程,是「由簡入繁」學習資料結構實作的優秀樣本。