1.线性表的顺序存储实现.md 2.0 KB

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

typedef int ElementType;
struct SqList {
    ElementType *Data;
    int N; /*N为表中元素个数*/
    int MaxSize;/*表的最大容量*/
};

struct SqList *CreateList(int M) {
    struct SqList *L;
    L = (struct SqList *) malloc(sizeof(struct SqList));
    if (L == NULL) {
        return NULL;
    }
    L->Data = (ElementType *) malloc(sizeof(ElementType) * M);
    if (L->Data == NULL) {
        return NULL;
    }
    L->N = 0;/*初始时元素个数为0*/
    L->MaxSize = M;
    return L;
}

int Find(struct SqList *L, ElementType X) {
    if (L == NULL) {
        return 0;
    }
    for (int i = 0; i < L->N; i++) {
        if (L->Data[i] == X) {
            return i + 1;
        }
    }
    return 0;/*如果没找到,返回-1*/
}

void Insert(struct SqList *L, int i, ElementType X) {
    if (L == NULL) {
        return;
    }
    if (L->N == L->MaxSize) {
        printf("List full.\n");
        return;
    }
    if (i < 1 || i > L->N + 1) {
        printf("illegal i\n");
        return;
    }
    for (int j = L->N - 1; j >= i - 1; j--) {
        L->Data[j + 1] = L->Data[j];
    }
    L->Data[i - 1] = X;
    L->N++;
}

void Delete(struct SqList *L, int i) {
    if (L == NULL) {
        return;
    }
    if (i < 1 || i > L->N) {
        printf("illegal i\n");
        return;
    }
    for (int j = i; j <= L->N - 1; j++) {
        L->Data[j - 1] = L->Data[j];
    }
    L->N--;
}

void PrintList(struct SqList *L) {
    if (L == NULL) {
        printf("List iS NULL\n");
        return;
    }
    printf("[");
    for (int i = 0; i < L->N; ++i) {
        if (i == L->N - 1) {
            printf("%d", L->Data[i]);
        } else {
            printf("%d, ", L->Data[i]);
        }
    }
    printf("]\n");
}

int main(void) {
    struct SqList *L = CreateList(10);
    for (int i = 0; i < 5; ++i) {
        L->Data[i] = i * 2;
        L->N++;
    }
    PrintList(L);
    int index = Find(L, 4);
    Insert(L, index, 14);
    PrintList(L);
    Delete(L, Find(L, 4));
    PrintList(L);
    free(L);
    return 0;
}