fun.h文件

来源:互联网 发布:java 转发 编辑:程序博客网 时间:2024/04/29 19:32
//注意保存为fun.h文件
#include "stdio.h"
#define MAXSIZE 40
int COUNT=0;//全局,节点个数
//------------------------------------------
 
//学生结构体定义
struct STU
{    
    char name[30];
    int age;
    char ban[40];
    int cj;
};
//二叉树结构体
struct btree
{
    struct STU data;//本身数据,这里是学生结构
    int left;//左节点号
    int right;//右节点
};
 
int MAXSTU(struct STU data_1,struct STU data_2)//比较STU(学生)成绩大小,后面大
{
    if(data_1.cj<data_2.cj) return 1 ;//
    else return 0 ;
}
//插入节点函数
int ins(struct btree q[],struct STU indata)//q[0]unsued
{
    int i=1;
    if(COUNT>=MAXSIZE) {printf("insert error:too many data");return 0;}
    q[++COUNT].data=indata;//COUNT此时是以前个数,期望加一
    q[COUNT].left =0;
    q[COUNT].right=0;
    while(i<COUNT)
    {
        if(MAXSTU(indata,q[i].data))
        {
            if(q[i].left==0) q[i].left=COUNT;//新节点找到位置
            else i=q[i].left;
        }
        else//indata
            {
            if(q[i].right==0) q[i].right=COUNT;//新节点找到right位置
            else i=q[i].right;
        }
    }
    return i;
}
 
 
//显示一个结点信息,也就是显示一个学生的信息
void show(struct btree btnode)
{
    printf("姓名:%7s,  年龄:%3d,  班级:%10s,  成绩:%3d./n"
    ,btnode.data.name,btnode.data.age,btnode.data.ban,btnode.data.cj);
}
 
//********************
//二叉树排序函数,即中序遍历算法
int sortbt(struct btree q[],struct btree btnode)//COUNT is num
{
    if(btnode.left>0) sortbt(q,q[btnode.left]);
    show(btnode);
    if(btnode.right>0) sortbt(q,q[btnode.right]);
    return 0;
}
//----------------------------------------------
int sortbt2(struct btree q[],struct btree btnode)//big -> small
{
    if(btnode.right>0) sortbt(q,q[btnode.right]);
    show(btnode);
    if(btnode.left>0) sortbt(q,q[btnode.left]);
    
    return 0;
}
 
//#############################################################################################
#include "string.h"
/*
*存储所有学生信息到文件(文件名默认:save.txt)
*文件格式例如xiao:20:software(2):95
*/
//存储文件函数
int saveSTU(struct btree Q[])
{
    FILE *out;
    int i;
    
    out = fopen( "save.txt", "w" );
 
    for(i=1;i<=COUNT;i++)
        fprintf(out,"%s:%d:%s:%d/n",Q[i].data.name,Q[i].data.age,Q[i].data.ban,Q[i].data.cj);
    fclose(out);
    return 0;
}
//从文件读出数据函数
int readSTU(struct btree Q[],int maxnum)//maxnum is the max of Q[]
{    
    //printf(">>>>>>>>in reading file/n");
    //check the file(save.txt)
    struct STU stu;
    FILE *in;
    int i,j;
    char buf[sizeof(struct STU)];
    in = fopen( "save.txt", "r" );
 
    for(i=1;i<=maxnum;i++)
    {
        fgets(buf,sizeof(struct STU),in);
        //printf("buf>>%s/n",buf);
        for(j=0;j<(int)strlen(buf);j++) if(buf[j]==':') buf[j]=' ';
        sscanf(buf,"%s%d%s%d",stu.name,&stu.age,stu.ban,&stu.cj);        
        if(feof(in)) break;
        ins(Q,stu);
    }
    if(i>maxnum) printf("error:too many data in reading file!/n");
    COUNT=i-1;
    fclose(in);
    return 0;
}

原创粉丝点击