您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-17 10:48 344 查看
任务代码:

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

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

执行情况:

第一题:



第二题:



第三题:



知识总结:

指定位置删除值:



指定位置上插入数据:



合并两个有序数组:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐