> 文档中心 > 顺序表的实现-----增删改查

顺序表的实现-----增删改查

#include#include#define InitSize 10typedef struct {    int *data;    int MaxSize;    int length;}SqList;void InitList(SqList &L);//初始化void IncreaseSize(SqList &L, int len);//动态扩展空间bool ListInsert(SqList &L, int i, int e);//插入int GetElem(SqList L, int i);//获取某个位置的值int LocateElem(SqList L, int e);//获取某个值的位置bool ListDelete(SqList &L, int i, int e);//删除元素void ListShow(SqList L);//输出所有值int main() {    SqList L;    InitList(L);    //IncreaseSize(L, 5);    //往顺序表中插入几个元素....    bool quit = false;    while (!quit) { printf("请输入你想要的一个操作,按0退出\n"); printf("1.插入数据\n"); printf("2.删除数据\n"); printf("3.按值查找位置\n"); printf("4.按序号查找数据\n"); printf("5.扩展数组容量\n"); printf("6.查看数组\n");  int a = 0; scanf_s("%d", &a); switch (a) { case 0:     quit = true;     break; case 1: {     int i = 0;     printf("请输入你想插入的位置:");     scanf_s("%d", &i);     int e = 0;     printf("请输入你想插入的数:");     scanf_s("%d", &e);     if (ListInsert(L, i, e)) {  printf("插入成功!!!\n");     }     else {  printf("插入失败!!!\n");     }     break; } case 2: {     int i = 0;     printf("请输入你想删除的位置:");     scanf_s("%d", &i);     int e = 0;     if (ListDelete(L, i, e)) {  printf("删除成功!!!");     }     else {  printf("删除失败!!!");     }     break; } case 3: {     printf("请输入您要找的数");     int e = 0;     scanf_s("%d", &e);     printf("您要找到数的位置在%d\n", LocateElem(L, e));     break; } case 4: {     printf("请输入您要找的数的序号");     int i = 0;     scanf_s("%d", &i);     printf("您要找的序号的数是%d\n", GetElem(L, i));     break; } case 5: {     int num = 0;     printf("请输入你想扩展数组的容量:");     scanf_s("%d", &num);     IncreaseSize(L, num);     printf("当前容量为%d\n", L.MaxSize);     break; } case 6:     ListShow(L);     break; }    }}void InitList(SqList &L) {    L.data = (int *)malloc(InitSize*sizeof(int));    L.length = 0;    L.MaxSize = InitSize;}void IncreaseSize(SqList &L, int len) {    int *p = L.data;    L.data = (int *)malloc((L.MaxSize + len)*sizeof(int));    for (int i = 0; i < L.length; i++) { L.data[i] = p[i];    }    L.MaxSize = L.MaxSize + len;    free(p);}bool ListInsert(SqList &L, int i, int e) {    if (i<1 || i>L.length + 1) return false;    if (L.length >= L.MaxSize) return false;    for (int j = L.length; j > i; j--) { L.data[j] = L.data[j - 1];    }    L.data[i - 1] = e;    L.length++;    return true;}int GetElem(SqList L, int i) {    return L.data[i - 1];}int LocateElem(SqList L, int e) {    for (int i = 0; i < L.length; i++) { if (L.data[i] == e)     return i + 1;    }    return 0;}bool ListDelete(SqList &L, int i, int e) {    if (i<1 || i>L.length) return false;    e = L.data[i - 1];    printf("删除元素为%d\n", e);    for (int j = i; j < L.length; j++) { L.data[j - 1] = L.data[j];    }    L.length--;    return true;}void ListShow(SqList L) {    for (int i = 0; i < L.length; i++) { printf("data[%d]=%d\n", i, L.data[i]);    }}