求一下C 语言编程题的过程,谢谢
根据题意,对已定义的数组空间进行删除插入操作:
1、数组非动态,需要验证数组的大小,避免数组越界,由于题目中给的函数结构不包含数组最大长度,因此需要定义全局变量保存数组的实际元素个数和数组最大长度,用于判断数组越界。
2、插入函数和删除函数,都是对数组的循环移位。其中插入函数遇到数组已满时,多余元素将被挤出数组(舍弃最后位,避免越界)。
3、如不想使用全局变量来限制数组大小,需使用malloc、realloc和free函数来定义动态数组。
下面是演示代码:
#include <stdio.h>
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<len;i++) printf("%d ",a[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;j++) a[j]=a[j+1];
len--;
return 1;
}