数据结构作业,两个线性表求并集
#include <stdio.h>
#include <stdlib.h>
typedef struct lnode
{
int data;
struct lnode *next;
}Lnode,*Linklist;
int initlinklist(Linklist &L)
{
L=(Linklist)malloc(sizeof(Lnode));
if(L==NULL)
return 0;
L->next=NULL;
return 1;
}
int insertlinklist(Linklist L,int i,int num)
{
Linklist P=L,S;
int pos=0;
while(pos<i-1&&P!=NULL)
{
P=P->next;
pos++;
}
S=(Linklist)malloc(sizeof(Lnode));
S->data=num;
S->next=P->next;
P->next=S;
return 1;
}
int createlinklist(Linklist &L)
{
initlinklist(L);
int n;
char yn;
Linklist Q=L;
do
{
printf("input:");
scanf("%d",&n);getchar();
insertlinklist(L,1,n);
printf("Continue?y/n:");
yn=getchar();
}while(yn=='y');
return 1;
}
void displinklist(Linklist L)
{
Linklist P=L->next;
while(P)
{
printf("%d ",P->data);
P=P->next;
}
printf("\n");
}
int comlinklist(Linklist L,Linklist M,Linklist &N)
{
Linklist P=L->next;
Linklist S=M->next;
while(P)
{
while(S)
{
if(P->data==S->data)
{
insertlinklist(N,1,P->data);
break;
}
S=S->next;
}
S=M->next;
P=P->next;
}
return 1;
}//链表求并集
typedef struct
{
int *Data;
int length;
int sqlistsize;
}sqlist;
int initsqlist(sqlist *L,int max)
{
L->Data = (int *)malloc(sizeof(int)*max);
if(L==NULL)
return 0;
L->length=0;
L->sqlistsize=max;
return 1;
}
int createsqlist(sqlist *L,int max)
{
initsqlist(L,max);
int num,i=0;
char yn;
do
{
printf("input:");
scanf("%d",&num);
L->Data[i]=num;
i++;
L->length++;
getchar();
printf("Continue?y/n:");
yn=getchar();
}while(yn=='y');
return 1;
}
void dispsqlist(sqlist l)
{
int i;
for(i=0;i<l.length;i++)
printf("%d",l.Data[i]);printf("\n");
}
int comsqlist(sqlist l,sqlist m,sqlist &n)
{
int i,j,k=0;
for(i=0;i<l.length;i++)
for(j=0;j<m.length;j++)
{
if(l.Data[i]==m.Data[j])
{
n.Data[k]=l.Data[i];
k++;n.length++;
break;
}
}
return 1;
}//顺序表求并集
int main()
{
int t; sqlist l,m,n; Linklist L,M,N;
do
{
printf("实现顺序表并集:1,链表:2,结束:3: ");
scanf("%d",&t);
switch(t)
{
case 1:
printf("input first sqlist\n");
createsqlist(&l,10);
printf("input second sqlist\n");
createsqlist(&m,10);
initsqlist(&n,10);
comsqlist(l,m,n);
dispsqlist(n);break;
case 2: {
printf("input first linklist\n");
createlinklist(L);
printf("input second linklist\n");
createlinklist(M);
Linklist P=L->next;
Linklist S=M->next;
initlinklist(N);
comlinklist(L,M,N);
displinklist(N);break;}
case 3: return 0;
}
}while(1);
return 0;
}