实现有序表的合并

//单链表实现
 
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define M 5

typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;

LNode *CreateList(int n);
void MergeList(LNode *pa,LNode *pb,LNode *pc);

int main()
{
	LinkList LA,LB,LC;
	LNode *pa,*pb,*pc;
	
	//创建链表LA LB 
	LA=CreateList(N);
	LB=CreateList(M);
	
	//创建空表LC
	LC=(LinkList)(malloc(sizeof(LNode)));
	LC->next=NULL;
	
	pa=LA->next;
	pb=LB->next;
	pc=LC;
	
	MergeList(pa,pb,pc);
	
	for(pc=LC->next;pc;pc=pc->next)
		printf("%3d",pc->data);
	putchar('\n');
	
	return 0;
}

LNode *CreateList(int n)
{
	LinkList L;
	LNode *p;
	
	L=(LinkList)(malloc(sizeof(LNode)));
	L->next=NULL;
	
	int i;
	printf("Enter %d numbers: ",n);
	for(i=0;i<n;i++)
	{
		p=(LinkList)(malloc(sizeof(LNode)));
		scanf("%d",&p->data);
		
		p->next=L->next;
		L->next=p;
	}
	
	return L;
}

void MergeList(LNode *pa,LNode *pb,LNode *pc)
{
	while(pa&&pb)
	{
		if(pa->data<=pb->data)
		{
			pc->next=pa;
			pc=pa;
			pa=pa->next;
		}
		else
		{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
	}
	
	pc->next=pa?pa:pb;
}
//顺序表实现

#include<stdio.h>
#include<stdlib.h>
#define N 10
#define M 5

typedef struct 
{
	int *elem;
	int length;	
}SqList;

int *CreateList(int n);
void MergeList(int lengthA,int lengthB,int *elemA,int *elemB,int *elemC);

int main()
{
	SqList LA,LB,LC;
	int i;
	
	LA.length=5;
	LB.length=3;
	
	//创建表LA LB
	LA.elem=CreateList(LA.length);
	LB.elem=CreateList(LB.length); 
	
	//创建空表LC
	LC.elem=(int *)(malloc(sizeof(int)*(LA.length+LB.length)));
	
	//将LA LB 合并到LC
	MergeList(LA.length,LB.length,LA.elem,LB.elem,LC.elem); 
	
	for(i=0;i<LA.length+LB.length;i++)
		printf("%3d",LC.elem[i]);
	putchar('\n');
	
	return 0;
}

int *CreateList(int n)
{
	SqList L;
	int i;
	
	L.elem=(int *)(malloc(sizeof(int)*n));
	
	printf("Enter %d numbers: ",n);
	for(i=0;i<n;i++)
		scanf("%d",&L.elem[i]);
		
	return L.elem;
}

void MergeList(int lengthA,int lengthB,int *elemA,int *elemB,int *elemC)
{
	int i,j,k;
	
	i=j=k=0;
	while(i<lengthA&&j<lengthB)
	{
		if(elemA[i]<=elemB[j])
		{
			elemC[k]=elemA[i];
			i++;
			k++;
		}
		else
		{
			elemC[k]=elemB[j];
			j++;
			k++;
		}
	}
	
	
	
	
	if(i>=lengthA)
		for(;j<lengthB;j++)
			elemC[k++]=elemB[j];
	else
		for(;i<lengthA;i++)
			elemC[k++]=elemA[i];
}

猜你喜欢

转载自blog.csdn.net/Huayra221/article/details/81116050
今日推荐