#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define len sizeof(struct Student)
typedef struct Student
{
char a[20];
int score;
struct Student * next;
}Fun;
int n = 0;
Fun* creat()//创建链表 输入
{
Fun *head = NULL;
Fun *p1, *p2;
p1 = p2 = (Fun*)malloc(len);
scanf("%s", &p1->a);
while (strcmp(p1->a, "#") != 0)
{
n++;
scanf("%d", &p1->score);
if (n == 1) head = p1;
else p2->next = p1;
p2 = p1;
p1 = (Fun*)malloc(len);
scanf("%s", &p1->a);
}
p2->next = NULL;
return (head);
}
void print(Fun *head)//输出
{
Fun *p;
for (p = head; p != NULL; p = p->next)
printf("%s %d\n", p->a, p->score);
}
Fun * insert(Fun *head, Fun *stud)//插入
{
Fun *p0, *p1, *p2=NULL;
p1 = head;
p0 = stud;
if (head == NULL)
{
head = p0; p0->next = NULL;
}
else
{
while ((p0->score <=p1->score) && (p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p0->score > p1->score)
{
if (head == p1) head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
n++;
return head;
}
}
Fun *del(Fun *head, Fun * num)//删除
{
Fun *p1,*p2=NULL;
p1 = head;
while (strcmp(p1->a, num->a) != 0&&p1->next!=NULL)
{
p2 = p1; p1 = p1->next;
}
if (strcmp(p1->a, num->a) == 0)
{
if (p1 == head) head = p1->next;
else p2->next = p1->next;
}
return head;
}
int main()
{
Fun *head, *stu,*num;
head = creat();
stu = (Fun*)malloc(len);
scanf("%s", &stu->a);
while (strcmp(stu->a, "#") != 0)
{
scanf("%d", &stu->score);
head = insert(head, stu);
stu = (Fun*)malloc(len);
scanf("%s", &stu->a);
}
num = (Fun*)malloc(len);
scanf("%s", &num->a);
while (strcmp(num->a, "#") != 0)
{
head = del(head, num);
num = (Fun*)malloc(len);
scanf("%s", &num->a);
}
print(head);
}
单链表的基本操作 创建 插入 删除 输出 (不带头节点版)
猜你喜欢
转载自blog.csdn.net/youtiankeng/article/details/87816058
今日推荐
周排行