线性表

线性表

线性结构的特点

①存在唯一的一个被称作“第一个”的数据元素;

②存在唯一一个被称做“最后一个”的数据元素;

③除第一个以外,集合中的每个数据元素均只有一个前驱;

④除最后一个外,集合中每个数据元素均只有一个后继。

线性表的顺序实现

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。

顺序表特点是利用物理上的相邻关系表达出逻辑上的前驱和后继关系,要求用连续的存储单元顺序存储线性表中各元素。

线性表的优点:算法简单,存储密度大,空间单位利用效率高 ;

线性表的缺点:需要预先确定数据元素的最大个数,并且插入和删除操作时需要移动较多的数据元素。

线性表结构定义:

//----------线性表的动态分配顺序存储结构-------------------
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct{
    ElemType *elem; //存储空间基地址
    int length; //当前长度
    int listsize; //当前分配的存储容量
}SqList;

其中listsize指示顺序表当前分配的存储空间大小,一旦因插入元素而空间不足时,可进行再分配。

顺序表初始化:

Status InitList_Sq(SqList &L){
    //构造一个空的线性表
    L.elem = (Elemtype *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if(!L.elem)exit(OVERFLOW); //存储分配失败时,退出。
    L.length = 0;//空表长度为0
    L.listszie = LIST_INIT_SIZE;//初始存储容量
    return OK;
}

顺序表插入操作:

//------------顺序表插入操作--------------
Status ListInsert_Sq(SqList &L, int i, ElemType e){
//在顺序表L中第i个位置之前插入新的元素e
    if (i<1||i>L.length+1) return ERROR;
    if (L.length) >= L.listsize){
        newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
    if(!newbase)exit(OVERFLOW);
    L.elem = newbase;
    L.listszie += LISTINCREMENT;
    }
    
    q = &(L.elem[i-1]);
    for(p = &(L.elem[L.length-1]); p>=q; --p)
        *(p+1) = *p;
    *q = e;
    ++L.length;
    return OK;

}




    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值