数据结构作业之线性表求并集

数据结构作业,两个线性表求并集

#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; 
 } 
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值