删除有序数组中的元素,数组仍然有序
方法一:
删除一个有序数组的一个元素,采用两个数组实现
代码实现:
/*
2017年6月19日16:16:31
功能:删除数组中一个数据之后数组依然有序
*/
#include"stdio.h"
#define M 9
int main()
{
int a[M] = {1,2,3,4,5,6,7,8,9};
int b[M-1];
int i, j, num;
bool flag;
printf("请输入将要删除的数据的数值:");
scanf("%d",&num);
for( i = 0; i < M ; i++)
{
if(a[i]==num)
{
flag = true;
break;
}
}
if(flag == true)
{
for( j = 0 ; j < i ;j++)
{ //该数的前面的数
b[j] = a[j];
}
for( j = i ; j < M-1 ;j++)
{ //该数的后面的数
b[j] = a[j+1];
}
printf("新的数组数据成员:");
printf("\n");
for(int n = 0; n < M-1; n++)
{
printf("%d\t",b[n]);
}
printf("\n");
}
else
{
printf("数组中不存在该数值!!!\n");
}
return 0;
}
/*
总结:
在VC++6.0中的显示结果为:
——————————————————————————————————————
请输入将要删除的数据的数值:10
数组中不存在该数值!!!
请输入将要删除的数据的数值:6
新的数组数据成员:
1 2 3 4 5 7 8 9
——————————————————————————————————————
在两个数组中完成的操作
*/
方法二:
删除一个有序数组的指定元素,采用一个数组实现
代码实现:
/*
2017年6月19日16:16:31
功能:删除数组中指定数据元素之后数组依然有序
*/
#include"stdio.h"
#define M 9
int main()
{
int a[M] = {1,2,3,6,6,6,7,8,9};
int i, j, num;
int count = 0;
printf("请输入将要删除的数据的数值:");
scanf("%d",&num);
for( i = 0, j = 0; i < M ; i++)
{
if(a[i]==num)
{
count++;
continue;
}
else
{
a[j++] = a[i];
}
}
a[j] = '\0';
printf("指定元素的个数 %d",count);
printf("\n");
printf("新的数组数据元素的形式:");
for(i = 0; i < j; i++)
{
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}
/*
总结:
在VC++6.0中的显示结果为:
——————————————————————————————————————
请输入将要删除的数据的数值:6
指定元素的个数 3
新的数组数据元素的形式:1 2 3 7 8 9
——————————————————————————————————————
在一个数组中完成的操作
*/
方法三:
#include "stdio.h"
int main()
{
int a[16] = {1,9,9,4,0,5,0,8,0,8,9,9,5,6};
int *pa = a;
int i, j = 0;
for(i = 0; i < 16; i++)
{
if(a[i] != 5)
{
a[j++] = *pa;
pa++;
}
else
{
pa++;
continue;
}
}
for(i = 0; i < j; i++)
printf("%d",a[i]);
return 0;
}
扩展:将删除的元素最后放在数组后面
#include "stdio.h"
int main()
{
int a[15] = {1,9,9,4,0,5,0,8,0,8,9,9,5,6};
int *pa = a;
int i,j,k, count = 0;
for(i = 0; i < 15; i++)
{
if(a[i] == 5)
{ a[i] = a[i+1];
count++;
continue;
}
}
k = count;
for(j = 15 - k ; count--; j++)
{
a[j] = 5;
}
for(i = 0; i < 15; i++)
printf("%d",a[i]);
return 0;
}