
C语言中,数组是一组连续的相同类型的数据集合。 所以要在数组中插入元素,需要按照以下步骤:
1、找到插入点;
2、将插入点所在元素,及之后的所有元素,都向后移动一个单位;
3、将插入点赋值为要插入的元素。
以固定位置插入,代码举例如下:
#include <stdio.h>void insert(int *a, int n, int i, int v)
//将长度为n的数组a, 下标为i的位置插入值为v的元素。 插入后,数组长度为n+1.
{
int j
for(j = n-1 j>=i j --)//将i及以后的后移一位。 由于是固定位置插入,所以不需要查找插入位置。
a[j+1] = a[j]
a[i] = v//插入元素。
}
int main()
{
int a[5] = {1,3,6,7}/五个元素数组,初始化四个值。
int i
insert(a, 4, 2, 5)//将5插入到a[2]位置。
for(i = 0 i < 5 i ++)
printf("%d ", a[i])//输出结果,为1 3 5 6 7
return 0
}
#include "stdio.h"#include "stdlib.h"
void main()
{
int *p,k,h,*q,i,j,e
printf("请输入数组中的元素的个数最大值:")
scanf("%d",&k)
p=new int[k]
if(p==NULL)
{
printf("不能分配空间!")
exit(0)
}
printf("请输入数组中的元素的个数:")//可以输入比数组长度小的个数
scanf("%d",&h)
printf("请输入数组中的元素(分别输入):\n")
for(i=0i<hi++)
scanf("%d",&p[i])
if(h==k)
{
q=new int[k+1]
if(p==NULL)
{
printf("不能分配空间!")
exit(0)
}
for(i=0i<ki++)
q[i]=p[i]
printf("请输入插入在第几个数的后面和要插入的数:")
scanf("%d%d",&j,&e)
for(i=ki>=ji--)
q[i+1]=q[i]
delete p
q[j]=e
for(i=0i<k+1i++)
printf("%d\t",q[i])
delete q
}
if(h<k)
{
printf("请输入插入在第几个数的后面和要插入的数:")
scanf("%d%d",&j,&e)
for(i=h-1i>=ji--)
p[i+1]=p[i]
p[j]=e
for(i=0i<h+1i++)
printf("%d\t",p[i])
delete p
}
}
我使用动态数组来考虑两种情况
1.数组满的,需要从新申请数组,然后后移;
2.直接后移;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)