fun.h文件

    技术2022-05-11  139

    //注意保存为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,  年龄:=,  班级:s,  成绩:=./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; }

    最新回复(0)