c语言版数据结构(奇迹冬瓜)-链表实战(1)A=AUB

//c语言版数据结构(奇迹冬瓜)-链表实战(1)A=AUB

//题目:假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B

//思想:
/*
主函数:
初始化集合A和集合B
给A和B集合输入元素
当集合B中的元素不到最后一个元素时
{
   取出B中的元素
   和A中的元素比较
   if(A没有B有)
   {
      插入A的集合里面
   }
}
输出合并后的集合
*/

/*
void main()
{
     List *A=InitL();
	 List *B=InitL();
	 Data d;
	 InputData(A,5);
	 InputData(B,4);
	 while(NULL!=B->next)
	 {
	      d=GetData(B);
		  if(Compare(A,d))
		  {
		     Insert(A,d);
		  }
		  B=B->next;
	 }
	 Output(A);
}

*/

//-----------头文件---------------
  #include<stdio.h>
  #include<stdlib.h>

//-----------宏定义---------------

#define TRUE 1
#define ERROR 0
#define OVERFLOW -2

//-----------结构体和替换---------

typedef int Data;
typedef struct Node
{
	Data d;
	struct Node *next;
}List,*NList;

//-----------函数----------------

int InitL(NList L);
int InputData(NList L,int n);
Data GetData(NList L);
int Compare(NList L,Data d);
void Insert(NList L,Data d);
void OutPut(NList L);

//----------主函数--------------

void main()
{
	List La,Lb,*A=&La,*B=&Lb;
	int n;
	Data d;
	InitL(A);InitL(B);
	printf("输入集合A的元素个数:");
	scanf("%d",&n);
	InputData(A,n);
	printf("输入集合B的元素个数:");
	scanf("%d",&n);
	InputData(B,n);
	B=B->next;
	while(B)
	{
		d=GetData(B);
		printf("---%d---\n",d);
		if(Compare(A,d))
		{
			Insert(A,d);
		}
		B=B->next;
	}
	OutPut(A);
}

//----------其余函数--------------

int InitL(NList L)
{
	if(!(L=(NList)malloc(sizeof(List))))
	{
		exit(OVERFLOW);
	}
	L->next=NULL;
	return TRUE;
}

int InputData(NList L,int n)
{
	NList TempNode=L,StartNode=L,NewNode;
	printf("输入元素:");
	for(;n>0;n--)
	{
		if(!(NewNode=(NList)malloc(sizeof(List))))
	   {
		   exit(OVERFLOW);
		}
		scanf("%d",&NewNode->d);
		TempNode->next=NewNode;
		NewNode->next=NULL;
		TempNode=NewNode;
	}
	L=StartNode;
	return TRUE;
}

Data GetData(NList L)
{
	return L->d;
}

int Compare(NList L,Data d)
{
	NList TempL=L->next,StartL=L;
	while(TempL->next)
	{
		if(d==TempL->d)
		{
			return ERROR;
		}
		TempL=TempL->next;
	}
	L=StartL;
	return TRUE;
}

void Insert(NList L,Data d)
{
	NList TempL=L->next,StartL=L,NewNode;
	while(TempL->next)
	{
		TempL=TempL->next;
	}
	if(!(NewNode=(NList)malloc(sizeof(List))))
	{
		exit(OVERFLOW);
	}
	NewNode->d=d;
	TempL->next=NewNode;
	NewNode->next=NULL;
	L=StartL;
}

void OutPut(NList L)
{
	NList TempL=L->next,StartL=L;
	printf("A=AUB=");
	while(TempL)
	{
		printf("%d ",TempL->d);
		TempL=TempL->next;
	}
	L=StartL;
	getchar();
	getchar();
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章