数据结构学习第一天

  线性表线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列

  线性表的结构包括顺序存储和链式存储(这次展示的是顺序存储。。。) 

//数据类型:
typedef int ElemType; typedef struct { ElemType *elem; int lenght; int listSize; //当前分配的储存容量 }SqList;
/*具体实现*/
//
线性表(顺序表的实现)初始化 Status InitList(SqList *L) { ElemType *p; p = (ElemType *)malloc(LIST_INT_SIZE * sizeof(ElemType)); if (!p) { printf("InitList Error:%d", OVERFLOW); } L->elem = p; L->lenght = 0; L->listSize = LIST_INT_SIZE; return OK; } //删除表中的数据 Status ListDelete(SqList *L,int pos,ElemType *e) { if (L->lenght <= 0)return OK; int i = 0; *e = L->elem[pos - 1] ; for (i = pos-1; i < L->lenght-1; i++) { L->elem[i] = L->elem[i + 1]; } L->lenght--; return OK; } //销毁线性表 Status DestoryList(SqList *L) { free(L->elem); L->elem = NULL; L = NULL; printf("SqList 销毁成功 !!! \n"); return OK; } Status ClearList(SqList *L) { int i = 0; for (i = 0; i < L->listSize;i++) { L->elem[i] = -1; } L->lenght = 0; return OK; } //在第i个位置插入e Status ListInsert(SqList *L, int pos, int e) { ElemType *p =NULL; //判断表是否达到上限 int i = 0; if (L->lenght >= L->listSize) { //表达到上限 扩展表 p = (ElemType *)malloc(LIST_INT_SIZE * 2 * sizeof(ElemType));//扩展原来的二倍 if (!p)return OVERFLOW; //将原先表中的数据拷贝到新表中 for (i = 0; i < L->lenght; i++) { p[i] = L->elem[i]; } //修改数据 L->listSize = 2 * LIST_INT_SIZE; L->elem = p; L->lenght++; } //添加的数据 for (i = L->lenght - 1; i >= pos - 1; i--) { L->elem[i + 1] = L->elem[i]; } L->elem[pos - 1] = e; return OK; } //测试插入元素 void test(SqList *L) { int i = 0; for (i = 0; i < 10; i++) { (*L).elem[i] = i + 1; (*L).lenght++; } } //打印 void printList(SqList L) { int i = 0; for (i = 0; i < L.lenght; i++) { printf("%d ", L.elem[i]); } printf("\n%d", L.lenght); }

测试数据:

Status main()
{
    Status flag = 0;
    SqList L;
    int i = 0;
    ElemType e;
    flag = InitList(&L);
    if(flag !=0)
    {
        printf("InitList fun Error:%d", flag);
        exit(ERROR);
    }
    test(&L);


    for (i = 0; i < 10; i++)
    {
        printf("%d  ", L.elem[i]);
    }
    printf("\n%d", L.lenght);
    printf("\n");
    flag = ListInsert(&L, 8, 111);
    if (flag != 0)
    {
        printf("ListInsert fun Error:%d", flag);
        exit(ERROR);
    }
    printList(L);
    flag = ListDelete(&L,8,&e);
    if (flag != 0)
    {
        printf("ListInsert fun Error:%d", flag);
        exit(ERROR);
    }
    printf("\n元素e:%d已被删除\n",e);
    printList(L);
    system("pause");
    return OK;
}

此顺序表还有不完善的地方,排序规则没有定义(后续会补上),如果有什么不足之处,多多指正。。。

  

猜你喜欢

转载自www.cnblogs.com/zhuangzhongliang/p/10480502.html