线性表的顺序存储
1、特点
- 线性表的顺序存储中,逻辑上相邻的数据元素在物理位置上也是相邻的
- 可随机存取
2、顺序存储结构示意图
3、顺序存储时,线性表的插入和删除
4、插入算法
原理:在第i个元素之前插入一个元素(1<=i<=n),先要将第n至第i(共n-i+1)个元素向后移一个位置
Status ListInsert(SqList &L,int i,ElemType){
int j;
//顺序线性表已经满了,增加分配
if(L->length>=MAXSIZE){
//对全局变量存储基址进行扩增
if(!newNode){
return ERROR;
}
//对存储容量进行++;
}
//当i不在范围内
if(i<1||i>L->length+1){
return ERROR;
}
//若插入数据位置不在表尾
if(i<=L->length){
//将要插入位置后的元素往后挪一位
for(k=L->length-1;k>=i-1;k--){
L->data[k+1]=L->data[k];
}
}
//将新元素插入
L->data[i-1]=e;
L->length++;
return OK;
}
5、删除算法
原理:删除第i个元素(1<=i<=n)时,先将i+1到n个元素依次往前移一个位置
Status ListDelete(SqList &L,int i,ElemType){
//删除第i个元素,用e返回其值
//1<=i<=ListLength 合法
//当i不在范围内
if(i<1||i>L.length){
return ERROR;
}
p=&(L.elem[i-1]);
e=&p;//取值
q=L.elem+L.length-1; //表尾元素位置
for(++p;p<=q;++p){
*(p-1)=*p;//往前挪一位
}
--L.length;
return OK;
}
6、两个递增顺序表合并为递增顺序表
if(*pa<=*pb){
*pc++=*pa++;
}else{
*pc++=*pb++;
}
while(pa<=la_last){
*pc++=*pa++;//插入la的剩余元素
}
while(pb<=lb_last){
*pc++=*pb++;//插入lb的剩余元素
}
7、两个递增顺序表合并为递减顺序表
lc->length=la->length+lb->length;
int i=la->length-1;//la的末位置
int j=lb->length-1;//lb的末位置
int k=0;//lc的初始位置
while(i>=0&&j>=0){
if(la->elem[i]>=lb->elem[j]){
lc->elem[k++]=la->elem[i];
i--;
}else{
lc->elem[k++]=lb->elem[j];
j--;
}
}
//如果还有元素,依次赋值给lc
while(i>=0){
lc->elem[k++]=la->elem[i];
i--;
}
while(j>=0){
lc->elem[k++]=lb->elem[j];
j--;
}