现有一串已按分数高低记录好的成绩,
现在要求你在不打乱原来顺序的基础上
插入一部分数据、删除一部分数据,并输出。(用链表操作)
输入
输入分3部分:
第一部分为已排序好的成绩,#结束;
第二部分为要增加的成绩,#结束:
第三部分为要删除的成绩,#结束;
输出
输出修改后的成绩
样例输入
LI 95
WANG 90
SUN 85
ZHAO 80
QIAN 70
#
ZHAN 85
JIN 60
#
QIAN
#
样例输出
LI 95
WANG 90
SUN 85
ZHAN 85
ZHAO 80
JIN 60
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct stu
{
char name[20];
int score;
struct stu *next;
} *head = NULL,
*pnow,
*p,
*pre;
char buf[20];
int size_stu = sizeof(struct stu);
pnow = (struct stu *)malloc(size_stu);
p = head = pnow;
scanf("%s %d", &pnow->name, &pnow->score);
while (scanf("%s", &buf) != EOF)
{
if (buf[0] == '#')
{
break;
}
else
{
pnow = (struct stu *)malloc(size_stu);
p->next = pnow;
p = pnow;
strcpy(pnow->name, buf);
scanf("%d", &pnow->score);
}
}
p->next = NULL;
while (scanf("%s", &buf) != EOF)
{
if (buf[0] == '#')
{
break;
}
else
{
pnow = (struct stu *)malloc(size_stu);
strcpy(pnow->name, buf);
scanf("%d", &pnow->score);
p = head->next;
pnow->next = NULL;
if (pnow->score > head->score)
{
pnow->next = head;
head = pnow;
}
else
{
pre = head;
while (p != NULL && pnow->score <= p->score)
{
pre = p;
p = p->next;
}
pnow->next = p;
pre->next = pnow;
}
}
}
while (scanf("%s", &buf) != EOF)
{
if (buf[0] == '#')
break;
else
{
if (!strcmp(head->name, buf))
{
p = head;
head = head->next;
}
else
{
p = head->next;
pre = head;
while (p != NULL && strcmp(p->name, buf) != 0)
{
p = p->next;
pre = pre->next;
}
pre->next = p->next;
p->next = NULL;
}
free(p);
}
}
p = head;
for (; p != NULL;)
{
printf("%s %d\n", p->name, p->score);
p = p->next;
}
return 0;
}