background image

数据结构

C 语言实现系列——线性表

#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
/************************************************************************/
/*                以下是关于线性表顺序存储操作的 16 种算法                        */
/************************************************************************/
struct List{
    elemType *list;
    int size;
    int maxSize;
};

void againMalloc(struct List *L)
{    
    /* 空间扩展为原来的 2 倍,并由 p 指针所指向,原内容被自动拷贝到 p 所指向的存储空

 */

    elemType *p = realloc(L->list, 2 * L->maxSize * sizeof(elemType));
    if(!p){    /* 分配失败则退出运行 */
        printf("存储空间分配失败! ");
        exit(1);
    }
    L->list = p;    /* 使 list 指向新线性表空间 */
    L->maxSize = 2 * L->maxSize;    /* 把线性表空间大小修改为新的长度 */
}

/* 1.初始化线性表 L,即进行动态存储空间分配并置 L 为一个空表 */
void initList(struct List *L, int ms)
{
    /* 检查 ms 是否有效,若无效的则退出运行 */
    if(ms <= 0){
        printf("MaxSize 非法! ");
        exit(1);    /* 执行此函数中止程序运行,此函数在 stdlib.h 中有定义 */
    }
    L->maxSize = ms;    /* 设置线性表空间大小为 ms */
    L->size = 0;
    L->list = malloc(ms * sizeof(elemType));
    if(!L->list){
        printf("空间分配失败! ");
        exit(1);
    }