顺序表 c语言实现

#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
#define ElemType char

typedef struct
{
    ElemType* elem;
    int length;
} SqList;

//初始化
SqList InitList()
{
    SqList L;
    L.elem = malloc(MAXSIZE*sizeof(ElemType));
    if (!L.elem) {
        printf("内存不足!");
    }
    L.length = 0;
    return L;
}

//取值
ElemType GetElem(SqList* L, int i)
{
    if (i<1 || i>L->length) {
        printf("参数错误!\n");
        return NULL;
    }
    return L->elem[i - 1];
}

/*查找
 * @return 查找失败返回0,成功返回元素序号加一
 */
int LocateElem(SqList* L, ElemType e)
{
    for (int i = 0; i < L->length; i++)
        if (L->elem[i] == e) return i + 1;
    return 0;
}

//插入
void ListInsert(SqList* L, int i, ElemType e)
{
    if (i < 1 || (i > L->length + 1)) {
        printf("参数错误!\n");
        return NULL;
    }
    if (L->length == MAXSIZE) {
        printf("内存已满!\n");
        return NULL;
    }
    for (int j = L->length - 1; j >= i - 1; j--)
        L->elem[j + 1] = L->elem[j];
    L->elem[i - 1] = e;
    L->length++;
}

//删除
void ListDelete(SqList* L, int i) 
{
    if (i<1 || i>L->length) {
        printf("参数错误");
        return NULL;
    }
    for (int j = i; j < L->length; j++)
        L->elem[j - 1] = L->elem[j];
    L->length--;
}

//打印
void ListPrint(SqList* L)
{
    for (int i = 0; i < L->length; i++)
        printf("%c ",L->elem[i]);
}

测试

int main() {
    SqList L = InitList();
    ListInsert(&L, 1, 'A');
    ListInsert(&L, 2, 'B');
    ListInsert(&L, 2, 'C');
    ListDelete(&L, 2);
    ListPrint(&L);
    printf("%d ", LocateElem(&L,'B'));
}
//out: A B 2

留下你的评论