IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【C语言】简易学生成绩管理系统 -> 正文阅读

[数据结构与算法]【C语言】简易学生成绩管理系统

1.本篇应用链表:

? ? ? ?分配内存空间函数??malloc,calloc;其原型为:void*calloc(unsigned?n,unsigned?size);

? ? ? ?malloc()在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用calloc()函数。[返回值]分配成功返回指向该内存的地址,失败则返回NULL。

? ? ? ?calloc()函数用来动态地分配内存空间并初始化为0,calloc()在内存中动态地分配num个长度为size的连续空间,并将每一个字节都初始化为0。

? ? ? ?释放内存空间函数??free;函数原型为void?free(void*p);free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。free函数是我们再写C语言程序时常用的函数,注意free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。

? ? ? ?对于free(p)这句语句,如果p是NULL指针,那么free对p无论操作多少次都不会出问题。如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。

? ? ? ?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。?链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。?每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

? ? ? ? 链表组成:头指针:存放一个地址,该地址指向第一个元素

????????结点:用户需要的实际数据和链接节点的指针

2.代码

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student
{
    int num;
    float score;
    struct student *next;
};
struct student *creat();
void print(struct student *head);
void delete(struct student *head);
void insert(struct student *head,struct student *stud);
int n;
void main()
{
    struct student *stu,*stud;
    stu=creat();
    printf("\n");
    printf("链表有%d个数据\n",n);
    print(stu);
    printf("\n");
    delete(stu);
    printf("\n");
    while(1)
    {
        stud=(struct student *)malloc(LEN);
        printf("please enter the insert to num: ");
        scanf("%d",&stud->num);
        printf("please enter the insert to score: ");
        scanf("%f",&stud->score);
        if(stud->num==0)
            break;
        insert(stu,stud);  
    }
    system("pause");
}
struct student *creat()
{
    struct student *p1,*p2,*head;
    p1=p2=(struct student *)malloc(LEN);
    printf("please enter the num: ");
    scanf("%d",&p1->num);
    printf("please enter the score: ");
    scanf("%f",&p1->score);
    head=NULL;
    n=0;
    while(p1->num)
    {
        n++;
        if(n==1)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=(struct student *)malloc(LEN);
        printf("please enter the num: ");
        scanf("%d",&p1->num);
        printf("please enter the score: ");
        scanf("%f",&p1->score);
    }
    p2->next=NULL;
    return head;
}
void print(struct student *head)
{
    struct student *p;
    p=head;
    if(head)
    {
      do
      {
          printf("\n学号为%d的成绩是:%f\n",p->num,p->score);
          p=p->next;
      } while (p);
    }
}
void delete(struct student *head)
{
    int m;
    struct student *q1,*q2;
    while(1)
    {
    printf("please enter the delete num: ");
    scanf("%d",&m);
    if(m==0)
        break;
    if(head==NULL)           //判断链表是否为空
        printf("空表\n");
    else
    {
        q1=head;             //链表不为空时从头结点开始
        while(m!=q1->num && q1->next!=NULL)//判断被删除的结点与已有结点是否相等和结点为空时退出
        {
            q2=q1;           //q2指向q1即q2后移一位
            q1=q1->next;     //q1指向下一结点即q1后移一位
        }
        if(m==q1->num)     //判断被删除的结点与已有结点是否相等
        {
            if(q1==head)
                head=q1->next;//删除头结点
            else
                q2->next=q1->next;//删除m=num的结点
            printf("删除%d成功\n",m);
            n=n-1;       //记录链表数据
        }
        else
            printf("找不到\n");
    }
    printf("链表中有%d个数据",n);
    print(head);           //打印删除后的链表
    }
}
void insert(struct student *head,struct student *stud)
{
    struct student *p1,*p2,*p0;
    p1=head;
    p0=stud;
    if(head==NULL)
    {
        head=p0;
        p0->next=NULL;
    }
    else
    {
        while(p0->num > p1->num && p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }
        if(p0->num<=p1->num)
        {
            if(p1==head)
                head=p0;
            else
                p2->next=p0;
            p0->next=p1;
        }
        else
        {
            p1->next=p0;
            p0->next=NULL;
        }
    }
    n++;
    printf("链表有%d个数据\n",n);
    print(head);
}

3.功能

? ? (1).可以实现学生信息的输入;

? ? (2).可以进行信息的添加和删除。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2021-08-25 23:45:47  更:2021-08-25 23:46:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:22:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码