数据结构复习代码——线性表结构体定义,线性表动态内存分配的初始化以及元素插入

//-----线性表的动态分配顺序存储结构
#define LIST_INIT_SIZE  100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10    //线性表存储空间的分配增量
typedef struct {
    int *elem;              //存储空间基地址
    int length;             //当前长度
    int listsize;           //当前分配的存储容量
}SqList;

//线性表的初始化
int InitList_Sq(SqList &L){
    //构造空的线性表L
    L.elem = (int*)malloc(LIST_INC_SIZE*sizeof(int));   //为该线性表分配内存空间
    if(!L.elem) exit(-1);               //存储分配失败
    L.length = 0;                       //空线性表长度为0
    L.listsize = LIST_INIT_SIZE;        //初始存储容量
    return 1;
}//InitList_Sq

//线性表在第i个位置之前插入新元素
int ListInsert_Sq(SqList &L,int i,int e)
{
    //首先判断插入位置i的值是否合法
    if(i<1||i>L.length+1)   return -1;  //i值非法
    if(L.length>=L.listsize){
        //当前存储空间已满,为该线性表分配新的内存空间
        newbase = (int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
        if(!newbase) exit(-1);  //该磁盘存储空间已满,无法为该线性表分配新的内存空间
        //分配成功,将新分配的内存空间的首址赋值给该线性表的首址
        L.elem = newbase;
        //增加存储容量
        L.listsize += LISTINCREMENT;
    }
    q = &(L.elem[i-1]);     //q为插入的位置
    //将i元素之后的元素向后移
    for(p = &(L.elem[L.length-1]);p>=q;--p)
        *(p+1) = *p;
    *q = e;     //插入e
    ++L.length; //表长加一
    return 1;
}

 

posted @ 2022-06-18 19:12  往心。  阅读(106)  评论(0编辑  收藏  举报