
按位置插入
//按位置插入 //从第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; //给主函数内指向堆区空间的实参置空
}
本文详细介绍了如何在顺序表中进行按位置插入、删除、去重操作,以及清空和释放顺序表内存的函数实现,展示了基本的数据结构管理方法。
1493

被折叠的 条评论
为什么被折叠?



