顺序表

作者: qianranow | 来源:发表于2021-03-20 18:42 被阅读0次

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

#define InitSize 10

typedef struct {
    int *data;
    int length;
    int maxSize;
} SqList;

int InitList(SqList *l) {
    int *data = (int *)malloc(InitSize*sizeof(int));
    if (data == NULL) return -1;
    l->data = data;
    l->length = 0;
    l->maxSize = InitSize;
    return 1;
}

int IncreaseSize(SqList *l, int len) {
    int *p = l->data;
    int *data = (int *)malloc((l->maxSize+len)*sizeof(int));
    if (data == NULL) return -1;
    for (int i = 0; i < l->maxSize; i++) {
        data[i] = p[i];
    }
    l->data = data;
    l->maxSize += len;
    free(p);
    return 1;
}

int ListInsert(SqList *l, int i, int e) {
    if (l->length == l->maxSize) return -1;
    if (i < 1 || i > l->length + 1) return -1;
    for (int j = l->length; j >= i; j--) {
        l->data[j] = l->data[j-1];
    }
    l->data[i-1] = e;
    l->length++;
    return 1;
}

int ListDelete(SqList *l, int i, int *e) {
    if (l->length == 0) return -1;
    if (i < 1 || i > l->length) return -1;
    *e = l->data[i-1];
    for (int j = i; j < l->length; j++) {
        l->data[j-1] = l->data[j];
    }
    l->length--;
    return 1;
}

int GetElem(SqList *l, int i) {
    if (i < 1 || i > l->length) return -1;
    return l->data[i-1];
}

int LocateElem(SqList *l, int e) {
    for (int i = 0; i < l->length; i++) {
        if (l->data[i] == e) return i+1;
    }
    return -1;
}

int Length(SqList l) {
    return l.length;
}

void ListPrintf(SqList l) {
    for (int i = 0; i < l.length; i++) {
        printf("%i\n", l.data[i]);
    }
}

int Empty(SqList l) {
    return l.length == 0 ? 1 : -1;
}

void DestroyList(SqList *l) {
    free(l->data);
    l->data = NULL;
    l->length = 0;
    l->maxSize = 0;
}

// 分割线
void Sep() {
    printf("**************\n");
}

int main() {
    SqList l;
    InitList(&l);
    ListInsert(&l, 1, 1);
    ListInsert(&l,2, 12);
    ListInsert(&l,1, 13);
    ListPrintf(l);
    Sep();
    int e = -1;
    ListDelete(&l, 1, &e);
    printf("%i\n", e);
    Sep();
    ListPrintf(l);
    Sep();
    printf("%i\n", GetElem(&l, 2));
    printf("%i\n", LocateElem(&l, 1));
    printf("%i\n", Length(l));
    Sep();
    DestroyList(&l);
    printf("%p\n", l.data);
    printf("%i\n", Empty(l));
    return 0;
}

相关文章

  • 数据结构与算法(二,线性表的顺序存储结构,穷举法(冒泡和选择排序

    线性表 顺序表 顺序表的特性 顺序表的元素有前驱和后继 顺序表有size 顺序表的增删改查 顺序表的优缺点优点:尾...

  • 顺序表-动态顺序表

    顺序表是逻辑上相邻的元素物理也相邻的。 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时...

  • 顺序表-静态顺序表

    线性表,全名为线性存储结构。将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构(...

  • 线性表之顺序存储-顺序表

    顺序表的操作 [x] 向有序顺序表插入一个元素 [x] 顺序表的冒泡排序 [x] 顺序表的删除操作 [x] 顺序表...

  • 数据结构之线性表

    1、线性表-顺序表线性表-顺序表

  • 线性表-顺序表与单链表

    顺序表 线性表的顺序存储,是逻辑相邻,物理存储地址也相邻。 结构定义 顺序表的初始化 顺序表的插入 顺序表的取值 ...

  • 顺序表和链表的区别

    参考:线性表和链表的区别 注:参考文中的‘线性表’准确的说应该是’顺序表‘,链表与顺序表都是线性表。 顺序表:顺序...

  • 快速理解数据结构中链表

    组织数据作用的线性表分为顺序表和链表 顺序表:平常所使用的各类数组均为顺序表,即存储逻辑顺序和物理顺序相同。较常见...

  • 顺序表

    在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传...

  • 顺序表

    https://blog.csdn.net/qq_41943578/article/details/82934644

网友评论

      本文标题:顺序表

      本文链接:https://www.haomeiwen.com/subject/jkwwcltx.html