在C語言學習中,掌握一維陣列的排序、查找、刪除與插入操作是基礎也是關鍵。本文將展示如何在一個程式中完整實現這四大核心功能,並透過模組化函數設計提升程式碼的可讀性與可維護性。
程式採用主函數呼叫四個獨立功能函數的方式:
sort():選擇排序法實現陣列升序排列search():線性查找指定元素並返回位置_delete():刪除指定值的元素並壓縮陣列#include <stdio.h>
#define N 10
// 函數聲明
int sort(int *x, int n);
int search(int *a, int n, int x);
int _delete(int *a, int n, int x);
int main() {
int a[N], b[N], i, number, m, t1, t2;
int *p1 = a, *p2 = b;
// 1. 輸入10個整數
printf("請向陣列輸入10個整數: ");
for(i = 0; i < N; i++) scanf("%d", p1++);
// 2. 排序
p1 = a;
sort(p1, N);
printf("排序後的陣列: ");
for(p1 = a; p1 < a + N; p1++) printf("%5d", *p1);
printf("\n");
// 3. 查找
printf("輸入要查找的數: ");
scanf("%d", &number);
t1 = search(a, N, number);
if(t1 == 0) {
printf("查找失敗,無法刪除!\n");
} else {
// 4. 刪除
t2 = _delete(a, N, t1);
printf("元素 %d 已刪除,新陣列: ", t2);
for(i = 0; i < N - 1; i++) printf("%5d ", a[i]);
printf("\n");
// 5. 插入
printf("請插入一個整數 m: ");
scanf("%d", &m);
for(i = 0; i < N - 1; i++) b[i] = a[i];
b[N - 1] = m;
sort(b, N);
printf("最終陣列: ");
for(i = 0; i < N; i++) printf("%5d", b[i]);
}
return 0;
}
// 選擇排序實現
int sort(int *x, int n) {
int i, j, k, temp;
for(i = 0; i < n - 1; i++) {
k = i;
for(j = i + 1; j < n; j++)
if(*(x + j) < *(x + k)) k = j;
if(k != i) {
temp = *(x + k);
*(x + k) = *(x + i);
*(x + i) = temp;
}
}
return 0;
}
// 線性查找
int search(int *a, int n, int x) {
int i, pos = 0;
for(i = 0; i < n; i++) {
if(a[i] == x) {
pos = i + 1; // 位置從1開始
printf("%d 已找到,位置: %d\n", x, pos);
break;
}
}
if(pos == 0) printf("查找失敗\n");
return pos;
}
// 刪除元素並壓縮陣列
int _delete(int *a, int n, int pos) {
int i, j = 0, val = a[pos - 1];
for(i = 0; i < n; i++)
if(i != pos - 1) a[j++] = a[i];
a[j] = '\0';
return val;
}
sort() 進行升序排序search() 返回位置(1-based)_delete() 刪除該元素,陣列長度減1指標運算簡化陣列遍歷;函數模組化降低耦合度;陣列刪除後需手動壓縮空間;插入操作實際是建立新陣列複製舊數據再添加新元素。此程式完整展示了陣列基本操作的經典實現模式,適合初學者理解陣列記憶體管理與指標應用。