若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。

提示:
定义函数struct stud_node *Creat_Stu_Doc()完成创建链表

定义函数struct stud_node DeleteDoc(struct stud_node head,int min_score)将分数低于min_score的结点删除

定义函数void Ptrint_Stu_Doc(struct stud_node *head)打印链表

输入输出示例:括号内为说明,无需输入输出

输入样例:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
80

输出样例:
2 wang 80
4 zhao 85

题目要求尽量函数 清爽一些,我比较懒,选择主函数里实现



采用尾插法实现的,头插法这道题不适用,因为要按照学号的顺序

一般用带有头结点来建立链表,这样更简便一些

#include<cstdlib>
#include<cstdio>
#include<string.h>
typedef struct student//建立结构体
{
    int n;
    char name[100];//这里没有选择用string
    //原因是scanf里的%s对string不兼容,好像是这样的......
    int s;
    struct student *next;
} stu;
using namespace std;

int main()
{
    int x,y;
    char a[100];
    scanf("%d",&x);
    stu* head = NULL;//定义头结点
    head = new stu();
    head->next =NULL;
    stu *p =head;
    while(x!=0)
    {
        scanf(" %s %d",a,&y);//没有用cin,而是选择scanf,对于整型和字符串的输入需要注意
        stu *q = NULL;
        q = new stu();
        p->next = q;
        q->n = x;
        strcpy(q->name,a);//关于字符串函数的使用
        q->s = y;
        p = q;
        scanf("%d",&x);
    }
   //以前因为判断是不是输入错误所以debug: printf("\nbull shit\n");
    int line;
    scanf("%d",&line);
    p = head->next;
    while(p!=NULL)
    {
        if(p->s>=line)
        {
            printf("%d %s %d\n",p->n,p->name,p->s);
            p = p->next;
        }
        else
            p = p->next;
    }
    p = head;
    while(p!=NULL)//删除链表,防止超时
    {
        stu *q =p;
        p = q->next;
        free(q);
    }
    return 0;
}