#include
<
stdio.h
>
#include < malloc.h >
struct info
{
int num;
int score;
} ;
struct student
{
struct info infor;
struct student *next;
} ;
int n;
struct student * creat( void )
{
struct student *head, *p1, *p2;
n = 0;
p1 = p2 = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &p1->infor.num, &p1->infor.score);
head = NULL;
while (p1->infor.num != 0 )
{
n++;
if (n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &p1->infor.num, &p1->infor.score);
}
p2->next = NULL;
return head;
}
void show( struct student * head)
{
struct student *p;
printf(" Now, These %d records are: ", n);
p = head;
if (head != NULL)
{
do
{
printf("%d %d ", p->infor.num, p->infor.score);
p = p->next;
}while (p != NULL);
}
}
struct student * insert( struct student * head, struct student * stud)
{
struct student *p1, *p2, *p3;
p2 = head;
p1 = stud;
if (head == NULL)
{
head = p1;
p1->next = NULL;
}
else
{
while (p1->infor.num > p2->infor.num && p2->next != NULL)
{
p3 = p2;
p2 = p2->next;
}
if (p1->infor.num <= p2->infor.num)
{
if (head == p2)
{
head = p1;
}
else
{
p3->next = p1;
}
p1->next = p2;
}
else
{
p2->next = p1;
p1->next = NULL;
}
}
n++;
return head;
}
struct student * del( struct student * head, int num)
{
struct student *p1, *p2;
if (head == NULL)
{
printf(" , list null ");
return head;
}
p1 = head;
while (p1->infor.num != num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (p1->infor.num == num)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
printf(" delete: %d ", num);
n--;
}
if (p1 == NULL)
{
printf(" %d not been found ", num);
}
return head;
}
struct student * sort( struct student * head)
{
struct student *p1, *p2;
struct info temp;
if (head == NULL)
{
printf(" list null ");
return head;
}
p1 = head;
p2 = p1->next;
while (p1 != NULL)
{
while (p2 != NULL)
{
if (p1->infor.score > p2->infor.score)//可以设置为根据成绩排序或学好排序
{
temp = p1->infor;
p1->infor = p2->infor;
p2->infor = temp;
}
p2 = p2->next;
}
p1 = p1->next;
if (p1->next == NULL)
{
break;
}
else
{
p2 = p1->next;
}
}
return head;
}
int main()
{
struct student *head, *stu;
int num;
printf("input records: ");
head = creat();
show(head);
printf(" input the deleted number:");
scanf("%d", &num);
while (num != 0)
{
head = del(head, num);
show(head);
printf(" input the deleted number:");
scanf("%d", &num);
}
printf(" input the inserted record:");
stu = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &stu->infor.num, &stu->infor.score);
while (stu->infor.num != 0)
{
head = insert(head, stu);
show(head);
printf(" input the inserted record:");
stu = (struct student *)malloc(sizeof(struct student));//重新分配一次内存,以免覆盖掉上一次的节点
scanf("%d, %d", &stu->infor.num, &stu->infor.score);
}
head = sort(head);
show(head);
return 0;
}
#include < malloc.h >
struct info
{
int num;
int score;
} ;
struct student
{
struct info infor;
struct student *next;
} ;
int n;
struct student * creat( void )
{
struct student *head, *p1, *p2;
n = 0;
p1 = p2 = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &p1->infor.num, &p1->infor.score);
head = NULL;
while (p1->infor.num != 0 )
{
n++;
if (n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &p1->infor.num, &p1->infor.score);
}
p2->next = NULL;
return head;
}
void show( struct student * head)
{
struct student *p;
printf(" Now, These %d records are: ", n);
p = head;
if (head != NULL)
{
do
{
printf("%d %d ", p->infor.num, p->infor.score);
p = p->next;
}while (p != NULL);
}
}
struct student * insert( struct student * head, struct student * stud)
{
struct student *p1, *p2, *p3;
p2 = head;
p1 = stud;
if (head == NULL)
{
head = p1;
p1->next = NULL;
}
else
{
while (p1->infor.num > p2->infor.num && p2->next != NULL)
{
p3 = p2;
p2 = p2->next;
}
if (p1->infor.num <= p2->infor.num)
{
if (head == p2)
{
head = p1;
}
else
{
p3->next = p1;
}
p1->next = p2;
}
else
{
p2->next = p1;
p1->next = NULL;
}
}
n++;
return head;
}
struct student * del( struct student * head, int num)
{
struct student *p1, *p2;
if (head == NULL)
{
printf(" , list null ");
return head;
}
p1 = head;
while (p1->infor.num != num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (p1->infor.num == num)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
printf(" delete: %d ", num);
n--;
}
if (p1 == NULL)
{
printf(" %d not been found ", num);
}
return head;
}
struct student * sort( struct student * head)
{
struct student *p1, *p2;
struct info temp;
if (head == NULL)
{
printf(" list null ");
return head;
}
p1 = head;
p2 = p1->next;
while (p1 != NULL)
{
while (p2 != NULL)
{
if (p1->infor.score > p2->infor.score)//可以设置为根据成绩排序或学好排序
{
temp = p1->infor;
p1->infor = p2->infor;
p2->infor = temp;
}
p2 = p2->next;
}
p1 = p1->next;
if (p1->next == NULL)
{
break;
}
else
{
p2 = p1->next;
}
}
return head;
}
int main()
{
struct student *head, *stu;
int num;
printf("input records: ");
head = creat();
show(head);
printf(" input the deleted number:");
scanf("%d", &num);
while (num != 0)
{
head = del(head, num);
show(head);
printf(" input the deleted number:");
scanf("%d", &num);
}
printf(" input the inserted record:");
stu = (struct student *)malloc(sizeof(struct student));
scanf("%d, %d", &stu->infor.num, &stu->infor.score);
while (stu->infor.num != 0)
{
head = insert(head, stu);
show(head);
printf(" input the inserted record:");
stu = (struct student *)malloc(sizeof(struct student));//重新分配一次内存,以免覆盖掉上一次的节点
scanf("%d, %d", &stu->infor.num, &stu->infor.score);
}
head = sort(head);
show(head);
return 0;
}