#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stud_node {
int num;
char name[20];
int score;
struct stud_node* next;
};
struct stud_node* Create_Stu_Doc();//新建链表
struct stud_node* InsrtDoc(struct stud_node* head, struct stud_node* stud);//插入
struct stud_node* DeleteDoc(struct stud_node* head, int num);//删除
void Print_stu_Doc(struct stud_node* head);//遍历
int main()
{
struct stud_node* head, * p;
int choice, num, score;
char name[20];
head = NULL;
int size = sizeof(struct stud_node);
do {
printf("1:create 2:insert 3:delete 4:print 0:exit\n");
scanf_s("%d", &choice);
switch (choice) {
case 1:
head= Create_Stu_Doc();
break;
case 2:
printf("Input num,name and score:\n");
scanf_s("%d%s%d",&num,name,&score);
p = (struct stud_node*)malloc(size);
p->num = num;
strcpy_s(p->name, name);
p->score = score;
head = InsrtDoc(head, p);
break;
case 3:
printf("Input num:\n");
scanf_s("%d", &num);
head = DeleteDoc(head, num);
break;
case 4:
Print_stu_Doc(head);
break;
case 0:
break;
}
} while (choice != 0);
return 0;
}
//新建链表
struct stud_node* Create_Stu_Doc()
{
struct stud_node* head, * p;
int num, score;
char name[20];
int size = sizeof(struct stud_node);
head = NULL;
printf("Input num,name and score:\n");
scanf_s("%d%s%d",&num,name,&score);
while (num != 0)
{
p = (struct stud_node*)malloc(size);
p->num = num;
strcpy_s(p->name, name);
p->score = score;
head = InsrtDoc(head, p); //调用插入函数
scanf_s("%d%s%d", &num, name, &score);
}
return head;
}
//插入
struct stud_node* InsrtDoc(struct stud_node* head, struct stud_node* stud)
{
struct stud_node* ptr, * ptr1, * ptr2;
ptr2 = head;
ptr = stud;
if (head == NULL)
{
head = ptr;
head->next = NULL;
}
else{
while ((ptr->num > ptr2->num) && (ptr2->next != NULL)) {
ptr1 = ptr2;
ptr2 = ptr2->next;
}
if (ptr->num <= ptr2->num) {
if (head == ptr2) head = ptr;
else ptr1->next = ptr;
ptr->next = ptr2;
}
else {
ptr2->next = ptr;