C语言:实现线性表基本表示(数组元素的删除,插入,合并)

来源:互联网 发布:朱婷 大冠军杯 知乎 编辑:程序博客网 时间:2024/05/16 17:15

任务代码:

在指定位置删除值的操作:

#include <stdio.h>#define SIZE 10int deleteData(int array[],int len,int locate);//定义删除的数组,长度,删除数据的位置int main(){    int locate,i;    int n=10;//数组中实际有用的元素    int d[SIZE]={0,1,2,3,4,5,6,7,8,9};    printf("请输入你需要删除第几个数据:");    scanf("%d",&locate);        //删除locate处的数据    n=deleteData(d, n, locate);//d数组名作为实际参数传递        //重新打出数组    printf("删除数据后的数组为:\n");    for(i=0;i<n;i++)//这里的n已经改变    {        printf("%d ",d[i]);    }    printf("\n");    return 0;}int deleteData(int array[],int len,int locate){    int i;    for(i=locate;i<len-1;i++)//尤其注意,因为删除一个数据后,长度变短了一位所以len-1    {        array[i]=array[i+1];    }    //删除数据后数组大小缩减    len--;    return len;}

在指定位置插入值的操作:

#include <stdio.h>#define SIZE 10int insertData(int array[],int len,int locate,int val);//定义的数组,长度,插入数据的位置,插入的数据int main(){    int locate,val,i;    int n=10;//数组中实际有用的元素    int d[SIZE]={0,1,2,3,4,5,6,7,8,9};    printf("请输入你需要插入的位置:");    scanf("%d",&locate);    printf("请输入你需要插入的数据:");    scanf("%d",&val);        //插入locate处的数据val    n=insertData(d, n, locate,val);//d数组名作为实际参数传递,返回新数组的长度        //重新打出数组    printf("删除数据后的数组为:\n");    for(i=0;i<n;i++)//这里的n已经改变    {        printf("%d ",d[i]);    }    printf("\n");    return 0;}int insertData(int array[],int len,int locate,int val){    int i=len;//将i指定到数组的最后一个单元的后一位        //从最后一个数开始,所有的数字统统向后移一个单位,直到loc位置结束(在指定位置留出一个空位)    while(i>locate)    {        array[i]=array[i-1];        i--;    }        //i=locate处插入数据    array[i]=val;//也可以写为array[locate]=val        //插入数据后数组大小增加    len++;    return len;}


合并两个有序数组:

#include <stdio.h>#define SIZE 100/* 功能:将长度为l1的有序数组a1和长度为l2的有序数组a2合并成新的有序数组a3 入口参数:待合并的有序数组名及长度,及合并后保存的数组名 返回值:合并后的有序数组长度 */int mergeData(int a1[],int l1,int a2[],int l2,int a3[]){    int i=0,j=0,len=0;//i代表数组a1中的元素,j代表数组a2中的元素,len代表新数组的长度    while(i<l1 && j<l2)//当比较没有到达两个数组的末尾结束的时候    {        if(a1[i]<a2[j])        {            a3[len++]=a1[i++];//先赋值再++        }        else        {            a3[len++]=a2[j++];//先赋值再++        }    }    //如果a1或者a2先执行完,那a3的剩余元素为没有比较完的数组余下元素    while(i<l1)    {        a3[len++]=a1[i++];    }    while(j<l2)    {        a3[len++]=a2[j++];    }    return len;}//冒泡排序奖无序数列先有序化void bubbleSort(int d[],int n){    int i,j,t;    for(i=0;i<n-1;i++)    {        for(j=0;j<n-i-1;j++)        {          if(d[j+1]<d[j])          {              t=d[j];              d[j]=d[j+1];              d[j+1]=t;          }        }    }}int main (){    int n1=10,n2=8,n3=0;//数组中实际有用的元素    int d1[SIZE]={3,2,4,5,3,9,7,8,1,0};    int d2[SIZE]={43,23,45,65,12,76,89,32};    int d3[SIZE]={SIZE*2};//合并后的数组元素个数翻倍    int i;        //先有序化    bubbleSort(d1,n1);    bubbleSort(d2,n2);        //合并有序数组    n3=mergeData(d1, n1, d2, n2, d3);//数组名作为实际参数传入        //输出合并后的结果    printf("合并后的数组为:");    for(i=0;i<n3;i++)    {        printf("%d ",d3[i]);    }    printf("\n");    return 0;}




执行情况:

第一题:



第二题:



第三题:



知识总结:

指定位置删除值:



指定位置上插入数据:



合并两个有序数组:



阅读全文
0 0
原创粉丝点击