C语言 删除所有相同值的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 删除所有相同值的元素相关的知识,希望对你有一定的参考价值。

从键盘输入整型一维数组中 a 中的各元素(以元素 0 结束, 0 是最后一个有效果元素,元素个数不超过 20 个),再输入一个待删除的整数。先输出删除前的所有数组元素。从数组中删除所有的元素值等于该整数的元素,如果元素不存在,则输出提示信息: does not exist,no operating! 否则输出删除后的所有数组元素
说明:( 1 )数组的定义: int a[20];
( 2 )应该用一个变量存储实际有效果的元素个数(含 0 )
( 3 )元素的输出用 %5d 的格式控制
( 4 ) scanf 之前不能用 printf 输出提示信息

#include <stdio.h>
#define N 1000
#define FLAG 0x80000000 /*特殊标记,用最小的负数表示*/
void main( )

int r[N], length, i, j;
scanf("%d", &length);
for(i = 0; i < length; i++)
scanf("%d", &r[i]);
for(i = 0; i < length - 1; i++)

if(r[i] != FLAG)

for(j = i + 1; j < length; j++)
if(r[j] == r[i]) r[j] = FLAG; /*遇到重复值,则先用特殊标记覆盖它*/


for(i = 0; r[i] != FLAG; i++); /*找到第一个特殊标记*/
for(j = i + 1; j < length;) /*删除数列中的特殊标记*/

if(r[j] != FLAG) r[i++] = r[j++];
else j++;

length = i; /*修改删除重复值后的数列的长度*/
for(i = 0; i < length; i++)
printf("%-4d", r[i]);
参考技术A #include <stdio.h>
void main()

int a[20] = 0;
int res[20] = 0;
int i, j, flag, total, delnum;
i = j = flag = total = delnum = 0;
scanf("%d", &a[total]);
while(a[total] != 0)

total++;
scanf("%d", &a[total]);

total++;
scanf("%d", &delnum);
printf("Before delete,elements are:\n");
for(i = 0; i < total; i++)

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

printf("\n");
flag = 0;
i = j = 0;
while(a[i] != 0)

if(a[i] != delnum)

res[j] = a[i];
j++;

else

flag = 1;

i++;

res[j] = a[i];
j++;
total = j - 1; // 实际有效果数的个数,减去1表示不包含0
if(flag == 0)

printf("does not exist, no operating!\n");

else

printf("After delete,elements are:\n");
for(i = 0; i < j; i++)

printf("%5d",res[i]);

printf("\n");

本回答被提问者采纳
参考技术B /*
2 3 3 4 3 5 3 7 0
Before delete, elements are :
2 3 3 4 3 5 3 7 0
3
After delete,elements are :
2 4 5 7 0
Press any key to continue
*/
#include <stdio.h>
int DeleteElem(
int a[], int *n,int num) int i,j,flag = 0;
for(i = 0; i < *n; ++i)
if(a[i] == num)
for(j = i; j < *n - 1; ++j)
a[j] = a[j + 1];
(*n)--;
--i;
flag = 1;


return flag;


void Show(
int a[], int n) int i;
for(i = 0; i < n; ++i)
printf("%5d",a[i]);
printf("\n");


int main()
int n,num,a[20];
for(n = 0; ; ++n)
scanf("%d",&a[n]);
if(a[n] == 0)
++n;
break;


printf("Before delete, elements are : \n");
Show(a,n);
scanf("%d",&num);
if(DeleteElem(a,&n,num))
printf("After delete,elements are : \n");
Show(a,n);

else printf("does not exist, no operating!\n");
return 0;

C语言使用二级指针借助递归工作栈删除单链表中所有值为x的元素

在我的上一篇随笔中,介绍了单链表的增删查改清空等操作,在实现按值删除的功能时,只能删除第一个目标元素,或者只能删除部分目标元素; 我参考了王道的《数据结构》考研复习指导书(2021年)中的代码(P47),实现了在C语言中,借助一个递归工作栈,删除单链表中所有值为x的元素的功能,由于C语言中没有引用(

以上是关于C语言 删除所有相同值的元素的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程问题:给数组中的元素按顺序编号

C语言数据结构,在一个顺序表中删除所有元素值3的倍数的元素,求代码

C语言删除一个整型数组里面重复的元素

C语言使用二级指针借助递归工作栈删除单链表中所有值为x的元素

数据结构(C语言版) 线性表 算法设计Demo28

C语言定义一个求数组n个元素的和的函数