SDUTACMデータ構造のオンラインテスト1:順序表の応用
2468 ワード
タイトルの説明
長さn(n<1000)のシーケンステーブルには、同じ値の「余分」データ要素(タイプが整数)が存在する可能性があります.プログラムを作成して、「余分」データ要素をシーケンステーブルから削除し、テーブルを1つの「非純粋テーブル」(同じ値の要素がテーブルに複数ある可能性がある)から1つの「純粋テーブル」(同じ値の要素がテーブルに1つしかない)にします.
入力
第1行入力テーブルの長さn;
2行目には、シーケンステーブルに最初に格納されたn個の要素値が順次入力されます.
しゅつりょく
第1行の出力が完了した余分な要素削除後の順序テーブルの要素数.
2行目は、削除が完了したシーケンステーブル要素を順次出力します.
サンプル入力
12
5 2 5 3 3 4 2 5 7 5 4 3
サンプル出力
5
5 2 3 4 7
ヒント
可能な限り少ない時間とセカンダリストレージスペースを使用します。
最小限のアシストストレージが要求される以上、チェーンテーブルで実現しましょう.
#include
#include
struct hh
{
int data;
struct hh *next;
};
void main()
{
struct hh *p,*head,*t,*q;
int n,i,j,s,flag;
head=(struct hh *)malloc(sizeof(struct hh));
head->next=NULL;
t=head;
scanf("%d",&n);
for(i=0;idata);
p->next=t->next;
t->next=p;
t=p;
}
p=head->next;
t=p->next;
s=1;
while(t!=NULL)
{
flag=0;
q=head->next;
for(i=0;idata==q->data)
{
p->next=t->next;
free(t);
t=p->next;
flag=1;
n--;
break;
}
else
q=q->next;
}
if(flag==0)
{
s++;
t=t->next;
p=p->next;
}
}
p=head->next;
printf("%d
",n);
for(i=1;idata);
p=p->next;
}
printf("%d
",p->data);
}