首页 > 代码库 > Day 1 线性表之顺序存储

Day 1 线性表之顺序存储

逻辑结构

具有相同数据类型的n个数据元素的有序,有限集。

1.集合中必存唯一 第一元素 和 最后元素

2.除 第一元素 和 最后元素外,均有唯一前驱和后继。

存储结构

用一组地址连续的存储单元以此存放线性表中的数据元素。

LOC(ai)= LOC(ai-1) + sizeof

LOC(ai)= LOC(a1) +(i-1)×sizeof

*sizeof是每个数据元素所占存储空间大小

*线性表中元素位序从一开始,数组从0开始

表示方法

静态

1 #define MaxSize 50                   //最大长度
2 typedef struct{
3        ElemType data[MaxSize];       //数据元素
4        int length;                   //当前长度
5 }SqList                              //顺序表类型

 

动态

1 #define InitSize 50              //初始长度
2 typedef struct{                     
3        ElemType *data;           //动态分配地址的指针
4        int length,MaxSize;       //当前长度和最大容量
5 }SqList                          //顺序表类型

初始动态分配语句

L.data=http://www.mamicode.com/(elemsize*)malloc(sizeof(elemtype)*InitSize)
//其中elemtype均为类型,sizeof为一个所占空间,InitSize为初始长度

 

基本操作1:插入

 1 bool ListInsert(SqList &L,int i,Elemtype e){
 2 if (i<1 || i>L.length+1)
 3       return false;
 4 if(L.length>=MaxSize)
 5       return false;
 6 for(int j = L.length;j>=i;j--)  //将i及之后元素后移
 7       L.data[j] = L.data[j-1];  //j是长度,而数组从0开始,比下表多1
 8 L.data[i-1] = e;                  
 9 L.length++;                         
10 return true;}

 

基本操作2:删除

删除第i个元素,成功返回true,并把被删元素用e返回,否则返回false

1 bool ListDelete(SqList &L;int i;int &e){
2 if(i<1||i>L.length)
3     return false;
4 e = L.data[i-1];          //第i个元素的数组下标就是i-1
5 for(int j=i;j<L.length;j++)     //i之后元素前移
6       L.data[j-1]=L.data[j];
7 L.length--;
8 return true;}

 

基本操作3:按值查找(顺序查找)

查找第一个值等于e的元素,并返回其位序,否则返回false

1 int LocateElem(SqList L,ElemType e){
2 for(int i=0;i<L.length;i++)
3       if(L.data[i]==e)
4            return i+1;    //下标为i,位序为i+1
5       else
6            return false;}

 

Day 1 线性表之顺序存储