鱼C论坛

 找回密码
 立即注册
查看: 2572|回复: 3

好心人能给我解释一下这段代码么?

[复制链接]
发表于 2017-12-10 22:14:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <iostream>
#include <time.h>

using namespace std;

#include "student.h"

int readStructsIntoList( student* & stu ) {
   char  buffer[256]; //缓冲区
   int k = 0;
   for ( ; gets( buffer ); k++ ) { //逐行读入不超过n条记录
      student* ta = new student;
      sscanf( buffer, "%d\t%s\t%s\t%s\t%s\t%s\t%I64d",
         &ta->id,
         ta->name,
         ta->dept,
         ta->group,
         ta->type,
         ta->email,
         &ta->cell);
      ta->pts = 56 + rand() % 45; //成绩随机分布于(55, 100]
      //print( *ta );
      ta->next = stu; stu = ta; //串接到链表前端
   }
   return k;
}

void selectionsort( student* s ) { //按成绩(选择)排序
   for ( student* ta = s; ta; ta = ta->next ) {
      student* tm = ta;
      for ( student* tb = ta; tb; tb = tb->next ) //选出下一个(最小者)
         if ( tm->pts > tb->pts ) tm = tb;
      swap( *ta, *tm ); //通过交换将其前移就位
      student* next = tm->next; tm->next = ta->next; ta->next = next; //别忘了,next指针要再次交换以复原
   }
}

void bubblesort( student* s ) { //按班级(起泡)排序:正向稳定
   while ( 1 ) {
      bool sorted = true; //有序标志
      for ( student* ta = s; student* tb = ta->next; ta = ta->next )
         if ( strcmp(ta->group, tb->group) > 0 ) {
            sorted = false; //仍有逆序
            swap( *ta, *tb ); //通过交换将其前移就位
            student* next = ta->next; ta->next = tb->next; tb->next = next; //别忘了,next指针要再次交换以复原
         }
       if ( sorted ) break; //直至有序
   }
}

void insertionsort( student* & s ) { //按班级(插入)排序:反向稳定
   student* t = s;
   while ( student* x = t->next ) { //sorted prefix = [s, t] = [0, x)
      if ( strcmp(x->group, s->group) <= 0 ) { //[x] <= [s]
         t->next = x->next; x->next = s; s = x; //太空舞步
      } else {
         student* p = s; //predecessor of x
         while ( strcmp(x->group, p->next->group) > 0 ) p = p->next;
         if ( p->next == x ) //[s, t] < [x]
            t = x;
         else {
            t->next = x->next; x->next = p->next; p->next = x; //太空舞步
         }
      }
   }
}

int main( int argc, char* argv[] ) {

   srand ( ( unsigned int ) time ( NULL ) ); //设置随机种子

   student* fpcStu = NULL; //灵活:既足够,也不浪费
   int n = readStructsIntoList( fpcStu ); cout << n << " record(s) read\n";

   selectionsort( fpcStu ); cout << "\n" << n << " record(s) sorted by score\n";
   for ( student* ta = fpcStu; ta; ta = ta->next ) { //逐条输出,以验证排序无误
      cout << "[" << --n << "]\t" << ta->name << "\t" << ta->group << "\t" << ta->pts << "\n";
   }
   //bubblesort( fpcStu ); cout << "Resorted by group\n";
   insertionsort( fpcStu ); cout << "Resorted by group\n";
   for ( student* ta = fpcStu; ta; ta = ta->next ) { //逐条输出,以验证排序无误
      cout << "[" << n++ << "]\t" << ta->name << "\t" << ta->group << "\t" << ta->pts << "\n";
   }

   while ( fpcStu ) { //逐条释放各记录
      student* ta = fpcStu; fpcStu = fpcStu->next; delete ta;
   }

   return 0;
}

我第一个问题就是:
1.#include "student.h"是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-10 22:25:52 From FishC Mobile | 显示全部楼层
写了另外一个文件,将它包含进来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 22:26:26 | 显示全部楼层
你的第一个问题应该是一个student.h的头文件在别的地方有定义,这里只是宏替换,你应该还可以找到另一个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 01:18:06 | 显示全部楼层
挺简单的把...大体是读取一行学生信息,然后分类排序,并输出...应该是学生管理系统的代码.c++的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表