題目描述
設計一個算法,刪除順序表中值重復的元素(值相同的元素僅保留第一個),使得表中所有元素的值均不相同。其中順序表的動態分配用C語言描述如下:
#define InitSize 100 //表長度的初始定義
typedef int DataType; //定義表元素的數據類型
typedef struct { //順序表的定義
DataType *data; //指示動態分配數組的指針
int maxSize, n; //數組中最大容量和當前個數
}SeqList;
輸入描述
有多組測試數據,在每組測試數據的第一行輸入順序表中元素的個數 n;如果n不為0,第二行輸入n 個數,用空格隔開。
輸出描述
如果順表不為空,輸出刪除后順序表里的元素;
如果順序表為空,輸出 EMPTY
輸入樣例
6
1 -2 3 -2 4 1
0
8
-1 5 7 9 5 3 -1 2
輸出樣例
1 -2 3 4
EMPTY
-1 5 7 9 3 2
#include<stdio.h>
int a[100000],vis1[100000+10]={0},vis2[100000+10];
int main()
{
int n,m,j,k,i,T;
while (~scanf("%d",&n))
{
for (i=0;i<100000+10;i++)
{
vis1[i] = 0;
vis2[i] = 0;
}
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
if (a[i]>=0)
vis1[a[i]]=1;
else
vis2[-a[i]]=1;
}
if (n==0)
{
printf("EMPTY\n");
continue;
}
for (i=0;i<n;i++)
{
if (a[i]>=0)
{
if (vis1[a[i]]==1)
{
printf("%d ",a[i]);
vis1[a[i]] = 0;
}
}
else
{
if (vis2[-a[i]]==1)
{
printf("%d ",a[i]);
vis2[-a[i]] = 0;
}
}
}
printf("\n");
}
return 0;
}