1. 程式人生 > >順序表的刪除操作原理及C語言完整實現

順序表的刪除操作原理及C語言完整實現

前面講過,順序表的實現使用的是陣列,換句話說,順序表中刪除元素問題可以轉換成如何在陣列中實現刪除元素的操作。

在陣列中刪除元素時,只需將該元素所在位置後的所有資料元素整體前移 1 個位置即可。因為前移的過程中,被刪除元素會被後一個元素覆蓋掉,間接實現了刪除元素的目的。

實現程式碼:
table delTable(table t,int add){
    if (add>t.length || add<1) {
        printf("被刪除元素的位置有誤");
        exit(0);
    }
    //刪除操作
    for (int i=add; i<t.length; i++) {
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}


完整程式如下(可根據實際需要適當更改程式碼):

#include <stdio.h>
#include <stdlib.h>
#define Size 4
typedef struct Table{
    int * head;
    int length;
    int size;
}table;

table initTable(){
    table t;
    t.head=(int*)malloc(Size*sizeof(int));
    if (!t.head)
    {
        printf("初始化失敗");
        exit(0);
    }
    t.length=0;
    t.size=Size;
    return t;
}
table delTable(table t,int add){
    if (add>t.length || add<1) {
        printf("被刪除元素的位置有誤");
        exit(0);
    }
    for (int i=add; i<t.length; i++) {
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}
void displayTable(table t){
    for (int i=0;i<t.length;i++) {
        printf("%d",t.head[i]);
    }
    printf("\n");
}
int main(){
    table t1=initTable();
    for (int i=1; i<=Size; i++) {
        t1.head[i-1]=i;
        t1.length++;
    }
    printf("原順序表:\n");
    displayTable(t1);
   
    printf("刪除元素1:\n");
    t1=delTable(t1, 1);
    displayTable(t1);
    return 0;
}
輸出結果:
原順序表:
1234
刪除元素1:
234