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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Zzwtyds/article/details/77299871

任务代码:

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

#include <stdio.h>

#define SIZE 10

int 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 10

int 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;
}




执行情况:

第一题:



第二题:



第三题:



知识总结:

指定位置删除值:



指定位置上插入数据:



合并两个有序数组:



展开阅读全文

没有更多推荐了,返回首页