设有如下结构体:
struct student
{
int num;
char name[10];
int grade;
}
按学生成绩等级将学生信息添加到相应等级的链表中。
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
conio.h
>
#define
N 13
extern
unsigned _floatconvert;
/*
防止floating point formats not linked 错误发生
*/
#pragma extref _floatconvert
typedef
struct
student
{
int
num;
char
name[
10
];
int
grade;
}Stu;
Stu stu[N]
=
{{
2
,
"
Lin
"
,
92
},
{
3
,
"
Zhang
"
,
87
},
{
4
,
"
Zhao
"
,
72
},
{
5
,
"
Ma
"
,
91
},
{
9
,
"
Zhen
"
,
85
},
{
11
,
"
Wang
"
,
100
},
{
12
,
"
Li
"
,
86
},
{
13
,
"
Xu
"
,
83
},
{
16
,
"
Mao
"
,
78
},
{
17
,
"
Hao
"
,
95
},
{
20
,
"
Lu
"
,
82
},
{
21
,
"
Song
"
,
76
},
{
22
,
"
Wu
"
,
88
}};
typedef
struct
node
{
Stu
*
data;
struct
node
*
next;
}Node;
void
show(Node
*
h)
{
Node
*
p;
p
=
h;
while
(p
->
next
!=
NULL)
{
printf(
"
%d\t%s\t%d\n
"
,p
->
data
->
num,p
->
data
->
name,p
->
data
->
grade);
p
=
p
->
next;
}
}
void
save(Node
*
h,Stu
*
p)
{
Node
*
s,
*
t;
s
=
(Node
*
)malloc(
sizeof
(Node));
t
=
h;
while
(t
->
next
!=
NULL) t
=
t
->
next;
s
->
data
=
p;
s
->
next
=
NULL;
t
->
next
=
s;
}
void
main()
{
int
i,j,k,flag[
4
]
=
{
0
};
Node
*
h[
4
]
=
{NULL},
*
p;
for
(i
=
0
;i
<
N;i
++
)
for
(j
=
1
;j
<
4
;j
++
)
{
k
=
10
-
int
(stu[i].grade
/
10
);
if
(k
==
0
) k
++
;
if
(k
==
j)
if
(flag[j]
==
0
)
{
flag[j]
=
1
;
p
=
(Node
*
)malloc(
sizeof
(Node));
h[j]
=
p;
p
->
data
=&
stu[i];
p
->
next
=
NULL;
}
else
save(h[j],
&
stu[i]);
}
for
(i
=
1
;i
<
4
;i
++
)
{
printf(
"
The NO.%d table:\n
"
,i);
show(h[i]);
}
getch();
}