谢谢! 还有个问题 闹腾一天了还没弄好
# include
# include
# include
typedef struct Studen
{
char name[10];
char sex[10];
float result;
struct Studen * pNext;
}NODE, * PNODE;
// 函数申明
PNODE create_list(void); // 创造一个链表
void ergodic_list(PNODE); // 遍历输入链表内容
void sort(PNODE); // 对链表内容进行排序
//主函数
int main(void)
{
PNODE pHead = NULL;
pHead = create_list(); // 创造链表
sort(pHead); // 对链表内容进行排序
ergodic_list(pHead); // 遍历输入链表内容
return 0;
}
// 创造链表
PNODE create_list(void)
{
int i;
int len;
PNODE pHead = (PNODE)malloc (sizeof(NODE)); // 创造链表首节点
if (NULL == pHead)
{
printf ("分配内存失败,请与程序员联系,程序终止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf ("请输入学生个数: ");
scanf ("%d", &len);
printf ("\n");
for (i=0; i
{
PNODE pNew = (PNODE)malloc (sizeof(NODE));
if (NULL == pNew)
{
printf ("分配内存失败,请与程序员联系,程序终止!\n");
exit(-1);
}
printf ("请输入第%d个学生的信息:\n", i+1);
printf (" 姓名: ");
scanf ("%s", pNew->name);
printf (" 性别: ");
scanf ("%s", pNew->sex);
printf (" 成绩: ");
scanf ("%f", &pNew->result); // 第50行
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
printf ("\n");
}
printf ("\n");
return pHead;
}
//遍历输出函数
void ergodic_list(PNODE pHead)
{
PNODE p = pHead->pNext;
int i =0;
while (NULL != p)
{
++i;
printf ("第%d名学生信息:\n ", i);
printf ("名字: %s\n", p->name);
printf (" 性别: %s\n", p->sex);
printf (" 成绩: %f\n", p->result);
p = p->pNext;
printf ("\n");
}
printf ("\n");
return;
}
// 对链表进行排序
void sort(PNODE pHead)
{
int len = 0;
PNODE p = pHead->pNext;
while (NULL != p)
{
++len;
p = p->pNext;
}
int i, j;
float t;
PNODE q = p->pNext;
for (i=0, p = pHead->pNext; ipNext)
{
for (j=i+1, q = p->pNext; jpNext)
{
if (p->result < q->result)
{
t = p->result; // 200行
p->result = q->result;
q->result = t;
}
}
}
return;
}
这个程序第200行 排序的地方 只对 p->result 这个数据进行了排序 整个结构体中的数据域还有char name; char sxe; 怎么样才能让整个结构体和原录入的时候一样进行排序输出. 我做的这个是按学生成绩排序,然后按成绩排名之后输出, 但是现在只移动了成绩 名字和性别没有和成绩一起移动