栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 学生链表的处理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 学生链表的处理

#pragma warning(disable : 4996)
#define _CRT_SECURE_NO_WARNINGS 
#include
#include
#include
 

// ----- 线性表的链式表示与实现 -------

//单链表的类型声明

typedef int Status;
#define OK 1
#define ERROR 0

 
struct Student
{
    char name[20];
    int num;
    int yw;//语文
    int sx;//数学
    int yy;//英文
    int wl;//物理
    double ave;//平均值
};
typedef Student ElemType;
typedef struct node
{
    ElemType data;
    struct node* next;
}LNode, * linkList;


//初始表
Status InitList(linkList& L)
{
    L = (linkList)malloc(sizeof(LNode));
    if (!L)
        return ERROR;
    L->next = NULL;
    return OK;
}

//指定位置插入元素
Status ListInsert(linkList& L, int i, ElemType e)
{
    linkList p, s;
    p = L;
    int j = 0;
    while (p && j < i - 1) {  // 寻找第i-1个结点
        p = p->next;
        ++j;
    }
    if (!p || j > i - 1) return ERROR;      // i小于1或者大于表长
    s = (linkList)malloc(sizeof(LNode));  // 生成新结点
    if (!s)
        return ERROR;
    s->data = e;
    s->data.ave = 0;

    s->next = p->next;      // 插入L中
    p->next = s;
    return OK;
}


//显示内容的算法
void ShowAddress(linkList L)
{
    int i;
    linkList p = L->next;
    if (p == NULL)
        return;
    for (i = 1; p != NULL; i++)
    {
        ElemType e=p->data;
        printf("%dt%st%dt%dt%dt%dt%.2lfn", e.num, e.name, e.sx, e.wl, e.yw, e.yy, e.ave);
        p = p->next;
    }
    
}

// 统计平均值
void StatisticalAverage(linkList &L)
{
    int i;
    linkList p = L->next;
    if (p == NULL)
        return;
    for (i = 1; p != NULL; i++)
    {
        ElemType e = p->data;
        p->data.ave=(double)(e.sx + e.wl + e.yw + e.yy) / 4;
        p = p->next;
    }

}

//查找通过姓名
Status LocateElem(linkList L, char name[])
{     
    linkList p = L->next;
    while (p)
    {        
        if (strcmp(p->data.name, name) == 0)
        {
            ElemType e = p->data;
            printf("%dt%st%dt%dt%dt%dt%.2lfn", e.num, e.name, e.sx, e.wl, e.yw, e.yy,e.ave);
            return OK;
        }

        p = p->next;
    }
    return ERROR;
}

void SaveElem(linkList L)
{
    FILE* fstream;   
    fstream = fopen("stu.txt", "w");
    if (fstream == NULL)
    {
        printf("open file test.txt failed!n");
        exit(1);
    }
    printf("保存到stu.txtn");
    int i;
    linkList p = L->next;
    if (p == NULL)
        return;
    for (i = 1; p != NULL; i++)
    {
        ElemType e = p->data;
        fprintf(fstream,"%dt%st%dt%dt%dt%dt%.2lfn", e.num, e.name, e.sx, e.wl, e.yw, e.yy, e.ave);
        p = p->next;
    }
    fclose(fstream);
}
void OpenFile(linkList& L)//尾插法加载数据
{
    FILE* fstream;
    fstream = fopen("stu.txt", "r");
    if (fstream == NULL)
    {
        printf("open file test.txt failed!n");
        exit(1);
    }

    L = (linkList)malloc(sizeof(LNode));
    L->next = NULL;
    linkList p, last;
    last = L;

    while (1)
    {
        ElemType e;
        if (EOF != fscanf(fstream, "%d%s%d%d%d%d%lf", &e.num, e.name, &e.sx, &e.wl, &e.yw, &e.yy, &e.ave))
        {

            p = (linkList)malloc(sizeof(LNode));  // 生成新结点
            if (!p)//分配失败
            {
                return;
            }
            p->data =e;
            p->next = NULL;


            last->next = p;      // 尾插法      
            last = p;
            p->next = NULL;
        }            
        else
            break;
    }
    fclose(fstream);
}
int main()
{
    ElemType e;
    linkList L;
    InitList(L);

    
    strcpy(e.name, "丁一");
    e.num = 1001;
    e.sx = 90;
    e.wl = 80;
    e.yw = 77;
    e.yy = 67;

    ListInsert(L,1,e);


    strcpy(e.name, "丁二");
    e.num = 1002;
    e.sx = 92;
    e.wl = 80;
    e.yw = 77;
    e.yy = 62;

    ListInsert(L, 1, e);

    strcpy(e.name, "丁三");
    e.num = 1003;
    e.sx = 93;
    e.wl = 80;
    e.yw = 73;
    e.yy = 67;

    ListInsert(L, 1, e);

    strcpy(e.name, "丁四");
    e.num = 1004;
    e.sx = 94;
    e.wl = 84;
    e.yw = 77;
    e.yy = 67;

    ListInsert(L, 1, e);

    strcpy(e.name, "丁五");
    e.num = 1005;
    e.sx = 90;
    e.wl = 85;
    e.yw = 75;
    e.yy = 67;

    ListInsert(L, 1, e);

    strcpy(e.name, "丁六");
    e.num = 1006;
    e.sx = 90;
    e.wl = 86;
    e.yw = 77;
    e.yy = 67;

    ListInsert(L, 1, e);

    strcpy(e.name, "丁七");
    e.num = 1007;
    e.sx = 90;
    e.wl = 87;
    e.yw = 77;
    e.yy = 67;

    ListInsert(L, 1, e);

    ShowAddress(L);

    char name[20];
    printf("输入要查找的人的姓名:");
    scanf("%s",name);
    if (LocateElem(L,name) == 0)
        printf("没有找到相关信息~!n");

    printf("统计平均成绩:n");
    StatisticalAverage(L);
    ShowAddress(L);

    printf("保存到文件中:n");
    SaveElem(L);


    linkList L1;
    InitList(L1);
    printf("读取stu.txt中的数据给L1n");
    OpenFile(L1);
    ShowAddress(L);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号