美文网首页
链表应用:成绩录入与打印

链表应用:成绩录入与打印

作者: mark_x | 来源:发表于2019-08-06 17:20 被阅读0次
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student
{
    char name[40];
    float score;
    struct Student *next;
    
};

void inputInfo(struct Student *);
void addStudent(struct Student **);
void printfInfo(struct Student *);
void releaseInfo(struct Student **);

void inputInfo(struct Student *stu)
{
    printf("请输入学生姓名:");
    scanf("%s", stu->name);
    printf("请输入学生成绩:");
    scanf("%f", &stu->score);
}


void addStudent(struct Student **list_head)
{
    struct Student *stu;
    struct Student *temp; 
    
    stu = (struct Student *)malloc(sizeof(struct Student));  // 为新建的学生创建内存空间
    if (stu == NULL)
    {
        printf("内存申请失败!");
        exit(1);
    }
    
    inputInfo(stu);  
    
    // 修改头指针的值,改为新增元素的地址,也就是stu;
    // 对list_head解引用,就是头指针的值
    
    if (*list_head != NULL)
    {
        temp = *list_head;
        *list_head = stu;
        stu -> next = temp;
    }
    else
    {
        *list_head = stu;
        stu -> next = NULL;
    }
}


void printInfo(struct Student *stu)
{
    int count = 1;
    while(stu != NULL)
    {
        printf("编号:%d\n", count);
        printf("姓名:%s\n", stu->name);
        printf("成绩:%.2f\n", stu->score);
        printf("-----------------\n");
        stu = stu -> next;
        count++;
    }
}


void releaseInfo(struct Student **stu)
{   struct Student *temp;

    while (*stu != NULL)
    {
        temp = *stu;
        *stu = (*stu)->next;
        free(temp);
    }

}

        /*
        temp = stu;
        stu = stu->next;
        free(temp);
        */



int main(void)
{
    int ch;
    struct Student *list_head;
    list_head = NULL;
    while(1)
    {
        printf("是否输入学生信息(y/n):");

        
        do
        {
            ch = getchar();
        }while (ch != 'y' && ch != 'n');
        
        if (ch == 'y')
        {
            addStudent(&list_head);
        }
        else
        {
            break;
        }
            
    }
    
    printf("是否打印成绩信息(y/n):");
    do 
    {
        ch = getchar();
    }while(ch != 'y' && ch != 'n');
    
    if (ch == 'y')
    {
        printf("\n----成绩单----\n\n");
        printInfo(list_head);
    }
    
    releaseInfo(&list_head);
    // releaseInfo(list_head);
 

    
    
    return 0;
}

相关文章

  • 链表应用:成绩录入与打印

  • 关于java基础知识io流的五道面试题

    题一:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低打印到控制台。 Student....

  • 成绩录入

  • DFS与BFS

    以先序遍历打印链表为例: 以中序遍历打印链表为例: 以后序遍历打印链表为例: 以层序遍历打印链表为例:

  • 关于链表的预备知识

    定义结点 创建链表结点 连接链表各结点 打印链表结点的值 打印整个链表中的值 删除整个链表 在链表尾部加入结点 特...

  • 反转链表

    讲反转链表之前,想讲一下怎么打印链表链表结构: 例子:打印链表: 反转链表的基础上,相当于要先遍历一边链表,上面的...

  • 2.3.3 链表

    面试题6:从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值。

  • 形考成绩录入

    提取试卷号为列表 形考成绩录入(补漏) 形考成绩录入统计(数据提取)

  • 06:从尾到头打印链表

    题目06:从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值。 思路 一. 栈 从头遍历链表,先访问的后...

  • 面试题5:从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值。 输入为链表的表头,输出为需要打印的“新链表”的表头。 代码...

网友评论

      本文标题:链表应用:成绩录入与打印

      本文链接:https://www.haomeiwen.com/subject/whmwdctx.html