一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

C语言删除数组元素一些方法总结

时间:2013-09-17 编辑:简简单单 来源:一聚教程网

一个具有10个元素的数组 1 3 3 2 5 1 1 5 6 6,删除相同元素后后变为 1 3 2 5 6,请大虾们帮下忙,最好给出全部程序,必须是删除法!

 代码如下 复制代码

void delete_listi(Node list,int i)
{
 Node p=list;q;
 int j;/*设辅助循环变量*/
 if(i==1)
  list=list->next;
 else
 {
  q=p;p=p->next;
  for(j=2;j   {
   q=q->next;p=p->next;/*移动指针*/
  }
  q->next=p->next;free(p);/*找到后释放*/
 }
 return;
}

例2

 代码如下 复制代码

/*我写了两种方法!!!方法一*/

#include
int main()
{
 int a[10]={1,3,3,2,5,1,1,5,6,6};
 int i,j,k,x=10;/*x为数组中无重复有效元素的个数*/
 for(i=0;i  {
  for(j=i+1;j   {
   if(a[i]==a[j])
   {
    x--;//发现重复时减1
    for(k=j;k     {
     a[k]=a[k+1];
    }
    j--;
   }
  }
 }
 for(i=0;i  printf("n");
 return 0;
}

/******************************************************************************
 * 再写一种方法!!!
 *此方法是把所有重复的都标识出来,然后生成一个新的无重复元素的数组
 *******************************************************************************/

#include
#define flag -1//此外定义了一个标识。把重复的无素赋值为此标识。
int main()
{
 int a[10]={1,3,3,2,5,1,1,5,6,6};
 int b[10];//用于存储有无重复元素的数组。
 int i,j,x=10;//x为无重复有效元素个数
 for(i=0;i<10;i++)
 {
  if(a[i]!=flag)//如果标识过了,就不比较了
  {
   for(j=i+1;j<10;j++)
   {
    if(a[i]==a[j]&&a[j]!=flag)
    {
     a[j]=flag;
     x--;//标识一个重复项,有效无素减少一个
    }
   }
  }
 };
 for(i=0,j=0;i<10;i++)//把非标识的元素,给数组b[];
 {
  if(a[i]!=flag)
  {
   b[j]=a[i];
   j++;
  }
 };
 for(i=0;i  printf("n");
 return 0;
}


删除数组中的重复元素

给定一个已定义的数组,该数组中包含有重复的元素!例如给定的数组为:int a[]={1,2,3,4,5,3,2,1,5};而目的是将该数组处理后留下的结果为:a[]={1,2,3,4,5}; 而不需要再定义int b[50],通过"b[j]=a[i];"把a数组的元素转移到b数组中去!

 代码如下 复制代码

#include
int main()
{
char str[100];
int i=0,j;
printf("input a string n");
gets(str);
while(i { j=i+1;
printf("delelte result %dn",strlen(str));
while(j { if(str[j]==str[i])
{
str[j]='';
strcat(str,str+j+1) ;
}
else j++;
}
i++ ;

}
puts(str);

}


二维数组中删除数组中的重复元素

 

 代码如下 复制代码
简单地统计重复元素和不重复元素,可以用1维数组。
#include
void main()
{
int i,j,k;
int a[50];
int b[50],c[50];
int n,flag=0;
for (i=1;i<50;i++) c[i]=0;
printf("Please enter 50 datan");
for (i=0;i<50;i++) scanf("%d",&a[i]);
n=0;
b[n]=a[0]; c[n]=1; n++;
for (i=1;i<50;i++){
for (k=0;k if  (a[i] == b[k])  {c[k]=c[k]+1; flag=1;break;}
}
if (flag == 0) {b[n] =a[i];c[n]=1;n++;} else {flag = 0;};
}
for (i=0;i<50;i++){
if  (c[i]==1) printf("%d ",b[i]);
}
printf("n=============n");
for (i=0;i<50;i++){
if  (c[i]>1) printf("%d -- %dn",b[i],c[i]);
}
}

--------------------
“删除数组中的重复元素” 不知道 是什么意思。
 数组单元是连续分配单元的。即使是动态分配的单元,也不好从当中删去。

热门栏目