基础数据结构——顺序表(2) | ||||||
| ||||||
Description | ||||||
在长度为n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。 | ||||||
Input | ||||||
第一行输入表的长度n; 第二行依次输入顺序表初始存放的n个元素值。 | ||||||
Output | ||||||
第一行输出完成多余元素删除以后顺序表的元素个数; 第二行依次输出完成删除后的顺序表元素。 | ||||||
Sample Input | ||||||
12 5 2 5 3 3 4 2 5 7 5 4 3 | ||||||
Sample Output | ||||||
5 5 2 3 4 7 |
解题思路:用一个flag数组标记当前数字在之后是否出现过
1 #include <stdio.h> 2 3 int a[ 1010]; 4 int flag[ 1010]; 5 int ans[ 1010]; 6 7 int main(){ 8 int n, i, j; 9 while(scanf( " %d ", &n) != EOF){ 10 for(i = 0; i < n; i++){ 11 scanf( " %d ", &a[i]); 12 flag[i] = 0; 13 } 14 for(i = 0; i < n - 1; i++){ 15 for(j = i + 1; j < n; j++){ 16 if(a[i] == a[j]){ 17 flag[j] = 1; 18 } 19 } 20 } 21 for(i = j = 0; i < n; i++){ 22 if(flag[i] == 0){ 23 ans[j] = a[i]; 24 j++; 25 } 26 } 27 printf( " %d\n ", j); 28 for(i = 0; i < j - 1; i++){ 29 printf( " %d ", ans[i]); 30 } 31 printf( " %d\n ", ans[i]); 32 } 33 return 0; 34 }