首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言綜合練習:陣列排序、查找、刪除與插入完整實現

     編輯:C 語言問答

C語言陣列基本操作綜合實現

在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;
}

執行流程說明

  1. 使用者輸入10個整數建立初始陣列
  2. 呼叫 sort() 進行升序排序
  3. 輸入欲查找的數值,search() 返回位置(1-based)
  4. 查找成功則呼叫 _delete() 刪除該元素,陣列長度減1
  5. 輸入新整數插入至新陣列末尾,再次排序得到最終結果

關鍵技術點

指標運算簡化陣列遍歷;函數模組化降低耦合度;陣列刪除後需手動壓縮空間;插入操作實際是建立新陣列複製舊數據再添加新元素。此程式完整展示了陣列基本操作的經典實現模式,適合初學者理解陣列記憶體管理與指標應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved