/************方法一(利用一维数组记录重复数字在数组中的下标)************************/ /*建议用一维链表,删除元素不需要移动大量元素*/ #include<stdio.h> #include"malloc.h" #include"string.h" int main() { void func(int a[],int n); int delete_repeat(int a[],int n,int num[]); int N,i,x,count,flag; scanf("%d",&N); int *pt=(int*)malloc(N*sizeof(int)); int *repeat_num=(int*)malloc(N*sizeof(int)); memset(repeat_num,0,N*sizeof(int)); for(i=0;i<N;i++) scanf("%d",&pt[i]); func(pt,N); count=delete_repeat(pt,N,repeat_num); printf("%d\n",count); for(i=0;i<N;i++) { if(i==0) printf("%d ",pt[i]); else { flag=1; //千万不要忘记置1 for(x=0;repeat_num[x]!=0;x++) //将数组中重复的数禁止输出 if(i==repeat_num[x]) flag=0; if(flag) printf("%d ",pt[i]); } } printf("\n"); free(repeat_num); free(pt); return 0; } void func(int a[],int n) //冒泡排序 { int k,t,temp; for(k=0;k<n-1;k++) for(t=0;t<n-k;t++) if(a[t]>a[t+1]) {temp=a[t];a[t]=a[t+1];a[t+1]=temp;} return ; } int delete_repeat(int a[],int n,int num[]) { int c=0,s,index=0; for(s=0;s<n;s++) if(a[s]==a[s+1]) {c++;num[index++]=s+1;}//记录排序后相同数值的数组下标 return n-c; } /************方法二(利用单链表删除重复数字5ms)******************************/ #include<stdio.h> #include"malloc.h" void sort(int a[],int n); typedef struct node { int num; struct node *next; }*Node; Node creat(int a[],int n); void dele(int a[],int n); int main() { int N,i; scanf("%d",&N); int *pt=(int*)malloc(N*sizeof(int)); for(i=0;i<N;i++) scanf("%d",&pt[i]); sort(pt,N); dele(pt,N); free(pt); return 0; } void sort(int a[],int n) { int i,j,temp; for(i=0;i<n-1;i++) for(j=0;j<n-i;j++) if(a[j]>a[j+1]) {temp=a[j],a[j]=a[j+1];a[j+1]=temp;} return ; } Node creat(int a[],int n) { Node head=(Node)malloc(sizeof(struct node)); head->next=NULL; Node p=head; Node q; int i; for(i=0;i<n;i++) { q=(Node)malloc(sizeof(struct node)); q->num=a[i]; q->next=p->next; p->next=q; p=q; } return head; } void dele(int a[],int n) { Node head; Node p,q; int count=0; head=creat(a,n); p=head->next; while(p->next!=NULL) { q=p->next; while(p->num==q->num)/***********链表中重复数字计数并删除****************/ { p->next=q->next; free(q); q=p->next; count++; } p=p->next; } p=head->next; printf("%d\n",n-count); while(p!=NULL) { printf("%d ",p->num); p=p->next; } free(head); }
0.0分
0 人评分
人见人爱A+B (C语言代码)浏览:1046 |
C语言训练-8除不尽的数 (C语言代码)暴力解法,答案只有一个,直接输出就好了浏览:1045 |
C二级辅导-公约公倍 (C语言代码)浏览:2158 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:503 |
C二级辅导-进制转换 (C语言代码)浏览:658 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:622 |
数列排序 (C语言代码)浏览:858 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
sizeof的大作用 (C语言代码)浏览:1594 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:438 |