Posted on 2012-08-12 22:23
hoshelly 阅读(2005)
评论(0) 编辑 收藏 引用 所属分类:
Programming 、
DS && Algorithm
输入10个学生的成绩,编写一程序对学生的成绩按从高到低输出,要求用链表实现。
#include<stdio.h>
#include<stdlib.h>
struct Stu
{
int score;
struct Stu *next;
};
typedef
struct Stu Node;
int main()
{
int i;
Node *head,*p,*q;
head=(Node*)malloc(
sizeof(Node));
//创建头结点
if(head == NULL)
{
printf("Memory is not enough!");
return 0;
}
head->next=NULL;
for(i=0;i<10;i++)
{
p=(Node*)malloc(
sizeof(Node));
//创建一个新结点p
if(p == NULL)
{
printf("no enough memory!");
return 0;
}
printf("Input the %dth student's score: ",i+1);
scanf("%d",&p->score);
//输入成绩
q=head;
while(q->next != NULL)
//遍历链表
{
if(q->next->score < p->score)
//如果发现链表中的某个成绩比当前输入成绩小,就跳出循环,在其前面插入当前输入成绩
break;
q=q->next;
//继续遍历直到遍历的成绩比当前输入的成绩小
}
p->next=q->next;
//这是当前成绩插入到链表中比其小的成绩前面的代码
q->next=p;
}
p=head->next;
while(p !=NULL)
{
printf("%d ",p->score);
p=p->next;
}
p=head;
while(p->next !=NULL)
{
q=p->next;
p->next=q->next;
free(q);
}
free(head);
return 0;
}