标签:
1、删除指定位置上的数据;
问题及答案:
/*删除指定位置上的数据*/
#include<stdio.h>
#define SIZE 100 //定义一个字符常量
int deletedate(int[],int,int); //声明一个删除函数
int n=10; //数组中实际有用的数据
int main()
{
int a[SIZE]={25,45,36,48,89,57,65,25,26,16};
int i,locate;
scanf("%d",&locate); //删除locate处数据;
n=deletedate(a,10,locate); //函数实参:数组名,长度,位置。函数返回长度n;
for(i=0;i<n;i++)
printf("%d\n",a[i]); //输出每一个元素
return 0;
}
/*
功能:删除数组中指定位置上的元素
入口参数: 数组名、数组大小、要删除元素的位置
返回值:删除后数组的大小
*/
int deletedate(int arr[],int len,int loc)
{
int i=loc; //此赋值表示要删除i处值;
//删除的位置写入其后的值覆盖
while(i<len-1) //删除数据后len长度减小
{
arr[i]=arr[i+1]; //后面值覆盖前面值
i++;
}
len--; //删除后数组大小减1
return len;
}
运行结果:
学习心得:
删除一个位置的数据,其后的每一个数据将覆盖前一个数据;
知识总结:
删除后i循环的次数变小;
删除后数据长度变小;
函数定义时注意考虑具体采用哪些参数,是否有返回值;
2、在指定位置插入一个数据;
问题及代码:
/*在指定位置上插入一个数据*/
#include<stdio.h>
#define SIZE 100 //定义一个字符常量
int inserdate(int[],int,int,int); //声明一个插入的函数
int n=10; //数组中实际有用的数据
int main()
{
int a[SIZE]={25,45,36,48,89,57,65,25,26,16};
int i,locate,value;
scanf("%d",&locate); //插入locate处数据;
n=inserdate(a,10,locate,value); //函数实参:数组名,长度,位置。插入值,函数返回长度n;
for(i=0;i<n;i++)
printf("%d\n",a[i]); //输出每一个元素
return 0;
}
/*
功能:在数组中插入指定位置上的元素
入口参数: 数组名、数组大小、要插入元素的位置和它的值
返回值:插入值后数组的大小
*/
int inserdate(int arr[],int len,int loc,int val)
{
int i=len; //给i赋值为数组的长度;
//将loc后面的数值向后移动;
while(i>loc)
{
arr[i]=arr[i-1]; //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出;
i--;
}
//在i==loc处写入数值,即上面腾出的空间;
arr[i]=val ;
len++; //插入后数组大小减1
return len;
}运行结果:
学习心得:
与删除类似,参数入口增加了一个插入的值。
知识总结:
集体后移loc后面的数,即前一个覆盖后一个数,空出插入处的空间;
3、合并连个有序数组;
问题及代码:
/*合并两个有序数组*/
#include<stdio.h>
#define SIZE 100 //定义一个字符常量
int mergedate(int[],int,int[],int,int[]) ; //声明一个合并功能的函数
int n1=10,n2=8,n3=0; //数组中实际有用的数据
int main()
{
int a1[SIZE]={25,45,36,48,89,57,65,25,26,16};
int a2[SIZE]={46,85,77,16,85,48,95,25};
int a3[SIZE*2];
int i;
n3=mergedate(a1,10,a2,8,a3); //函数实参:两组数组名及长度,新数组名,函数返回新数组长度n3;
for(i=0;i<n3;i++)
printf("%d\n",a3[i]); //输出新数组的每一个元素
return 0;
}
/*
功能:合并数组a1、a2,将其合到新数组a3;
入口参数: 数组名a1,a2,a3,数组大小n1,n2;
返回值:合并后新数组的大小 ;
*/
int mergedate(int arr1[],int L1,int arr2[],int L2,int arr3[])
{
int i=0,j=0,k=0; //初始化三个循环;
//i与j均从最小值开始取值,将两个数组中的值进行对比,将小得值赋给新数组;
while(i<L1&&j<L2)
{
if(arr1[i]<arr2[j]) //arr[i-1]当i取最小时表示将被插入的原先那个值,将其赋值给arr[],原来的位置将空出;
arr3[k++]=arr1[i++];
else
arr3[k++]=arr1[j++];
}
/*上面的对比完之后,两个数组均可能剩下一些元素;
将某一个数组剩余数赋值给新数组; */
while(i<L1)
arr3[k++]=arr1[i++];
while(j<L2)
arr3[k++]=arr2[j++];
return k;
}运行结果:
学习心得:
合并数组,需要知道两个数组及其长度,求出新数组;
知识总结:
通过对比两个数组的元素选出结果赋值给新数组;
最后剩余的所有元素一起赋值给数组,但这些元素并未进行排序;
第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数
标签:
原文地址:http://blog.csdn.net/emperor_21ad_shidi/article/details/51360162