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

線性表順序存儲刪除操作完整可運行代碼:初始化、輸入、刪除、輸出一站式修正

     編輯:程式設計疑難解答

線性表順序存儲刪除操作完整可運行代碼:初始化、輸入、刪除、輸出一站式修正

原代碼存在三大邏輯錯誤:輸入先於初始化、刪除位置判斷錯誤、主函數調用順序顛倒。以下為修正後完整代碼(C++ 風格,兼容 C):

修正要點

  1. 先初始化,再輸入:InitList 分配內存並設置 length=0,隨後循環讀取數據並賦值 elem[i]、遞增 length。
  2. 刪除邏輯修正:參數 i 為 0 基索引,合法範圍 0 <= i < length;刪除 k 個元素需 i+k <= length;元素前移循環 for(j=i+k; j。
  3. 主函數流程:初始化 → 輸入 → 刪除 → 輸出。

完整可編譯代碼

#include 
#include 
using namespace std;

#define OK 1
#define ERROR 0
#define MAXSIZE 100

typedef int Status;
typedef int ElemType;

typedef struct {
    ElemType *elem;
    int length;
    int listsize;
} SeqList;

Status InitList(SeqList &L, int n = MAXSIZE) {
    if (n <= 0) n = MAXSIZE;
    L.elem = (ElemType*)malloc(n * sizeof(ElemType));
    if (!L.elem) exit(ERROR);
    L.length = 0;
    L.listsize = n;
    return OK;
}

Status DeleteK(SeqList &L, int i, int k) { // 刪除第 i 個起的 k 個元素 (0-based)
    if (i < 0 || i >= L.length || k < 0 || i + k > L.length) return ERROR;
    for (int j = i + k; j < L.length; j++)
        L.elem[j - k] = L.elem[j];
    L.length -= k;
    return OK;
}

int main() {
    SeqList La;
    InitList(La, 10);

    cout << "請輸入 10 個整數:" << endl;
    for (int i = 0; i < 10; i++) {
        cin >> La.elem[i];
        La.length++;
    }

    cout << "刪除前: ";
    for (int i = 0; i < La.length; i++) cout << La.elem[i] << ' ';
    cout << endl;

    DeleteK(La, 3, 5); // 刪除索引 3 起的 5 個元素

    cout << "刪除後: ";
    for (int i = 0; i < La.length; i++) cout << La.elem[i] << ' ';
    cout << endl;

    free(La.elem);
    return 0;
}

運行示例

輸入: 1 2 3 4 5 6 7 8 9 10
刪除前: 1 2 3 4 5 6 7 8 9 10
刪除後: 1 2 3 9 10

掌握順序表「先分配、再賦值、後移刪除」的標準流程,是數據結構考試與實戰的基礎。

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