第17周报告2:动态链表

任务:数据来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。

 

实验目的:学会动态链表的建立和输出

实验内容:动态链表的定义、建立、输出 

/* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright(c) 2011, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:  link.cpp                           
* 作    者:  贺利坚                           
* 完成日期:  2011 年 12 月 19 日
* 版 本 号:  v1.0       
 
* 对任务及求解方法的描述部分
* 输入描述:score.txt
* 问题描述:在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
* 程序输出:所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
*/
#include  <iostream>
#include  <fstream>
usingnamespace std;
struct Student
{
   char num[13]; //尽管都是由数字构成,但看作为字符更合适。
   char name[10]; //每个汉字占两个字节,中国人的名字,5个汉字够用
   int cpp;
   int math;
   int english;
   int grade;
   struct Student *next;   //指向下一节点的指针
};
const intN=180;
 
int main( )
{
   Student *head=NULL,*p,*q;
   int i;
   int sum=0,ave;   //用于求平均
   ifstreaminfile("score.txt",ios::in);       //以输入的方式打开文件
   if(!infile)                         //测试是否成功打开
   {
          cerr<<"open error!"<<endl;
          exit(1);
   }
   //下面从文件中读取数据,同时建立动态链表,并为求总分之和
   for(i=0;i<N;i++)
   {
          p = new Student;
          infile>>p->num>>p->name>>p->cpp>>p->math>>p->english;
          p->grade = p->cpp + p->math +p->english;
          sum+=p->grade;
          p->next=NULL;
          if (i==0)
                 head=p;   //是第一个节点
          else
                 q->next=p;   //用q记录刚刚产生的结点,如果有下一个,需要q将之连起来
          q=p;
   }
   infile.close();
    
   //求平均成绩
   ave=sum/N;
   cout<<"总分平均为:"<<ave<<endl;
  
   //依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
   p=head;
   i=1;
   while(p!=NULL)
   {
          if(p->grade>=ave&&p->cpp>=60&&p->math>=60&&p->english>=60)
          {
                 cout<<i<<""<<p->num<<" "<<p->name<<""<<p->grade<<endl;
                 i++;
          }
          p=p->next;
         
   }
   return 0;
}

总结:

1. 本题体验了动态链表,在数据结构课程里,还有大量的算法需要用链表完成。本题做的是单向链表,还有双向链表、循环链表等,操作涉及插入、删除、查询等。再进一步,树、图的存储大量用到类似的操作,期待以后的内容……

2. 链表也是一个需要在思维方式上有大转变的一个内容,不免开始时不习惯。逐渐熟悉了,也不是那么难,要有信心,继续多看书,多练习,多实践。

 

感言:上课前,认真地看了讲义,唯独忘记检查模板,恰巧上周忙,没有提前做模板,当时想周三上机前做好就行。发现模板不对后,心一横,本周无模板,同学们应该学着自己写完整的报告了。担心有人就光秃秃地交个源代码了事。看到不少同学提交的报告,担心多余了。当然也有一些同学,真的“裸交”了。带学生一段,就让他们自己走好了。不带,起步不了;总带着不放,走远不了,时机要把握好,为自己没有有计划放手惭愧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值