69,371
社区成员
发帖
与我相关
我的任务
分享
#include "stdio.h"
#include<stdlib.h>
//#include<malloc.h>
typedef struct node
{
int date ;
struct node *next ;
}Lnode;
Lnode *creater (int m) //创建链表
{
int i ;
Lnode *head , *p , *q ;
head = p =( Lnode *) malloc (sizeof (Lnode)) ;
p->next = NULL ;
for ( i=0 ; i < m ; i++ )
{
q = ( Lnode *) malloc (sizeof (Lnode)) ;
printf ("输入第 %d 个数的值: ",i+1);
scanf ( "%d", &q->date ) ;
if ( i == 0)
p = head = q ;
else
{
p->next = q ;
p = q ;
}
}
q->next = NULL ;
return head ;
}
Lnode *Merge (Lnode *La ,Lnode *Lb ) //合并两个链表
{
Lnode *Lc ,*pa ,*pb ,*pc ,*ptr ;
Lc = La ;
pc = La ;
pa = La->next ;
pb = Lb->next ;
while ( pa != NULL && pb != NULL )
{
if (pa->date < pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
}
if (pa->date > pb->date )
{
pc->next = pb ;
pc = pb ;
pb = pb->next ;
}
if (pa->date == pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
ptr = pb ;
pb = pb->next ;
free ( ptr );
}
}
if ( pa != NULL )
pc->next =pa ;
else
pc->next = pb ;
free ( Lb ) ;
return Lc ;
}
void print ( Lnode *head )
{
int i ;
Lnode *p ;
printf ("\n输出结果 :\n\n") ;
p = head ;
for ( i = 1 ; p != NULL ; i++ )
{
printf ("第 %d 个值 :%d \n", i , p->date ) ;
p = p->next ;
}
}
main()
{
int i, j ;
Lnode *k ,*b ,*c;
printf ("请输入: 链表1,要录入数据的个数: ") ; //创建链表
scanf ("%d",&i ) ;
k = creater ( i ) ;
print ( k );
printf ("请输入: 链表2,要录入数据的个数: ") ; //创建链表
scanf ("%d",&j ) ;
b = creater ( j ) ;
print ( b );
c = Merge ( k , b); //链表合并
printf("合并:\n");
print ( c) ;
free ( c ) ;
}
#include "stdio.h"
#include<stdlib.h>
//#include<malloc.h>
typedef struct node
{
int date ;
struct node *next ;
}Lnode;
Lnode *creater (int m) //创建链表
{
int i ;
Lnode *head , *p , *q ;
head = p =( Lnode *) malloc (sizeof (Lnode)) ;
p->next = NULL ;
for ( i=0 ; i < m ; i++ )
{
q = ( Lnode *) malloc (sizeof (Lnode)) ;
printf ("输入第 %d 个数的值: ",i+1);
scanf ( "%d", &q->date ) ;
if ( i == 0)
{
head->next = q;
p = q;
}
else
{
p->next = q ;
p = q ;
}
}
p->next = NULL;
return head ;
}
Lnode *Merge (Lnode *La ,Lnode *Lb ) //合并两个链表
{
Lnode *Lc ,*pa ,*pb ,*pc ,*ptr ;
Lc = La ;
pc = La ;
pa = La->next ;
pb = Lb->next ;
while ( pa != NULL && pb != NULL )
{
if (pa->date < pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
}
else if (pa->date > pb->date )
{
pc->next = pb ;
pc = pb ;
pb = pb->next ;
}
else if (pa->date == pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
ptr = pb ;
pb = pb->next ;
free ( ptr );
}
}
if ( pa != NULL )
pc->next =pa ;
else
pc->next = pb ;
free ( Lb ) ;
return Lc ;
}
void print ( Lnode *head )
{
int i ;
Lnode *p ;
printf ("\n输出结果 :\n\n") ;
p = head ->next;
for ( i = 1 ; p != NULL ; i++ )
{
printf ("第 %d 个值 :%d \n", i , p->date ) ;
p = p->next ;
}
}
main()
{
int i, j ;
Lnode *k ,*b ,*c;
printf ("请输入: 链表1,要录入数据的个数: ") ; //创建链表
scanf ("%d",&i ) ;
k = creater ( i ) ;
print ( k );
printf ("请输入: 链表2,要录入数据的个数: ") ; //创建链表
scanf ("%d",&j ) ;
b = creater ( j ) ;
print ( b );
c = Merge ( k , b); //链表合并
printf("合并:\n");
print ( c) ;
free ( c ) ;
}
//建立两个有序链表,合并此两链表成为新链表后依然有序.
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct stu
{
ElemType data;
struct stu *next;
}NodeType, *LinkType;
/*
*功能:创建链表(带头结点,尾插法)
*返回值:链表首地址
*
*/
LinkType CreatOrderList()
{
LinkType head, p1, p2;
p1 = (LinkType)malloc(sizeof(NodeType));
head = p1;
while (p1->data != 0)//默认链表中data!=0,当data=0时链表结束
{
p2 = p1;
p1 = (LinkType)malloc(sizeof(NodeType));
scanf("%d", &p1->data);
p2->next = p1;
}
p2->next = NULL;
free(p1);
return head;
}
/*
*功能:输出链表
*参数:链表首地址
*/
void Output(LinkType head)
{
head = head->next;
while (head != NULL)
{
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
/*
*功能:合并链表
*参数:两个链表首地址
*返回值:合并后链表的首地址
*/
LinkType Mergelink(LinkType La, LinkType Lb)
{
LinkType Lc, HeadC;
HeadC = La;
Lc = HeadC;
La = La->next;
Lb = Lb->next;
while (La && Lb)
{
if (La->data > Lb->data)//将data较小的连接到Lc
{
Lc->next = Lb;
Lb = Lb->next;
}
else
{
Lc->next = La;
La = La->next;
}
Lc = Lc->next;
}
Lc->next = La ? La : Lb;//将La 或 Lb剩下的部分连接到Lc
return HeadC;
}
int main()
{
LinkType HeadA, HeadB, HeadC;
printf("Input first link:\n");
HeadA = CreatOrderList();
printf("Input second link:\n");
HeadB = CreatOrderList();
printf("\n");
HeadC = Mergelink(HeadA,HeadB);
printf("After merger:\n");
Output(HeadC);
return 0;
}
#include "stdio.h"
#include<stdlib.h>
#include <string.h>
//#include<malloc.h>
typedef struct node
{
int date ;
struct node *next ;
}Lnode;
Lnode *creater (int m) //创建链表
{
int i ;
Lnode *head , *p , *q ;
head = p =( Lnode *) malloc (sizeof (Lnode)) ;
memset(p, 0, sizeof(Lnode));
p->next = NULL ;
for ( i=0 ; i < m ; i++ )
{
q = ( Lnode *) malloc (sizeof (Lnode)) ;
memset(q, 0, sizeof(Lnode));
printf ("输入第 %d 个数的值: ",i+1);
scanf ( "%d", &q->date ) ;
if ( i == 0)
p = head = q ;
else
{
p->next = q ;
p = q ;
}
}
q->next = NULL ;
return head ;
}
Lnode *Merge (Lnode *La ,Lnode *Lb ) //合并两个链表
{
Lnode *Lc ,*pa ,*pb ,*pc ,*ptr ;
Lc = La ;
pc = La ;
pa = La->next ;
pb = Lb->next ;
while ( pa != NULL && pb != NULL )
{
if (pa->date < pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
}
if (pa->date > pb->date )
{
pc->next = pb ;
pc = pb ;
pb = pb->next ;
}
if (pa->date == pb->date )
{
pc->next = pa ;
pc = pa ;
pa = pa->next ;
ptr = pb ;
pb = pb->next ;
free ( ptr );
}
}
if ( pa != NULL )
pc->next =pa ;
else
pc->next = pb ;
free ( Lb ) ;
return Lc ;
}
void print ( Lnode *head )
{
int i ;
Lnode *p ;
printf ("\n输出结果 :\n\n") ;
p = head ;
for ( i = 1 ; p != NULL ; i++ )
{
printf ("第 %d 个值 :%d \n", i , p->date ) ;
p = p->next ;
}
}
int main()
{
int i,j ;
Lnode *k ,*b ,*c;
printf ("请输入: 链表1,要录入数据的个数: ") ;//创建链表
scanf ("%d",&i ) ;
k = creater ( i ) ;
print ( k );
printf ("请输入: 链表2,要录入数据的个数: ") ; //创建链表
scanf ("%d",&j ) ;
b = creater ( j ) ;
print ( b );
c = Merge ( k , b); //链表合并
printf("合并:\n");
print ( c) ;
free ( c ) ;
return 0;
}