#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
int data;
struct lnode *next;
}londe,*linklist;
void input(linklist &l)
{
linklist p,r;
l=new londe;
l->next=NULL;
p=l;
r=new londe;
scanf("%d",&r->data);
r->next=NULL;
while(r->data!='*')
{
r=new londe;
r=r->next;
scanf("%d",&r->data);
}
r->next=NULL;
p->next=r;
}
void output(linklist l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
londe *unlist(linklist &la,linklist &lb,linklist &lc)
{
linklist pa,pb,pc;
pa=la->next;
pb=lb->next;
lc=la;
pc=lc;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
delete lb;
return pc;
}
int listlength(linklist l)
{
int i=0;
linklist p;
p=l->next;
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
londe *jiaolist(linklist &la,linklist &lb,linklist &lc)
{
int GetElem(linklist l,int i,int &e);
linklist pa,pb,pc,p;
int m,n,i,x,e,a,b;
pa=la->next;
pb=lb->next;
pc=p;
m=listlength(la);
n=listlength(lb);
for(i=1;i<=m;i++)
for(x=1;x<=n;x++)
{
a=GetElem(la,i,e);
b=GetElem(lb,x,e);
if(a==b)
{
p=new londe;
p->data=https://bbs.csdn.net/topics/e;
}
}
return pc;
}
int GetElem(linklist l,int i,int &e)
{
linklist p;
p=l->next;
int b,j;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>1)
return -1;
b=p->data;
return b;
}
londe *chalist(linklist &la,linklist &lb,linklist &lc)
{
linklist pa,pb,pc,p;
int m,n,i,x,e,a,b;
pa=la->next;
pb=lb->next;
pc=p;
m=listlength(la);
n=listlength(lb);
for(i=1;i<=m;i++)
{
for(x=1;x<=n;x++)
{
a=GetElem(la,i,e);
b=GetElem(lb,x,e);
if(a!=b)
break;
}
if(a!=b)
{
p=new londe;
p->data=https://bbs.csdn.net/topics/a;
}
}
return pc;
}
int main()
{
linklist la,lb,lc;
printf("請輸入la的元素:");
input(la);
printf("請輸入lb的元素:");
input(lb);
printf("求并集:");
output(unlist(la,lb,lc));
printf("求交集:");
output(jiaolist(la,lb,lc));
printf("求差集:");
output(chalist(la,lb,lc));
return 0;
}
uj5u.com熱心網友回復:
void input(linklist &l)
{
linklist p,r;
l = new londe;
l->next = NULL;
p=l;
r = new londe;
scanf("%d",&r->data);
r->next = NULL;
#if 1
while(r->data != -1)
{
p->next = r;
p = r;
r = new londe;
scanf("%d",&r->data);
}
p->next = NULL;
free(r); //最后一個申請了空間但是沒有加入鏈表
#else
while(r->data != '*')
{
r = new londe;
r=r->next;
scanf("%d",&r->data);
}
r->next=NULL;
p->next=r;
#endif
}
void output(linklist l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
putchar(10);
}
供參考~
樓主的問題是如何用%d輸入'*'呢,當然也可以輸入42就可以了。但是直接輸入*是不可以的。
另外,樓主再求并集,交集,差集時,注意求完并集后,la, lb的鏈表已經被修改了,后面再用la, lb交集和差集就會有問題了。可以想想看是不是這個問題?
uj5u.com熱心網友回復:
我的求交集,并集,差集的函式都有些問題,我一個一個的運行都出不來結果,可以幫我看看嗎
uj5u.com熱心網友回復:
我的求交集,并集,差集的函式都有些問題,我一個一個的運行都出不來結果,可以幫我看看嗎
uj5u.com熱心網友回復:
我的求交集,并集,差集的函式都有些問題,我一個一個的運行都出不來結果,可以幫我看看嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100349.html
標籤:C語言
上一篇:檔案中存放的是逗號分開的float型數字,有N行。使用C/C++讀取檔案,將資料存放在二維陣列里面。
下一篇:MATLAB2012a安裝后打開顯示Runtime error,安裝檔案中無atlas_athlon.dll檔案windows7,改兼容性也不行,求解答
