java如何写链表的差集,链表操作复习--集合的差集

/******************************************************************************************

编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,个数都不大于1000),

并以从小到大的次序输出在第一组整数中但不在第二组整数中的所有整数(同一个整数不能输出两次)。

(输入时,两个相邻的整数用空格隔开)。

******************************************************************************************/

#include "stdlib.h"

#include "stdio.h"

typedef struct link_node_type

{

int data ;

struct link_node_type * next ;

} link_node ;

link_node * create_link()

{

int a ;

link_node * temp1 , * temp2 ;

link_node * link = (link_node *)malloc(sizeof(link_node)) ;

link->next = NULL ;

while(7)

{

scanf("%d" , &a) ;

if(a == -9999) return link ;

temp2 = link ;

while(temp2->next!=NULL&&temp2->next->data < a)

temp2 = temp2->next ;

if(temp2->next!=NULL&&temp2->next->data == a)

continue ;

temp1 = (link_node *)malloc(sizeof(link_node)) ;

temp1->data = a ;

temp1->next = temp2->next ;

temp2->next = temp1 ;

}

}

//求差集:link1 - link2

void calc_two_link(link_node * link1 , link_node * link2)

{

int counter = 0 ;

link1 = link1->next ;

link2 = link2->next ;

while(link1!=NULL)

{

if(link2==NULL||link1->data < link2->data)

{

printf("%d " , link1->data) ;

link1 = link1->next ;

counter ++ ;

continue ;

}

if(link1->data > link2->data)

{

link2 = link2->next ;

continue ;

}

link1 = link1->next ;

link2 = link2->next ;

}

if(counter == 0)

printf("空集!\n") ;

}

void show_link(link_node * link)

{

if(link->next==NULL)

printf("此集合为空集!") ;

while(link->next!=NULL)

{

printf("%d " , link->next->data) ;

link = link->next ;

}

printf("\n") ;

}

main()

{

link_node * link1 , * link2 ;

printf("请输入第1组数据,以-9999为结束标记:\n") ;

link1 = create_link() ;

show_link(link1) ;

printf("请输入第2组数据,以-9999为结束标记:\n") ;

link2 = create_link() ;

show_link(link2) ;

printf("第1组数据和第2组数据的差集序列(link1 - link2)为:\n") ;

calc_two_link(link1 , link2) ;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值