码迷,mamicode.com
首页 > 编程语言 > 详细

第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数

时间:2016-05-12 17:29:38      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!