根据题意,对已定义的数组空间进行删除插入操作:
1、数组非动态,需要验证数组的大小,避免数组越界,由于题目中给的函数结构不包含数组最大长度,因此需要定义全局变量保存数组的实际元素个数和数组最大长度,用于判断数组越界。
2、插入函数和删除函数,都是对数组的循环移位。其中插入函数遇到数组已满时,多余元素将被挤出数组(舍弃最后位,避免越界)。
3、如不想使用全局变量来限制数组大小,需使用malloc、realloc和free函数来定义动态数组。
下面是演示代码:
#include
int *Get_elem(int a[],int i);//返回数组a中第i个元素,成功返回元素地址,失败返回NULL
int Insert_elem(int a[],int i,int x);//在a中第i个位置插入数值x。成功返回1,失败返回0
int Del_elem(int a[],int i);//删除a中第i个元素,成功返回1,失败返回0
void showArr(int a[]);
int size;//数组最大长度
int len=0;//数组a元素个数
int main()
{
int i,x,a[10]={1,2,3,4,5,6,7,8,9};//初设a数组有9个元素,最大长度10
size=10,len=9;
printf("初始数组最大长度%d,实际存储有效元素个数%d,内容为:\n",size,len);
showArr(a);
printf("\n"),i=11;
printf("获取第%d个元素的值为:%d\n",i,Get_elem(a,i)!=NULL?*Get_elem(a,i):-1);
printf("\n"),i=8;
printf("获取第%d个元素的值为:%d\n",i,Get_elem(a,i)!=NULL?*Get_elem(a,i):-1);
printf("\n"),i=3,x=11;
if(Insert_elem(a,i,x)) printf("在数组a中第%d个位置插入数值%d后数组变为:\n",i,x);
showArr(a);
printf("\n"),i=1,x=33;
if(Insert_elem(a,i,x)) printf("在数组a中第%d个位置插入数值%d后数组变为:\n",i,x);
showArr(a);
printf("\n"),i=5;
if(Del_elem(a,i)) printf("删除数组a中第%d个元素后数组变为:\n",i);
showArr(a);
return 0;
}
void showArr(int a[])
{
int i;
for(i=0;i printf("\n"); } int *Get_elem(int a[],int i) { if(i>size) { printf(" 错误:数组访问越界!\n"); return NULL; } return &a[i-1]; } int Insert_elem(int a[],int i,int x) { int j; if(i>size) { printf(" 错误:数组访问越界!\n"); return 0; } if(len==size) { printf("数组空间已满,继续插入,最后一个元素将被顶出数组\n"); for(j=len-1;j>=i;j--) a[j]=a[j-1]; } else { for(j=len;j>=i;j--) a[j]=a[j-1]; len++; } a[i-1]=x; return 1; } int Del_elem(int a[],int i) { int j; if(i>size) { printf(" 错误:数组访问越界!\n"); return 0; } for(j=i-1;j len--; return 1; }