數組是 C 語言最基礎的數據結構,掌握其增刪改查操作是進階算法與數據結構的敲門磚。本文提供一個完整、可編譯運行的控制台程序,涵蓋隨機初始化、遍歷輸出、指定位置插入、值查找(支持重複值)、位置修改、值刪除(刪除所有匹配項)六大核心操作,並附帶詳細註釋與邊界檢查。
size 記錄當前有效長度,flag 輔助查找函數實現「查找下一個」語義。malloc(2 * size * sizeof(int)) 預留 2 倍空間,避免插入時頻繁 realloc。main 僅負責交互流程。output()void output(int *arry) {
for (int i = 0; i < size; i++) {
printf("arry[%d]=%d\t", i, arry[i]);
if ((i + 1) % 5 == 0) printf("\n"); // 每行 5 個
}
printf("\n");
}
getarry()void getarry(int *arry) {
srand(time(NULL));
for (int i = 0; i < size; i++) arry[i] = rand() % 100;
}
add()邏輯:位置合法性檢查 → 中間插入需後移元素 → 尾部插入直接賦值 → size++。
void add(int *arry, int pos, int num) {
if (pos < 0 || pos > size) { printf("只能在 0-%d 位置插入\n", size); return; }
if (pos < size) {
for (int i = size; i > pos; i--) arry[i] = arry[i - 1]; // 後移
}
arry[pos] = num;
size++;
}
search()(支持重複值迭代)設計巧思:靜態變量 pos 記錄上次位置,flag 控制是否從下一位開始,實現「查找下一個」語義。
int search(int *arry, int num) {
static int pos = 0;
if (flag) pos++;
for (; pos < size; pos++) {
if (arry[pos] == num) { flag = 0; return pos; }
}
return -1;
}
mod()void mod(int *arry, int pos, int num) {
if (pos >= 0 && pos < size) arry[pos] = num;
else printf("輸入位置錯誤\n");
}
del()(刪除所有匹配)算法:循環調用 search 找到位置 → 前移覆蓋 → size-- → 重置 flag=1 繼續找下一個。
int del(int *arry, int num) {
int count = 0, pos = 0;
pos = search(arry, num);
while (pos != -1) {
for (int i = pos; i < size - 1; i++) arry[i] = arry[i + 1];
size--; count++; flag = 1; // 設置 flag 讓 search 從下一位繼續
pos = search(arry, num);
}
return count;
}
int main() {
int *arry = NULL;
printf("輸入要產生多少個隨機數:"); scanf("%d", &size);
arry = malloc(2 * size * sizeof(int));
getarry(arry); output(arry);
int pos, num;
printf("輸入要添加的位置(0-%d):", size); scanf("%d", &pos);
printf("輸入要添加的數字:"); scanf("%d", &num);
add(arry, pos, num); output(arry);
printf("輸入要查找的數字:"); scanf("%d", &num);
pos = search(arry, num);
while (pos != -1) { flag = 1; printf("arry[%d]=%d\n", pos, num); pos = search(arry, num); }
printf("輸入要修改的位置:"); scanf("%d", &pos);
printf("輸入要修改為數字:"); scanf("%d", &num);
mod(arry, pos, num); output(arry);
printf("輸入要刪除的數字:"); scanf("%d", &num);
del(arry, num); output(arry);
free(arry); arry = NULL;
return 0;
}
gcc array_ops.c -o array_ops && ./array_opsstruct ArrayList { int *data; int size; int capacity; }。flag 機制非線程安全 → 改為返回迭代器或索引數組。ensureCapacity() 倍增擴容。void* + 比較函數指針實現類型無關。這個小程序雖簡單,但完整演示了 C 語言手動管理內存、指針算術、函數模塊化的核心技藝,是通往動態數組、鏈表、哈希表的必經之路。