数组的学习总结

 本周主要学习了关于一维数组的应用,二分查找法,冒泡排序法,指针法访问数组元素,数组名和指针作函数参数,在数组中插入和删除元素,合并两个有序数组,编写出用于查找和排序的函数,动态存储管理与动态数组的实现。
收获:对数组有了系统完整的学习,掌握了数组中的用到的经典算法,接下来掌握多维数组的应用

数组用于存储单一数据类型的一组数
数组是有类型属性的:同一数组中的每一个元
素都必须属于同一数据类型。
一个数组在内存中占一片连续的存储单元。

数组应用示例:当年第几天?
#include<stdio.h>
int days(int y,int m,int d);
in tmain()
{
int year,month,day;
printf("输入年月日:");
scanf("%d %d %d",&year,&month,&day);
printf("这是该年的第%d天 ",days(year,month,day));
return 0;
}
int days(inty,intm,intd)
{
int i,sum=d;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for(i=1;i<m;i++)
sum+=a[i];
if(m>2&&((y%4==0&&y%100!=0)||y%400==0))//若闰年……
sum++;
return 0
}

                                      

 冒泡排序源程序
#include<stdio.h>
#definen10
int main()
{
int i,j,t,a[n]={123,5,9,11,33,6,9,76,100,3};
for(i=0;i<n-1;i++)
for(j=0;j<=n-i-1;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(i=0;i<10;i++)//输出排序后结果
printf("%d",a[i]);
return 0;
}

}
 
 
删除数组中的指定元素
 #include<stdio.h>
#define SIZE100
int deleteData (int[],int,int);
int main()
{
int n=10;//数组中实际有用元素
int d[SIZE]={1,3,9,12,32,41,45,62,75,77};
int locate,i;
scanf("%d",&locate);
//删除locate处的数据
n=deleteData(d,n,locate);
//输出删除后的结果
for(i=0;i<n;++i)
printf("%d",d[i]);
printf(" ");
return0;
}
功能:删除数组中指定位置上的元素
入口参数:数组名、数组大小、要删除元素的位置
返回值:删除后数组的大小
*/

在数组指定位置插入值
include<stdio.h>
int insertData(int[],int,int,int);
#define SIZE100
int main()
{
int n=10;//数组中实际有用元素
int d[SIZE]={1,3,9,12,32,41,45,62,75,77};
int locate,value,i;
scanf("%d%d",&locate,&value);
//在locate位置处插入value
n=insertData(d,n,locate,value);
//输出插入后的结果
for(i=0;i<n;++i)
printf("%d",d[i]);
printf(" ");
return0;
}
功能:在长度为len的数组arr的loc位置处插入值v
入口参数:数组名、长度、位置和要插入的值
返回值:插入数据后的长度
*/
 

合并两个有序数组
#include<stdio.h>
int mergeData(int[],int,int[],int,int[]);
#defineSIZE100
int main()
{
int n1=10,n2=7,n3=0;//数组中实际有用元素
in td1[SIZE]={1,3,9,12,32,41,45,62,75,77};
in td2[SIZE]={2,11,24,56,76,82,94};
int d3[SIZE*2];
int i;
//合并有序数组
n3=mergeData(d1,n1,d2,n2,d3);
//输出合并后的结果
for(i=0;i<n3;++i)
printf("%d",d3[i]);
printf(" ");
return0;
}
/*
功能:将长度为l1的有序数组a1和长度为l2的有序数组
a2,合并为新的有序数组a3
入口参数:待合并的有序数组名及长度,及合并后保存数
据的数组名
返回值:合并后的有序数组长度
*/

 用函数实现二分查找
/*功能:在长度为n的有序数组中查找k出现的位置*/
#include<stdio.h>
int binary_search(intarr[],intn,intk);
#define SIZE10
int main()
{
int d[SIZE]={1,3,9,12,32,41,45,62,75,77};
int key,index;
printf("Inputakeyyouwanttosearch:");
scanf("%d",&key);
index=binary_search(d,SIZE,key);
if(index>=0)
printf("Theindexis%d. ",index);
else
printf("Notfound. ");
return0;
}
int binary_search(intarr[],intn,intk)
{
int i=-1;
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(arr[mid]==k)
{
i=mid;
break;
}
else if(arr[mid]>k)
high=mid-1;
else
low=mid+1;
}
return i;
}

用函数实现选择法排序

#include<stdio.h>
void select_sort(int array[],int n);
int main()
{
int a[10]={4,3,7,9,1,5,0,8,2,6},i;
select_sort(a,10);
printf("the sorted array: ");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf(" ");
return 0;
}

void select_sort(int array[],int n);
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];
array[k]=array[i];
array[i]=t;
}
return;
}

原文地址:https://www.cnblogs.com/Abreast-/p/7750544.html