求解数组操作算法,用C语言!该怎么解决
求解数组操作算法,用C语言!
开始:1 1 6 6 7 1
a[0] a[1] a[2] a[3] a[4] a[5]
结果:1 6 7
b[0] b[1] b[2]
把数组中重复的数字只保留一次,例原数组1,1,6,6,7,1去重复数字后数组是1,6,7
求以上操作的算法.
------解决方案--------------------
通过遍历,让第一个数和后面的数据比较,将后面重复的数据值设置为某一个值,比如第一个1和后面的数据比较,把后面的1值改为-1,然后输出时遇到-1则不输出。
------解决方案--------------------
开始:1 1 6 6 7 1
a[0] a[1] a[2] a[3] a[4] a[5]
结果:1 6 7
b[0] b[1] b[2]
把数组中重复的数字只保留一次,例原数组1,1,6,6,7,1去重复数字后数组是1,6,7
求以上操作的算法.
------解决方案--------------------
通过遍历,让第一个数和后面的数据比较,将后面重复的数据值设置为某一个值,比如第一个1和后面的数据比较,把后面的1值改为-1,然后输出时遇到-1则不输出。
------解决方案--------------------
- C/C++ code
#include <stdio.h> int main(){ int hash[1000]={0}; int num=0; while(scanf("%d",&num)&&num!=-1){ if(hash[num]==0){ printf("%d,",num); hash[num]=1; } } printf("\n"); }
------解决方案--------------------
循环比较就可以了啊。
------解决方案--------------------
要不先给数组从小到大排个序?
从第一个数开始,后面的数跟前一个数不相等就留下.
------解决方案--------------------
第一个数和后面比较 相等则删除当前数据,否则数组下标++
------解决方案--------------------
看看 严慰敏的 数据结构 视频
------解决方案--------------------
------解决方案--------------------
先排序,再跟直接后继比较,相等删除当前数,位置后移,不等,直接后移一个
------解决方案--------------------
- C/C++ code
//将out.txt文件中的内容排序并去重,结果保存到unique.txt中 #include <stdio.h> #include <stdlib.h> #define MAXLNO 10000000 //能处理的最大行数 #define MAXLEN 20 //能处理的最大行宽,包括行尾的\n和字符串尾的\0 char buf[MAXLNO][MAXLEN]; int ln,i; FILE *f; int cmpfun( const void *arg1, const void *arg2 ) { return strcmp((const char *)arg1,(const char *)arg2); } int main() { f=fopen("out.txt","r"); if (NULL==f) { printf("Can not find file out.txt\n"); return 1; } ln=0; while (1) { if (NULL==fgets(buf[ln],MAXLEN,f)) break; ln++; if (ln>=MAXLNO) { printf("Lines >%d ignored.",MAXLNO); break; } } fclose(f); if (ln>1) qsort(buf,ln,MAXLEN,cmpfun); f=fopen("unique.txt","w"); if (NULL==f) { printf("Can not create file unique.txt\n"); return 2; } fprintf(f,"%s",buf[0]); if (ln>1) for (i=1;i<ln;i++) { if (strcmp((const char *)buf[i-1],(const char *)buf[i])) fprintf(f,"%s",buf[i]); } fclose(f); return 0; }