数据结构】新手入门——线性表(1)

【数据结构】新手入门——线性表(1)

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

存储地址数据元素
b1
b+L2
b+(i-1)*Li
b+i*Li+1

类于此表,每个元素占用 L 个存储单元,在某个元素所对应的下一个元素的的地址即为该元素所对应地址加 L 的值。

                   p(i+1)=p(i)+L 

第n个元素所对应地址p(n)

                  p(n)=p(1)+(n-1)*L

下面,如何构建一个顺序表?
(1)定义一个结构体

typedef struct{
 elemtype *elme;//elemtype为元素类型
 int length;
 int listsize;
}SqList;

a) elem为线性表的基址;
b) length指示线性表的当前程度;
c) listsize表示的是当前分配存储空间的大小;
(2)创建一个空的顺序表

Status InitList Sq(SqList &L)
{
 L.elme=(ElemType *)malloc(ListInitSize*sizeof(ElemType));
 if(!L.elme) exit(OVERFLOW);//存储分配失败
 L.length=0;//空表长度为0
 L.listsize=ListInitSize;//初始存储容量
 return 1;
 } 

a) Status表示的是状态,即返回值类型;
b) ListInitSize为自定义的值,在函数头定义,定义格式如下:

#define ListInitSize 100

(3)向空表中插入元素

Status ListInsert(SqList &L,int i,ElemType e)       
 {
  if(i<1||i>L.length) return 0;//i值不合法
  if(L.length>=listsize{//改顺序表已满
   newbase=(ElemType *)realloc(L.elem,(L.listsize+ListInitSize)*sizeof(ElemType));//分配新的空间
   if(!newbase) exit(OVERFLOW);//分配失败
   L.elem=newbase//新基址
   L.listsize+=ListInitSize;
  } 
  q=&(L.elem[i-1]);
  for(p=&(L.elem[L.length]-1);p>=q;--p)
   *(p+1)=*p;
   *q=e;//插入元素
   ++L.length;//表长+1
   return 1; 
  
 }

(4)删除顺序表中的元素

Status DelateSq(SqList &L,int i,ElemType e)
{
 if(i<1||i>L.Length) return 0;
 p=&(L.elem[i-1]);//定位元素地址
 e=*p;
 q=L.elem+L.length-1;
 for(++p;p<=q;++p) *(p-1)=*p;
 --L.length;
 return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值