2delete删除
2020-05-23 本文已影响0人
定一
#include<stdio.h>
#include<malloc.h> //包含了malloc函数
#include<stdlib.h> //包含了exit函数
struct Arr
{
int *pBase; //存储数组第一个元素的地址
int len; //数组所能容纳的最大元素的个数
int cnt; //当前数组有效元素个数
};
void init_arr(struct Arr *pArr,int length); //初始化数组
bool append_arr(struct Arr *pArr,int val); //追加
bool insert_arr(struct Arr *pArr,int pos,int val);//表示下标为0的为第一个 元素,pos值从1开始,pos=4,表示在第4个元素前面插入一个值
bool delete_arr(struct Arr *pArr,int pos,int *pVal);
int get(); //获取元素值
bool is_empty(struct Arr *pArr);
bool is_full(struct Arr *pArr);
void sort_arr(); //排序
void show_arr(struct Arr *pArr); //展示
void inversion_arr(); //倒置
int main(){
struct Arr arr;
int val;
init_arr(&arr,6);
append_arr(&arr,1);
append_arr(&arr,2);
append_arr(&arr,3);
append_arr(&arr,4);
append_arr(&arr,5);
show_arr(&arr);
if(delete_arr(&arr,5,&val)){//【1】
printf("删除元素成功!\n");
printf("您删除的元素是:%d\n",val);
}else{
printf("删除失败!\n");
}
show_arr(&arr);
return 0;
}
//删除元素并返回删除元素的值
bool delete_arr(struct Arr *pArr,int pos,int *pVal){
int i;
if(is_empty(pArr))
return false;
if(pos<1||pos>pArr->cnt)
return false;
//把val的地址赋给pval,*pval就是主函数的val
*pVal=pArr->pBase[pos-1];
for(i=pos;i<pArr->cnt;++i)
{
pArr->pBase[i-1]=pArr->pBase[i];
}
pArr->cnt--;
return true;
}
image.png
delete_arr(&arr,7,&val)
image.png
【1】把val的地址发送给pVal,那么就可以把通过delete中的pVal,来修改val的值了。我们只需要把待删除元素的值,赋给pVal所指的变量就可以了。 这样就修改了主函数的值,即通过形参pval修改了val的值,然后输出val即可
本文只显示部分关键代码,详细代码,请参考上一篇文章。
参考链接:https://www.bilibili.com/video/BV11s41167h6?p=13