数据结构——顺序表的顺序存储

静态实现顺序表:(增删改查)

// 静态表的缺陷 在数组存满后无法更改
// 如果声明很大的内存空间则会造成浪费
#include<stdio.h>
 #include<stdlib.h>
 #include<stdbool.h>
 #define MaxSize 10

typedef struct 
{
    int data[MaxSize];
    int length;
}SeqList;
// init
void InitList(SeqList * L){
    L->length = 0;
    for(int i = 0;i<MaxSize;i++){
        L->data[i] = 0;
    }
}
// add
void AddList(SeqList *L){
    int flag = 1;
    printf("请输入是否需要输入数据 是则输入1 否则输入0:");
    scanf("%d",&flag);
    int i = 0;
    int e = 0;
    while (flag == 1 && L->length <= MaxSize){
        printf("请输入向线性表中传入的数据:\n");
        scanf("%d",&e);
        L->data[i] = e;
        i++;
        L->length++;
        printf("请输入是否需要输入数据 是则输入1 否则输入0:");
        scanf("%d",&flag);
    }
    if (L->length >= MaxSize){
        printf("输入数据超出线性表的最大个数,输入失败!");
    }
    printf("输入结束!");
}
// insert
// 在第i-1的位置中插入元素e
bool InsertList(SeqList*L, int i, int e){
    if (i>L->length+1 || L->length+1 > MaxSize){
        return false;
    }
    for(int j = L->length;j>=i;j--){ // 出错
        L->data[j] = L->data[j-1];
    }
    L->length++;
    L->data[i-1] = e;
    return true;
}
// delet
// 删除数据中第几个数据 并将删除的数据输出
// 输入的i为从1开始
bool DeletList(SeqList *L, int i, int *e){
    if(i>L->length)
        return false;
    *e = L->data[i-1];
    int j = 0;
    for(j = i-1;j<L->length-1;j++){ // 出错
        L->data[j] = L->data[j+1];
    }
    L->length--;
    L->data[L->length] = 0;
    return true;
}
// alter
// 将数据中第几个数据改为相应值
void AlterList(SeqList *L, int i, int e){
    L->data[i-1] = e;
}
// seek
void SeekList(SeqList *L, int i){
    printf("%d\n",L->data[i-1]);
}
// output
void OutputList(SeqList *L){
    printf("顺序表的长度为:%d\n",L->length);
    for (int i =0;i<L->length;i++){
        printf("顺序表的第%d个数为:%d\n",i+1,L->data[i]);
    }
}
int main(){
    SeqList L;
    // 2 3 4 5
    int e = -1;
    InitList(&L);
    AddList(&L);
    OutputList(&L);
    printf("----------删除操作-----------\n");
    DeletList(&L, 2, &e);
    printf("所删除的元素为:%d\n", e);
    OutputList(&L);
    printf("----------插入操作-----------\n");
    int value = 3;
    InsertList(&L, 2, value);
    OutputList(&L);
    AlterList(&L, 2, 10);
    OutputList(&L);
    SeekList(&L, 2);
    OutputList(&L);
    return 0;
}

动态实现:

# include<stdio.h>
# include<stdlib.h>
# include<stdbool.h>

# define InitSize 10

typedef struct{
    int *data; 
    int length;
    int MaxSize;
}SeqList;

void InitList(SeqList *L){
    // 使用malloc 申请一片连续的存储空间
    L->data = (int *)malloc(InitSize*sizeof(int));
    L->length = 0;
    L->MaxSize = InitSize;
}

//增加动态数组的长度
void IncreaseSize(SeqList *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);
}

int main(){
    SeqList L;
    InitList(&L);
    IncreaseSize(&L,5);
    return 0;
}




版权声明:本文为Fools_______原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>