数据结构 线性表

本文介绍了数据结构中线性表的概念及其顺序存储结构。详细讲述了线性表的初始化、插入及删除等基本操作,并提供了具体的实现代码。

     数据结构  在丢了一年多再度捡起,觉得数据结构还是很重要。所以重新再来翻翻,希望可以收获一些不一样的东西,就当作是总结。也希望借此可以向大家多多学习。如有错误,希望指证!

     首先从线性表讲起,顾名思义。线性表具有线性的特征(可以用离散里的反对称解释),就是说各元素之间是有先后顺序的。在线性表中,除了第一个元素,每个元素都有唯一前驱。除了最后一个元素外,每个元素都有唯一后继。而且只有一个被称为“第一个”的数据元素,和存在唯一被称作“最后一个”的数据元素。其实线性表有两种存储结构,一种是顺序存储,一种是链式存储。顺序存储跟数组类似,可以随机存取第i个数据元素。

        首先介绍线性表顺序存储的基本操作:

    #define  INIT_SIZE_LINKLIST   100

    #define  sizeincreament   10

    #define  ok  1

    #define  error 0

    #define  overflow  -1

    typedef struct{
        int *elem; //存储空间基址
        int length; //当前长度
       int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

 status InitList(Sqlist &L) 

{//线性表的初始化

      L.elem = (int *) malloc(INIT_SIZE_LINKLIST*sizeof(int));

     if(!L.elem)  return (overflow);  //存储分配失败

         L.length = 0; //空表长度为0
      L.listsize = INIT_SIZE_LINKLIST;//初始存储容量
      return OK;

 }

status listinsert(sqlist &L,int i,int &e)

{//线性表的插入操作,在第i个位置前插入元素e.

      if(i<1||i>L.lenghth+1) return error;//i 的合法值1<=i<=length+1

     if(L.length>=L.listsize) {//说明线性表已满需要增加空间

     int *newbase;//新的基地址

     newbase = (int *)realloc(newbase,(listsize+listincreament)*sizeof(int));

    if(!newbase)  return (overflow);//存储分配失败

     L.elem = newbase;//把新的基地址赋给之前的基地址

     listsize += listincreament;//大小以及改变,加上新的空间

    }

     int *q = &(L.elem[i-1]);//把第i个元素的地址赋给一个指针变量q

     int *p;

     for(p = &(L.elem[L.length-1]);p>=q;--p) *(p+1) = *p;

     *q = e;

     ++L.length;

     return ok;

}

status ListDelet(sqlist &L,int i,int &e)

{//删除第i个元素,用e返回。

     if(i<1||i>L.length+1) return error;

     int *p = &(L.elem[i-1]);

     e = *p;//被删除元素赋给e

    int *q = L.elem+L.length-1;

    for(++p;p<=q;++p) *(p-1) = *p;//被删除元素之后的元素左移

   --L.length;

   return ok; 

}

更新。。中。。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值