C语言:实现线性表基本表示(数组元素的删除,插入,合并)
2017-08-17 10:48
344 查看
任务代码:
在指定位置删除值的操作:
在指定位置插入值的操作:
合并两个有序数组:
#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;
}
执行情况:
第一题:
第二题:
第三题:
知识总结:
指定位置删除值:
指定位置上插入数据:
合并两个有序数组:
在指定位置删除值的操作:
#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;
}
执行情况:
第一题:
第二题:
第三题:
知识总结:
指定位置删除值:
指定位置上插入数据:
合并两个有序数组:
相关文章推荐
- C语言实现顺序线性表的表示、插入、删除
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、归并等)
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 【数据结构】顺序线性表的插入、删除、合并实现
- C语言实现线性表的插入和删除操作
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- 试用多态实现线性表(队列,串,堆栈),要求具备线性表的基本操作:插入,删除,测长等。
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 平衡二叉树之C语言实现(插入、删除,分裂、合并)附源代码
- C语言实现双链表基本操作(创建、查找、插入、删除)
- 对线性表理解以及C语言实现链表的插入删除等操作。
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 实现线性表的遍历查询插入删除合并
- 线性表的顺序表示和实现基本操作之插入元素
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)