2021-10-15

线性表的顺序存储

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--;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值