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

C語言實現順序表完整教程:從基礎結構到增刪改查操作

     編輯:關於C語言

C語言順序表實現全攻略

順序表是數據結構中最基礎的線性表實現方式之一,它利用一段連續的內存空間依次存儲數據元素。本文將通過完整的 C 語言代碼示例,詳細講解順序表的結構定義、初始化以及增、刪、改、查等核心操作的實現邏輯,幫助你從零構建一個功能完整的順序表管理程序。

一、 順序表的結構定義

首先,我們需要定義一個結構體來封裝順序表的屬性:數據存儲數組、最大容量以及當前長度。

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100  // 定義順序表的最大容量

typedef struct List {
    int element[MAXSIZE]; // 存儲數據元素的數組
    int len;              // 當前順序表的有效長度
} List;

二、 核心功能函數實現

1. 判斷是否為空

int IsEmpty(List *L) {
    return (L->len == 0) ? 1 : 0; // 返回 1 表示空,0 表示非空
}

2. 獲取指定位置元素

void GetElement(List *L, int i) {
    if (i < 0 || i >= L->len) {
        printf("索引越界!\n");
    } else {
        printf("第 %d 個元素為: %d\n", i, L->element[i]);
    }
}

3. 尾部批量添加元素

void Add(List *L) {
    int count, i;
    printf("請輸入要添加的元素個數: ");
    scanf("%d", &count);
    
    if (L->len + count > MAXSIZE) {
        printf("剩餘空間不足,添加失敗!\n");
        return;
    }
    
    printf("請依次輸入 %d 個整數:\n", count);
    for (i = 0; i < count; i++) {
        scanf("%d", &L->element[L->len + i]);
    }
    L->len += count;
    printf("添加成功!當前長度: %d\n", L->len);
}

4. 指定位置插入元素

void Insert(List *L) {
    int pos, val;
    printf("請輸入插入位置 (0-%d) 和值: ", L->len);
    scanf("%d %d", &pos, &val);
    
    if (pos < 0 || pos > L->len || L->len == MAXSIZE) {
        printf("插入失敗:位置非法或表已滿!\n");
        return;
    }
    
    // 從末尾向前移動元素,騰出空位
    for (int i = L->len; i > pos; i--) {
        L->element[i] = L->element[i-1];
    }
    L->element[pos] = val;
    L->len++;
    printf("插入成功!\n");
}

5. 刪除指定位置元素

void Delete(List *L, int pos) {
    if (pos < 0 || pos >= L->len) {
        printf("刪除失敗:索引越界!\n");
        return;
    }
    
    // 從刪除位置開始,後續元素前移覆蓋
    for (int i = pos; i < L->len - 1; i++) {
        L->element[i] = L->element[i+1];
    }
    L->len--;
    printf("刪除成功!\n");
}

6. 修改指定位置元素

void Modify(List *L, int pos) {
    if (pos < 0 || pos >= L->len) {
        printf("修改失敗:索引越界!\n");
        return;
    }
    int newVal;
    printf("請輸入新值: ");
    scanf("%d", &newVal);
    L->element[pos] = newVal;
    printf("修改成功!\n");
}

7. 遍歷顯示所有元素

void Show(List *L) {
    if (L->len == 0) {
        printf("順序表為空。\n");
        return;
    }
    printf("當前順序表元素: ");
    for (int i = 0; i < L->len; i++) {
        printf("%d ", L->element[i]);
    }
    printf("\n");
}

8. 清空順序表

void Clear(List *L) {
    L->len = 0;
    printf("順序表已清空。\n");
}

三、 主程序與交互菜單

通過 switch-case 構建命令行交互界面,實現功能的動態調用。

int main() {
    List *L = (List *)malloc(sizeof(List));
    L->len = 0;
    
    int choice, index;
    // 初始添加一些數據
    printf("=== 順序表管理系統 ===\n");
    Add(L);
    
    while (1) {
        printf("\n******************************************************\n");
        printf(" 1.判斷是否為空  2.查詢元素  3.尾部添加  4.刪除元素\n");
        printf(" 5.指定位置插入  6.顯示所有  7.修改元素  8.清空表  0.退出\n");
        printf("******************************************************\n");
        printf("請輸入選項: ");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1: 
                printf(IsEmpty(L) ? "順序表為空\n" : "順序表非空\n"); 
                break;
            case 2:
                printf("輸入查詢索引: "); scanf("%d", &index); GetElement(L, index); break;
            case 3: Add(L); break;
            case 4:
                printf("輸入刪除索引: "); scanf("%d", &index); Delete(L, index); break;
            case 5: Insert(L); break;
            case 6: Show(L); break;
            case 7:
                printf("輸入修改索引: "); scanf("%d", &index); Modify(L, index); break;
            case 8: Clear(L); break;
            case 0: 
                free(L);
                printf("感謝使用,再見!\n");
                exit(0);
            default: printf("輸入錯誤,請重新輸入!\n");
        }
    }
    return 0;
}

四、 關鍵點總結

  • 內存連續性:順序表優點是隨機訪問快(O(1)),缺點是插入刪除需移動大量元素(O(n))。
  • 邊界檢查:所有操作必須嚴格檢查索引合法性(0 <= i < len)及容量上限(len < MAXSIZE)。
  • 動態擴展:本例使用靜態數組,實際工程中可結合 realloc 實現動態擴容。

掌握順序表的實現,是理解鏈表、棧、隊列等高級數據結構的基石。建議動手敲碼,並在調試中體會指針與數組操作的細節差異。

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