1. 程式人生 > >數組的學習總結

數組的學習總結

出現 sorted input 保存 tdi 收獲 元素 查找 ++i

本周主要學習了關於一維數組的應用,二分查找法,冒泡排序法,指針法訪問數組元素,數組名和指針作函數參數,在數組中插入和刪除元素,合並兩個有序數組,編寫出用於查找和排序的函數,動態存儲管理與動態數組的實現。 收獲:對數組有了系統完整的學習,掌握了數組中的用到的經典算法,接下來掌握多維數組的應用

數組用於存儲單一數據類型的一組數
數組是有類型屬性的:同一數組中的每一個元
素都必須屬於同一數據類型。
一個數組在內存中占一片連續的存儲單元。

數組應用示例:當年第幾天?
#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天\n",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("\n");
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("\n");
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("\n");
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.\n",index);
else
printf("Notfound.\n");
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:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
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;
}

數組的學習總結