按非递减顺序合并两个单调递增集合

#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOE -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n)
{
	LNode *p; 
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;//构造头结点 
	for(int i=n;i>0;i--)
	{
		p=(LinkList)malloc(sizeof(LNode));
		scanf("%d",&p->data);
		p->next=L->next;
		L->next=p;//插入到表头 
	}
}
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
	LNode *pa=La->next,*pb=Lb->next,*pc;
	Lc=pc=La;//用La的头结点作为Lc的头结点 
	while(pa&&pb)
	{
		if(pa->datadata) 
		{
			pc->next=pa;
			pc=pa;
			pa=pa->next;
		}
		else 
		{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
	}
	if(pa) pc->next=pa; 
	else pc->next=pb;//将剩余段插入 
	free(Lb);//释放Lb的头结点 
}
void print(LinkList L,int n)
{
	LNode *p=L;
	for(int i=0;inext->data);
		p=p->next;
	}
	printf("\n");
}
int L_length(LinkList L)
{
	int length=0;
	LNode *p=L;
	while(p->next)
	{
		length++;
		p=p->next;
	}
	return length;
}
int main()
{
	int n;
	LinkList La,Lb,Lc;
	scanf("%d",&n);
	printf("构造长度为%d的线性表La:\n",n);
	CreateList_L(La,n);
	printf("插入值后单链表La为:\n");
	print(La,L_length(La));
	printf("构造长度为%d的线性表Lb:\n",n);
	CreateList_L(Lb,n);
	printf("插入值后单链表La为:\n");
	print(Lb,L_length(Lb));
	MergeList_L(La,Lb,Lc);
	printf("合并后单链表Lc为:\n");
	print(Lc,L_length(Lc));
}

你可能感兴趣的:(线性表,链式存储,严蔚敏数据结构课本)