zoukankan      html  css  js  c++  java
  • 数组的学习总结

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

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

    数组应用示例:当年第几天?
    #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;
    }

  • 相关阅读:
    语句结构1练习
    语句结构(1)
    常用dos命令(4)
    常用dos命令(3)
    常用dos命令(2)
    常用dos命令(1)
    因式分解 · Factor Combinations
    电话号码的字母组合 · Letter Combinations of a Phone Number
    286 walls and gate最近的出口
    286被围绕的区域 · Surrounded Regions
  • 原文地址:https://www.cnblogs.com/Abreast-/p/7750544.html
Copyright © 2011-2022 走看看