C语言编程,删除数组a中值为x的第一个元素。

请编写函数void delSq(int a[], int x, int *length)。该函数的功能是:删除数组a中值为x的第一个元素。函数第一个参数数组a接收的元素保证非递减有序,第二个参数x为要删除元素的值,第三个参数length为当前数组中实际存储元素个数,注意删除值为x元素后保持length值正确。
例如:初始状态,包含6个元素的数组为:{2,4,5,5,7,9},假设x值为5,执行该函数之后,数组变为:{2,4,5,7,9},并且数组长度length由6变为5。

这个题目的解题思路为:因为数组a已非递减有序,所以一般先对其进行二分查找,但要找到第一个x所在的下标,然后再对其进行删除。
int BitSearch(int a[], int x, int left, int right) { /*在数组a的从left到right的区域内二分查找x第一次出现的位置,如果不存在返回-1*/
int mid, i;
while(left <= right) {
mid = (left + right) / 2;
if(a[mid] == x) break;
if(a[mid] > x) right = mid - 1;
if(a[mid] < x) left = mid + 1;
}
if(left > right) return -1;
for(i = mid; i >= left && a[i] == x; i--); //寻找第一个x的位置
return i + 1;
}
void Romove(int a[], int *length, int index) {
int i;
if(index < 0 || index >= *length) return ; //删除的位置越界
for(i = index; i < *length - 1; i++) a[i] = a[i + 1];
*length--;
}

void delSq(int a[], int x, int *length) {
int index = BitSearch(a, x, 0, *length - 1);
Remove(a, length, index);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-24
int main()

{

void delSq(int a[], int x, int *length);

int a[10] = {1,2,3,4,5,6,7,8,9,10};

int x = 5;

int a_length = sizeof(a)/sizeof(int);//整型数组求数组长度

int *length = &a_length;

printf("a_length = %d\n",a_length);

delSq(a, x, length);

return 0;

}

void delSq(int a[], int x, int *length)

{

for (int i = 0; i < 10; i++) {

if (a[i] == x) {//遍历数组,找到要删除的值

for (int j = i; j<10; j++) {

a[j] = a[j+1];//将要删除的值之后的所有元素前移一位

}

}

}

//遍历数组 输出数组中元素

for (int i = 0; i < 9; i++) {

printf("%d\n",a[i]);

}

}
这是对c数组的直接操作 只能这么样了 ,题目要求能够对数组动态的分配空间,我认为用链表来实现比较好
第2个回答  2020-01-07
#include
<stdio.h>
void
main()
{
int
i,n,k,m;
int
a[10]
=
{1,2,3,4,5,6,7,8,9,10};
printf("请输入要删除的数字:\n");
scanf("%d",&n);
printf("删除前的数组为:\n");
for(i=0;i<10;i++)
{
printf("%d
",a[i]);
}
printf("\n");
printf("删除后的数组为:\n");
m=10;
for(i=0;i<10;i++)
{
if(a[i]
==
n)
{
m--;
for(k=i;k<10;k++)
{
a[k]
=
a[k+1];
}
}
}
for(i=0;i<m;i++)
printf("%d
",a[i]);
printf("\n");
}
第3个回答  2013-12-23
#include <stdio.h>void delSq(int a[], int x, int *length);
int main(){ int a[6] = {2,4,5,5,7,9}; int m =6; delSq(a,5,&m); for (int i=0;i<m;i++){ printf (" %d",a[i]); } return 0;}

void delSq(int a[], int x, int *length){ for (int i =0;i<(*length);i++){ if (a[i] == x){ for ( int j=i+1; j<=(*length); j++ ) a[j-1]=a[j]; (*length)--; break; } }}
你看着行吗??

C语言编程,删除数组a中值为x的第一个元素。
int BitSearch(int a[], int x, int left, int right) { \/*在数组a的从left到right的区域内二分查找x第一次出现的位置,如果不存在返回-1*\/ int mid, i;while(left <= right) { mid = (left + right) \/ 2;if(a[mid] == x) break;if(a[mid] > x) right = mid - 1;i...

c语言删除数组中的等于x的第一个元素?
主函数也是自己写吧,不需要改变数组啊,比如我们在下标3位置找到x,那么等下输出时不要输出下标为3的就可以了

c语言编程:删除数组a中所有值为x的元素,输出执行删除前后的数组。
依次遍历数组,找到该元素后,数组后面所有元素前移,并且元素个数减一,最后重新输出该数组即可。参考代码:include <stdio.h>int main() {int n=10,i,j,x,a[10]={0,1,2,3,4,5,5,6,7,8};scanf("%d",&x);for(i=0;i<10;i++){if(a[i]==x){for(j=i;j+1<10;j++)a[j...

c语言如何删除数组中的某个元素
C语言删除数组指定元素的源代码如下:include <stdio.h> main(){ char s[80],c;int j,k;printf("\\nEnter a string: ");gets(s);printf("\\nEnter a character: ");c=getchar( );for(j=k=0;s[j]!= '\\0';j++)if(s[j]!=c)s[k++]=s[j];s[k]= '\\0';printf("\\n%s\\...

c语言中怎么删除数组中的一个元素
答案:在C语言中,直接删除数组中的一个元素是不可行的。因为数组在内存中是连续存储的,删除一个元素会导致其他元素的内存地址发生变化,可能引起程序错误。但可以通过其他方式间接实现“删除”数组元素的效果。详细解释:1. 数组的特性:在C语言中,数组是一块连续的内存区域,用于存储相同类型...

C语言 数组 实现删除一数组中的某指定元素。
include <stdio.h>int main(){ int a[10] = {1,1,2,6,5,6,3,5,7,3}; int v,i,n; scanf("%d",&v); for(i=n=0;i<10;i++) if(a[i]!=v) a[n++]=a[i]; for(i = 0; i<n; i++) printf("%d ", a[i]); return 0;} ...

在一维数组中删除值为x的元素(用初学的c语言)
假设x=3 int main(){ int i,j,s=0,a[5]={1,2,3,4,5},x=3;for(i=0;i<5;i++)if(a[i]==x){ s++;for(j=i;j<5-s;j++){ a[j]=a[j+1];} } for(i=0;i<5-s;i++)printf("%d ",a[i]);}

删除顺序表中的第i个元素,,给个完整的 C语言代码吧~~~ 谢谢
int elem[MAXSIZE];int last;} SeqList;void deletelist(SeqList *l,int i,int k);int main(){ int i,k,j=0;SeqList *l;SeqList a;l=&a;scanf("%d%d",&i,&k);\/\/输入i和k while(scanf("%d",&l->elem[j])!=EOF)j++;\/\/输入顺序表内容 l->last=j-1;deletelist(l,i,k...

C语言中怎么删除数组中的一个元素
前移无非就是 类似 arr[ i - 1] = arr[ i ] 这个意思。当可以确认数组中存放的都是整数,你可以将这个元素置为-1表示删除。增加就是先检查你的数组中有没有-1的元素,如果有,就设置为你的值。如果全部都满了,就开一个更大的数组,把数据拷贝过去。把相应位后面的一次前移一位,就是实现...

c语言,想删除数组重复的元素。。。只保留第一个重复的元素。。就是删 ...
void main(){ int cout=0,i,j=0;char a[6]={'x','2','x','3','x','x'};for(i=0;i<6;i++){ if(a[i]=='x'){ cout++;if(cout<2){ a[j]=a[i];j++;} } else { a[j]=a[i];j++;} } printf("最后有X的个数为:%d\\n",cout);for(i=0;i<j;i++)pr...

相似回答