1. 线性结构

2020-06-16  本文已影响0人  天不错啊

1 . ArrayList

// ArrarList
# include <stdio.h>

# define OK 1
# define ERROR 0
# define TRUE 1
# define FALSE 0
# define MAXSIZE 20

typedef int Status;
typedef int ElemType;
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}ArrayList;

Status InitList(ArrayList *);
Status ListEmpty(ArrayList);
Status ClearList(ArrayList *);
Status GetElem(ArrayList, int, ElemType *);
Status ListInsert(ArrayList *, int, ElemType);
Status ListDelete(ArrayList *, int, ElemType *);
void ListPrint(ArrayList);

int main(){
        ArrayList list;
        InitList(&list);

        ListInsert(&list, 1, 10);
        ListInsert(&list, 2, 20);
        ListInsert(&list, 3, 30);
        ListInsert(&list, 4, 40);
        ListPrint(list);
        printf("-----------------------\n");

        int val;
        GetElem(list, 4, &val);
        printf("%d\n", val);
        printf("-----------------------\n");

        ListDelete(&list, 3, &val);
        printf("%d\n", val);
        printf("-----------------------\n");
        ListPrint(list);
        printf("-----------------------\n");

        ClearList(&list);
        ListPrint(list);
    return 0;
}

Status InitList(ArrayList * L){
    L->length = 0;
    return OK;
}

Status ClearList(ArrayList * L){
    for (int i = 0; i < L->length; i++) {
            i[L->data] = -1;
    }
    L->length = 0;
    return OK;
}

Status GetElem(ArrayList L, int i, ElemType * e){
    if(L.length == 0 || i < 1 || i > L.length){
        return ERROR;
    }

    *e = L.data[i-1];
    return OK;
}

Status ListInsert(ArrayList * L, int i, ElemType e){
    if(L->length == MAXSIZE){
        return ERROR;
    }

    if(i < 1 || i > L->length + 1){
        return ERROR;
    }

    // 从List尾 往i 移动交换位置
    if(i <= L->length){
        for(int k = L->length-1; k >= i - 1; k--){
            L->data[k+1] = L->data[k];
        }
    }
    L->data[i-1] = e;
    L->length++;

    return OK;
}

Status ListDelete(ArrayList * L, int i, ElemType * e){
    if(L->length == 0){
        return ERROR;
    }

    if(i < 1 || i > L ->length){
        return ERROR;
    }

    *e = L->data[i-1];
    if(i < L->length){
        for(int k = i; k < L->length; k++){
            L->data[k-1] = L->data[k];
        }
    }
    L->length--;
    return OK;
}


void ListPrint(ArrayList L){
    for (int i = 0; i < L.length; i++) {
        printf("%d ", i[L.data]);
    }
    printf("\n");
}

上一篇 下一篇

猜你喜欢

热点阅读