當前位置:成語大全網 - 書法字典 - c詞典聯盟

c詞典聯盟

#包含?& ltstdio.h & gt

#包含?& ltmalloc.h & gt

typedef?struct?節點?{

int?num

struct?節點?*下壹個;

} AGG

AGG?*CreateList()?{?//?創建壹個循環鏈表並返回列表頭。

AGG?*頭,* p;

int?I,n;

Printf("節點數n?=?");

scanf("%d ",& ampn);

頭?=?p?=?(AGG?*)malloc(sizeof(AGG));?//?專用頭節點

head->;num?=?0;

Printf("輸入?%d?整數(用空格分隔):\n”,n);

對於(我?=?0;?我?& lt?n;?++i)?{

p->;下壹個?=?(AGG?*)malloc(sizeof(AGG));

scanf("%d ",& ampp->;下壹個-& gt;num);

p?=?p->;接下來;

}

p->;下壹個?=?頭;

回歸?頭;

}

作廢?RiseSort(AGG?*頭)?{?//?升序排序

AGG?*p,*s,* pt?

p?=?頭;

s?=?p->;接下來;

while(p->;下壹個?!=?頭)?{

while(s->;下壹個?!=?頭)?{

如果(p->;下壹個-& gt;num?& gt?s-& gt;下壹個-& gt;num)?{

pt?=?p->;接下來;

p->;下壹個?=?s-& gt;接下來;

s-& gt;下壹個?=?p->;下壹個-& gt;接下來;

p->;下壹個-& gt;下壹個?=?pt;

}

不然呢?s?=?s-& gt;接下來;

}

p?=?p->;接下來;

s?=?p->;接下來;

}

}

作廢?簡化(AGG?*頭)?{?//?移除相同的集合元素。

AGG?*p,*q,* s;

p?=?head->;接下來;

q?=?p->;接下來;

而(q?!=?頭)?{

如果(p->;num?==?q->;num)?{

p->;下壹個?=?q->;接下來;

s?=?q;

q?=?q->;接下來;

刪除?s;

}

不然呢?{

p?=?p->;接下來;

q?=?q->;接下來;

}

}

}

AGG?*CreateAgg()?{

AGG?*頭;

頭?=?create list();

RiseSort(頭);;

簡化(頭);

回歸?頭;

}

作廢?InsertNode(AGG?*head,int?num)?{

AGG?*t,*p?=?頭;

while(p->;下壹個?!=?頭)?{

如果(p->;下壹個-& gt;num?==?num)?返回;?

如果(p->;下壹個-& gt;num?& lt?num)?p?=?p->;接下來;

不然呢?{

t?=?(AGG?*)malloc(sizeof(AGG));

t->;num?=?num

t->;下壹個?=?p->;接下來;

p->;下壹個?=?t;

返回;

}

}

t?=(AGG?*)malloc(sizeof(AGG));

t->;num?=?num

p->;下壹個?=?t;?

t->;下壹個?=?頭;?//?鏈表末尾插入的處理

}

AGG?*MergeAgg(AGG?*A,AGG?*B)?{//?A∪B

AGG?*頭,*pa,*pb,*pc,* qc

頭?=?pc?=?(AGG?*)malloc(sizeof(AGG));

爸?=?a-& gt;接下來;

而(pa?!=?a)?{

qc?=?(AGG?*)malloc(sizeof(AGG));

QC-& gt;num?=?pa-& gt;num

PC-& gt;下壹個?=?QC;

pc?=?QC;

爸?=?pa-& gt;接下來;

}

PC-& gt;下壹個?=?頭;

pb?=?b-& gt;接下來;

而(pb?!=?b)?{

InsertNode(head,p B- & gt;num);

pb?=?pb- >接下來;

}

回歸?頭;

}

AGG?*MutualAgg(AGG?*A,AGG?*B)?{//?A∩B

AGG?*C、*pa、*pb、*pc、* qc

c?=?pc?=?(AGG?*)malloc(sizeof(AGG));

PC-& gt;num?=?0;

爸?=?a-& gt;接下來;

pb?=?b;

而(pa?!=?a)?{

pb?=?b-& gt;接下來;

而(pb?!=?b)?{

if(p B- & gt;num?==?pa-& gt;num)?{

qc?=?(AGG?*)malloc(sizeof(AGG));

QC-& gt;num?=?pb- >num

PC-& gt;下壹個?=?QC;

pc?=?QC;

}

pb?=?pb- >接下來;

}

爸?=?pa-& gt;接下來;

}

PC-& gt;下壹個?=?c;

回歸?c;

}

AGG?*DifferAgg(AGG?*A,AGG?*B)?{?//?返回a和b的差集?A-B

AGG?*head,*p,*q,* r;

int?標簽;

頭?=?r?=?(AGG?*)malloc(sizeof(AGG));

對於(p?=?a-& gt;接下來;?p?!=?a;?p?=?p->;下壹個)?{

標簽?=?1;

對於(q?=?b-& gt;接下來;?q?!=?b?& amp& amp?標簽;?q?=?q->;下壹個)

標簽?=?p->;num?!=?q->;num

如果(標簽)?{

r-& gt;下壹個?=?(AGG?*)malloc(sizeof(AGG));

r?=?r-& gt;接下來;

r-& gt;num?=?p->;num

}

}

對於(p?=?b-& gt;接下來;?p?!=?b;?p?=?p->;下壹個)?{

標簽?=?1;

對於(q?=?a-& gt;接下來;?q?!=?答?& amp& amp?標簽;?q?=?q->;下壹個)

標簽?=?p->;num?!=?q->;num

如果(標簽)?{

r-& gt;下壹個?=?(AGG?*)malloc(sizeof(AGG));

r?=?r-& gt;接下來;

r-& gt;num?=?p->;num

}

}

r-& gt;下壹個?=?頭;

RiseSort(頭);

回歸?頭;

}

作廢?PrintList(AGG?*頭)?{

AGG?*p?=?head->;接下來;

矮?櫃臺?=?0;

而(p?!=?頭)?{

如果(計數器?& amp& amp?計數器%10?==?0)?printf(" \ n ");

printf("%5d ",p-& gt;num);

counter++;

p?=?p->;接下來;

}

如果(計數器?%?10)?printf(" \ n ");

}

作廢?freeheap(AGG?*頭)?{

AGG?*p,* q;

p?=?頭;

q?=?p->;接下來;

而(q?!=?頭)?{

p?=?q;

q?=?p->;接下來;

免費(p);

}

免費(頭);

}

int?main()?{

AGG?* A *、B *、C *、D *、E;

Printf("創建收藏?a:\ n ");

答?=?create agg();

Printf("創建收藏?b:\ n ");

b?=?create agg();

Printf("集合A的元素為:\ n ");

打印列表(A);

Printf("集合B的元素是:\ n ");

打印列表(B);

c?=?MutualAgg(A,B);

Printf("交集?c?=?a∩B:\ n ");

打印列表(C);

Printf ("Union?d?=?A∪B?:\ n ");

d?=?MergeAgg(A,B);

打印列表(D);

Printf("差集?d?=?A-B?:\ n ");

e?=?DifferAgg(A,B);

打印列表(E);

free heap(A);

free heap(B);

free heap(C);

free heap(D);

自由堆(E);

printf(" \ n \ n ");

回歸?0;

}