集合AUB (用单链表实现)(C语言)

mian.cpp文件

#include <stdio.h>
#include <stdbool.h>
#include "LNodeLinkList.h"

int main()
{
	LNodeLinkList *LA;
	LNodeLinkList *LB;
	ElemType e;
	
	int A[10] = {1,2,3,4,5,6,7,8,9,10};
	int B[10] = {2,3,45,19,23,47,1,35,32,12};
	
	CreateLNodeLinkList_A(LA,A,10);		//使用尾插法将数组A的元素插入链表 
	printf("集合A:");	
	ShowLNodeLinkList(LA);
	
	CreateLNodeLinkList_B(LB,B,10);		//使用头插法将数组B的元素插入链表 
	printf("集合B:");	
	ShowLNodeLinkList(LB);
	
	int length_suzhu_A = LNodeLinkListLength(LA);
	int length_suzhu_B = LNodeLinkListLength(LB);
	
	printf("集合A的长度:%5d\n",length_suzhu_A);
	printf("集合B的长度:%5d\n",length_suzhu_B);
	
	int i = 1;
	while(i <= length_suzhu_B)
	{
		int Elem = GetElemInLNodeLinkList_B(LB,i,e);
		if(LocalElemLNodeLinkList_A(LA,Elem) != NULL)
		{
			i++;
		}
		else
		{
			length_suzhu_A++;
			InsertLNodeLinkList_A(LA,length_suzhu_A,e);
		}
	}
	
	printf("集合 AUB 为:");
	ShowLNodeLinkList(LA);
	return 1;
}

LNodeLinkList.h文件

#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>

typedef int ElemType;

typedef struct LNode
{
	ElemType data;			//data域
	struct LNode *next;	 	//next域 
}LNodeLinkList;

void CreateLNodeLinkList_A(LNodeLinkList * &L,ElemType suzhu_A[],int length_A)		//尾插法 
{
		LNodeLinkList *r;
		LNodeLinkList *temp;
		L = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
		r = L;
		/* 
		for(int i = 1; i <= length_A; i++)
		{
			temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
			
			temp->data = suzhu_A[i-1];
			
			r->next = temp;
			r = temp;
		}
		*/
		int i = 1;
		while(i <= length_A)
		{
			temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
			
			temp->data = suzhu_A[i-1];
			
			r->next = temp;
			r = temp;
			
			i++;
		}
		
		r->next = NULL;
} 

void CreateLNodeLinkList_B(LNodeLinkList * &L,ElemType suzhu_B[],int length_B)		//头插法 ,需要将 L->next(首原结点) 赋予 NULL 
{
		LNodeLinkList *temp;
		L = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
		L->next = NULL;
		/* 
		for(int i = 1; i <= length_B; i++)
		{
			temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
			
			temp->data = suzhu_B[i-1];
			
			temp->next = L->next;
			L->next = temp;
		}
		*/
		
		int i = 1;
		while(i <= length_B)
		{
			temp = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
			
			temp->data = suzhu_B[i-1];
			
			temp->next = L->next;
			L->next = temp;
			
			i++;
		}
} 

void ShowLNodeLinkList(LNodeLinkList *L)		//展示链表 
{
	LNodeLinkList *p;
	p = L->next;
	
	while(p != NULL)
	{
		printf("%5d",p->data);
		p = p->next;
	}
	printf("\n");
}


int LNodeLinkListLength(LNodeLinkList *L)		//求链表的长度 
{
	int length = 0;
	LNodeLinkList *p;
	
	p = L->next;
	
	while(p != NULL)
	{
		length++;
		p = p->next;
	}
	
	return length;
}


int GetElemInLNodeLinkList_B(LNodeLinkList *L,int weizhi_B,ElemType &e)		//查找集合 B 中的某一个元素,并取出其 e 值 
{
	LNodeLinkList *r;
	r = L;
	
	/*
	int j = 1;
	while(r != NULL && j <= weizhi_B)
	{
		j++;
		r = r->next;
	}
	*/
	
	for(int i = 1; i <= weizhi_B; i++)
	{
		if(r != NULL)
		{
			r = r->next;
		}
		else
		{
			break;
		}
	}
	
	if(r == NULL)
	{
		return 0;
	}
	else
	{
		e = r->data;
		return e;
	}

}



bool LocalElemLNodeLinkList_A(LNodeLinkList *L,ElemType e)
{
	LNodeLinkList *p;
	p = L->next;
	int index_A = 1;
	
	while(p != NULL && p->data != e)
	{
		p = p->next;
		index_A++;
	}

	if(p != NULL)
	{
		return true;
	}
	else
	{
		return false;
	}
}


int InsertLNodeLinkList_A(LNodeLinkList * &L,int length_A,ElemType e)		//将 集合B 中提取出的元素(集合A没有)插入到 集合A 中 
{
	LNodeLinkList *s;
	LNodeLinkList *p;
	p = L;
	int index_A = 1;
	/*
	if(length_A <= 0)
	{
		return 0;
	}
	while(p != NULL && index_A <= length_A-1)
	{
		index_A++;
		p = p->next;
	}
	if(p == NULL)
	{
		return 0;	
	}
	else
	{
		s = (LNodeList *)malloc(sizeof(LNodeList));
		s->data = e;
		s->next = p->next;
		p->next = s;
		return 1;
	}
	*/
	length_A--;
	if(length_A > 0)
	{
		/*
		while(p != NULL && index_A <= length_A)
		{
			index_A++;
			p = p->next;
		}
		if(p != NULL)
		{
			s = (LNodeList *)malloc(sizeof(LNodeList));
			s->data = e;
			s->next = p->next;
			p->next = s;

			return 1;
		}
		*/
		for(;index_A <= length_A; index_A++)
		{
			if(p != NULL)
			{
				p = p->next;	
			}
			else
			{
				break;
			}
		}
		if(p != NULL)
		{
			s = (LNodeLinkList *)malloc(sizeof(LNodeLinkList));
			s->data = e;
			s->next = p->next;
			p->next = s;
			return 1;
		}
	}
	else
	{
		return 0;
	}
}

运行结果
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值