有a,b两个已按学号升序排序的链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,仍按学号升序排列。
#include
<
stdio.h
>
#include
<
stdlib.h
>
#define
N 10
typedef
struct
student{
int
num;
float
score;
struct
student
*
next;}STU;STU
*
create(){
int
i; STU
*
p,
*
head
=
NULL,
*
tail
=
head;
for
(i
=
0
;i
<
N;i
++
) { p
=
(STU
*
)malloc(
sizeof
(STU)); scanf(
"
%d%f
"
,
&
p
->
num,
&
p
->
score); p
->
next
=
NULL;
if
(p
->
num
<
0
) { free(p);
break
; }
if
(head
==
NULL) head
=
p;
else
tail
->
next
=
p; tail
=
p; }
return
head;}
void
output(STU
*
p){
while
(p
!=
NULL) { printf(
"
%d/t%.2f/n
"
,p
->
num,p
->
score); p
=
p
->
next; }}STU
*
link(STU
*
p1,STU
*
p2){ STU
*
p,
*
head;
if
(p1
->
num
<
p2
->
num) { head
=
p
=
p1; p1
=
p1
->
next; }
else
{ head
=
p
=
p2; p2
=
p2
->
next; }
while
(p1
!=
NULL
&&
p2
!=
NULL) {
if
(p1
->
num
<
p2
->
num) { p
->
next
=
p1; p
=
p1; p1
=
p1
->
next; }
else
{ p
->
next
=
p2; p
=
p2; p2
=
p2
->
next; } }
if
(p1
!=
NULL) p
->
next
=
p1;
else
p
->
next
=
p2;
return
head;}
int
main(
int
argc,
char
*
argv[]) { STU
*
a,
*
b,
*
c; printf(
"
/n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)/n
"
); a
=
create(); printf(
"
/n请输入链表b的信息,学号小于零时结束输入:格式(学号 成绩)/n
"
); b
=
create(); printf(
"
/n链表a的信息为:/n
"
); output(a); printf(
"
/n链表b的信息为:/n
"
); output(b); c
=
link(a,b); printf(
"
/n合并后的链表信息为:/n
"
); output(c);
return
0
;}
转载请注明原文地址: https://ibbs.8miu.com/read-2227140.html