2.22作业

本文详细介绍了如何在顺序表中进行按位置插入、删除、去重操作,以及清空和释放顺序表内存的函数实现,展示了基本的数据结构管理方法。

按位置插入

//按位置插入 //从第0个位置开始计数

void insert_pos(seq_p L,datatype value,int pos)

{ //1\输入合理性

if(L==NULL) { printf("入参为空,请检查\n"); return;

}

//2\判断位置合理性 if(seq_full(L)){printf("表满\n");return;}

//如果pos大于顺序标容量,肯定也满足大于表长

if(pos>L->len||pos<0) { printf("位置不合理\n"); return; }

//3\把pos开始的每个元素顺序后移

//从表中的最后一个元素开始移动 for(int i=L->len-1;i>=pos;i--) { L->data[i+1]=L->data[i]; }

//4\把元素插入

L->data[pos]=value; L->len++; }

//按位置删除
void del_pos(seq_p L,int pos)
{
    if(L==NULL){return;}
    if(seq_empty(L)){printf("表为空,无需删除\n");return;}
    //循环前移从pos+1---len-1的元素
    for(int i=pos+1;i<L->len;i++)
    {
        L->data[i-1] = L->data[i];
    }
    L->len--;
}

//顺序表去重
void del(seq_p L)
{
	if(L==NULL){return;}
	if(seq_empty(L)){return;}
	if(L->len==1){printf("只有一个元素\n");return;}
	//1\找到重复的元素
	for(int i=0;i<L->len;i++) //遍历每一个元素
	{
		//是否重复
		for(int j=i+1;j<L->len;j++)
		{
			if(L->data[j]==L->data[i])
			{
				del_pos(L,j); 
				//j+1开始的元素前移
				//原来的j+1变成j
				j--;
			}
		}
	}
}
//清空顺序表
void clean_seq(seq_p L)
{
	if(L==NULL){return;}
	L->len=0;   //直接将表长清0
}
//释放顺序表,释放申请的堆区空间
//参数是:实参的地址,是一个二级指针
void free_seq(seq_p *L)
{
	if(L==NULL||*L==NULL){return;}
	free(*L);  //释放堆区空间	
	*L=NULL;  //给主函数内指向堆区空间的实参置空
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值