Day 1 线性表之顺序存储
Posted Real-Ying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=(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 线性表之顺序存储的主要内容,如果未能解决你的问题,请参考以下文章