1. 程式人生 > >C語言實現順序表

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<stdio.h>

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

&n