阅读:0       作者:严长生

顺序表的删除操作原理及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