数据结构课程实践(1)-实验准备与设计

数据结构课程实践(1)

— 实验准备与设计

一.题目:学生成绩档案管理系统

(1)任务要求:

  • 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
  • 系统可对学生信息浏览、增加、删除和修改;
  • 按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序。
  • 要求可对学生信息查询,根据学号或姓名进行查找;
  • 信息修改仅可修改四门课成绩;
  • 文件存取学生信息。

(2)需要实现的功能:

  • 新增学生信息(包括学号、姓名、专业、4门课成绩……)
  • 浏览学生信息(对学生排序后信息进行浏览)
  • 删除学生信息(删除指定学生的信息,可给用户选择检索指定项)
  • 查找学生信息(查找符合条件的某条记录)
  • 保存学生信息(保存学生成绩档案信息到文本文件)
  • 加载学生信息(登录系统后将磁盘文件中保存的学生成绩信息读取到内存中)

二.编程语言和软件

编程语言:Java
软件:IntelliJ IDEA

三.项目思路

(1)定义类:

1.学生信息类

  信息内容包括学号(num)
  姓名(name)
  专业(major)
  四门课成绩(class1Score,class2Score,class3Score,class4Score)
  总分(sum)
  名次(place)

2.基本功能类

学生信息的增删改查

3.与文档交互类

文档的写入与导出		

4.具体方法实现类

编写具体的实现方法及界面	 

5.主类

实现所有类的功能。

(2)排序算法:

1.双向冒泡排序

与冒泡排序的不同处在于排序时是以双向在序列中进行排序,外层比较左右边界l<r, 
内层一个循环从左向右比,取高值置后;一个循环从右向左,取低值置前;

2.希尔排序

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 =1(    …
比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。
一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

3.快速排序

快速排序先设置一个基准数字(一般取第一个)
设置两个标志,i,j分别为0,和size-1的位置
从j开始向前寻找,找到比基准数字大的数字替换j,随后从i向后寻找,找到比基准数字小的数字替换i
往复直到i=j;
之后在基数两边分开,分别寻找新的基数往复,
直到每一个数字都为一个区间为止。

4.堆排序

创建一个堆 H[0……n-1];
把堆首(最大值)和堆尾互换;
把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应置;
重复步骤 2,直到堆的尺寸为 1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nightelves11

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

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

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

打赏作者

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

抵扣说明:

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

余额充值