删除有序数组中的元素,数组仍然有序
方法一:
删除一个有序数组的一个元素,采用两个数组实现
代码实现:
/* 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(" "); for(int n = 0; n < M-1; n++) { printf("%d ",b[n]); } printf(" "); } else { printf("数组中不存在该数值!!! "); } 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] = ' '; printf("指定元素的个数 %d",count); printf(" "); printf("新的数组数据元素的形式:"); for(i = 0; i < j; i++) { printf("%d ",a[i]); } printf(" "); 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; }