C语言实现顺序表

大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解数组与结构体的运用。废话不多说,上代码!

结构体

typedef struct {
    int *data;
    int Maxsz;
    int len;
    
} SeqList;

初始化

void InitList (SeqList *L, int maxsz) {//初始化 
    L->Maxsz = maxsz;
    L->data = (int*)malloc(sizeof(int)*maxsz);//动态分配存储空间,相当于 new
    L->len = 0;
}

增删改查插

int AddList(SeqList *L, int x) { //增加
    if(L->len >= L->Maxsz) {
        return 0;
    }
    L->data[L->len] = x;
    L->len++;
    return 1;
}

int DelList(SeqList *L, int index) {//删除
    if(index >= L->Maxsz) {
        return 0;
    }
    int  i=0;
    for(i = index; i < L->Maxsz; i++) {
        L->data[i] = L->data[i+1];
    }
    L->len--;
    return 1;
}

int Update(SeqList *L, int oldda, int newda) {//修改
    int i,flag = 0;
    for(i = 0; i < L->Maxsz; i++) {
        if(L->data[i] == oldda) {
            flag = 1;
            break;
        }
    }
    if(flag == 1) {
        L->data[i] = newda;
        return 1;
    } else {
        return 0;
    }
}

int Insert(SeqList *L, int index, int data) { //插入1
    int i;
    int len = L->len - 1;
    if(len+1 > L->Maxsz) {
        return 0;
    }
    for(i = len; i >= index; i--) {
        L->data[i+1] = L->data[i];
    }
    L->data[index] = data;
    L->len++;
    return 1;
}

int InsertList(SeqList *L, int index, int data) {//插入2
    int i;
    if(index < 0 || index > L-> len - 1) {
        return 0;
    }
    if(L->len == L->Maxsz) {
        return 0;
    }
    for(i=L->len-1; i>=index; i--){
        L->data[i+1] = L->data[i];
    }
    L->data[index] = data;
    L->len++;
    return 1;
}

还有一些小方法,销毁,取长,清空

void DestoryList(SeqList *L) {//销毁顺序表 
    free(L->data);
}

int ListLength(SeqList *L) {//获取长度 
    return L->len;
}

void ClearList(SeqList *L) {//清空顺序表 
    L->len=0;
}

全部代码

#include

typedef struct {
    int *data;
    int Maxsz;
    int len;
    
} SeqList;

void DestoryList(SeqList *L) {//销毁顺序表 
    free(L->data);
}

int ListLength(SeqList *L) {//获取长度 
    return L->len;
}

void ClearList(SeqList *L) {//清空顺序表 
    L->len=0;
}

void InitList (SeqList *L, int maxsz) {//初始化 
    L->Maxsz = maxsz;
    L->data = (int*)malloc(sizeof(int)*maxsz);//动态分配存储空间,相当于 new
    L->len = 0;
}

int AddList(SeqList *L, int x) { //增加
    if(L->len >= L->Maxsz) {
        return 0;
    }
    L->data[L->len] = x;
    L->len++;
    return 1;
}

int DelList(SeqList *L, int index) {//删除
    if(index >= L->Maxsz) {
        return 0;
    }
    int  i=0;
    for(i = index; i < L->Maxsz; i++) {
        L->data[i] = L->data[i+1];
    }
    L->len--;
    return 1;
}

int Update(SeqList *L, int oldda, int newda) {//修改
    int i,flag = 0;
    for(i = 0; i < L->Maxsz; i++) {
        if(L->data[i] == oldda) {
            flag = 1;
            break;
        }
    }
    if(flag == 1) {
        L->data[i] = newda;
        return 1;
    } else {
        return 0;
    }
}

int Insert(SeqList *L, int index, int data) { //插入1
    int i;
    int len = L->len - 1;
    if(len+1 > L->Maxsz) {
        return 0;
    }
    for(i = len; i >= index; i--) {
        L->data[i+1] = L->data[i];
    }
    L->data[index] = data;
    L->len++;
    return 1;
}

int InsertList(SeqList *L, int index, int data) {//插入2
    int i;
    if(index < 0 || index > L-> len - 1) {
        return 0;
    }
    if(L->len == L->Maxsz) {
        return 0;
    }
    for(i=L->len-1; i>=index; i--){
        L->data[i+1] = L->data[i];
    }
    L->data[index] = data;
    L->len++;
    return 1;
}

void display(SeqList *L) {//显示 
    int i;
    for(i=0; i < L->len; i++) {
        printf("%d\n", L->data[i]);
    }
}

int main() {
    SeqList sl;

    InitList(&sl, 6);

    AddList(&sl,0);
    AddList(&sl,1);
    AddList(&sl,2);
    AddList(&sl,3);
    AddList(&sl,5);

    Insert(&sl,4,4);
    //AddList(&sl,5);
    //Update(&sl, 5, 6);
    //DelList(&sl,4);

    display(&sl);
    return 0;
}
View Code

 

你可能感兴趣的:(C语言实现顺序表)