List.h
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
/*
*定义链式存储线性表的结构
*/
typedef struct Node{
int data ;
struct Node *next ;
}Node;
typedef struct List{
Node *head ;
int count ;
}List ;
//初始化
void init(List * L){
//分个头结点
L->head = (Node*)malloc(sizeof(Node)) ;
if(!L->head){
exit(1) ;
}
L->head->next = NULL ;
L->head->data = -1 ;
}
//尾插法方便观察合并效果
void add(List *L , int data){
Node *newNode = (Node*)malloc(sizeof(Node)) ;
newNode->data = data ;
newNode->next = NULL ;
Node *p = L->head ;
while(p->next){
p = p->next ;
}
p->next = newNode ;
L->count++ ;
}
//打印
void print(List *L){
Node *p = L->head->next ;
while(p){
printf("%d " , p->data);
p = p->next ;
}
}
#endif // LIST_H_INCLUDED
Merge
#ifndef MERGE_H_INCLUDED
#define MERGE_H_INCLUDED
#include "List.h"
#include <stdio.h>
#include <stdlib.h>
void Merge(List *a , List *b , List *c){
c->head = a->head ;
Node *la = a->head->next ;
Node *lb = b->head->next ;
Node *p = c->head ;
//节点为空表示到了表尾
while(la && lb){
if(la->data < lb->data){
p->next = la ;
p = la ;
la = la->next ;
c->count++ ;
}
else {
p->next = lb ;
p = lb ;
lb = lb->next ;
c->count++ ;
}
}
//将剩余的直接连到c后面
while(la){
p->next = la ;
la = la->next ;
}
while(lb){
p->next = lb ;
lb = lb->next ;
}
//释放多余的b的头结点
free(b->head) ;
}
#endif // MERGE_H_INCLUDED