线性表——增删改查(C语言)

#include <stdio.h>  
#include <stdlib.h>  
  
#define MAXSIZE 1024  
typedef int elemtype;  
typedef struct sequlist {  
    elemtype data[MAXSIZE];  
    int last;  
} SequenList;  
  // 初始化
SequenList *Init_SequenList() {  
    SequenList *L = (SequenList *)malloc(sizeof(SequenList));  
    if (L != NULL) {  
        L->last = -1;  
    }  
    return L;  
}  
  // 长度
int SequenList_Length(SequenList *L) {  
    return L->last + 1;  
}  
  // 获取元素值
int Get_SequenList(SequenList *L, int i) {  
    if (i < 1 || i > L->last + 1) return 0;  
    return L->data[i - 1];  
}  
  // 插入
int Insert_SquenList(SequenList *L, elemtype x, int i) {  
    if (L->last >= MAXSIZE - 1) return 0;  
    if (i < 1 || i > L->last + 2) return -1;  
    for (int j = L->last; j >= i - 1; j--) {  
        L->data[j + 1] = L->data[j];  
    }  
    L->data[i - 1] = x;  
    L->last++;  
    return 1;  
}  
  // 删除
int Delete_SequenList(SequenList *L, int i) {  
    if (i < 1 || i > L->last + 1) return -1;  
    for (int j = i; j <= L->last; j++) {  
        L->data[j - 1] = L->data[j];  
    }  
    L->last--;  
    return 1;  
}  
  // 查找
int Search_SequenList(SequenList *L, elemtype key) {  
    for (int i = 0; i <= L->last; i++) {  
        if (L->data[i] == key) return i + 1;  
    }  
    return 0;  
}  
  
void Union_SequenList(SequenList *LA, SequenList *LB) {  
    for (int i = 1; i <= LB->last; i++) {  
        elemtype lbdata = Get_SequenList(LB, i);  
        if (Search_SequenList(LA, lbdata) == 0) {  
            Insert_SquenList(LA, lbdata, LA->last + 1);  
        }  
    }  
}  
  
int main() {  
    SequenList *L = Init_SequenList();  
    int a, i, j;  
  
    printf("输入数组长度:");  
    scanf("%d", &a);  
    for (i = 0; i < a; i++) {  
        scanf("%d", &j);  
        Insert_SquenList(L, j, i + 1);  
    }  
  
    for (i = 0; i <= L->last; i++) {  
        printf("%d", L->data[i]);  
        if (i < L->last) printf(" ");  
    }  
    printf("\n");  
//   获取数据并打印
    int getData, num;  
    printf("输入数组位置:");  
    scanf("%d", &num);  
    getData = Get_SequenList(L, num);  
    printf("获取的数据: %d\n", getData);  
//   删除数据并打印
    int delData;  
    printf("请输入删除的数据位置: ");  
    scanf("%d", &delData);  
    if (Delete_SequenList(L, delData)) {  
        printf("删除成功\n");  
          printf("\n"); 
    } else {  
        printf("删除失败\n");  
          printf("\n"); 
    }  
  
    for (i = 0; i <= L->last; i++) {  
        printf("%d", L->data[i]);  
        if (i < L->last) printf(" ");  
    }  
     printf("\n");  
    // 查找数据
    printf("请输入查找的数据:");  
    scanf("%d", &num);  
    if (Search_SequenList(L, num)) {  
        printf("查找成功,第%d元素是%d:",Search_SequenList(L, num),num);  
        printf("\n"); 
    } else {  
        printf("查找失败\n");  
    }
      printf("\n"); 
    // 合并两个序列
    SequenList *L2 = Init_SequenList();  
    printf("输入数组长度:");  
    scanf("%d", &a);  
    for (i = 0; i < a; i++) {  
        scanf("%d", &j);  
        Insert_SquenList(L2, j, i + 1);  
    }  
    Union_SequenList(L, L2);  
    for (i = 0; i <= L->last; i++) {  
        printf("%d", L->data[i]);  
        if (i < L->last) printf(" ");  
    }
    // 排序联合后的个序列并打印
    for (i = 0; i <= L->last; i++) {  
        printf("%d", L->data[i]);  
        if (i < L->last) printf(" ");
    }
    printf("\n");  
    free(L);
    return 0;
}