#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
#define max 10000
typedef struct
{
int *elem;
int length;
int size;
}list;
int init(list &L,int n)
{
L.elem=(int *)malloc(n*sizeof(int));
if(!L.elem) return -1;
L.size=max;
return 0;
}
void create(list &L,int n)
{
int i;
L.length=n;
for(i=0;i<n;i++)
scanf("%d",&L.elem[i]);
}
void purge(list &L)
{
int i,j,k;
for(i=0;i<L.length-1;++i)
{
j=i+1;
while(j<L.length)
if(L.elem[j]!=L.elem[i])
++j;
else
{
for(k=j+1;k<L.length;++k)
L.elem[k-1]=L.elem[k];
--L.length;
}
}
}
int main()
{
list L;
int i,n,d,T;
scanf("%d",&T);
while(T)
{
scanf("%d",&n);
init(L,n);
create(L,n);
purge(L);
for(i=1;i<=L.length;i++)
{
printf("%d%c",L.elem[i-1],(i==L.length)?'\n':' ');
}
T--;
}
return 0;
}
/**************************************
Problem id : SDUT OJ B
User name : wy150428臧志栋
Result : Accepted
Take Memory : 544K
Take Time : 20MS
Submit Time : 2016-08-03 10:02:34
**************************************/
算法介绍:遍历顺序表,将第一个和最后一个位置的元素记录后,利用后一个标记值判断是否与第一个位置的元素相同,
若相同则与顺序表最后一个元素互换,指针后移,尾指阵前移,顺序表长度减一,依次进行上述操作