数据结构课程设计题目
- 格式:wps
- 大小:111.02 KB
- 文档页数:14
广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。
3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。
四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。
6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。
6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。
一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。
1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构课程设计报告书题目:任意长整数的加法_____院系:计算机科学与应用 ___班级: 11级计算机科学与技术s目录目录 (2)1 概述 (3)2 系统分析 (3)2.1抽象数据类型定义 (3)2.2 功能详细描述及框图 (4)3 概要设计 (5)3.1 数据结构的设计 (5)3.2 主要功能逻辑过程和实现算法 (5)4 详细设计 (7)4.1 链表设计 (7)4.2 人机交互界面WView (8)4.3 加法计算函数Calculate (10)4.4字符串分析函数AnaAdd: (12)5 调试分析与测试 (13)5.1 调试分析 (13)5.2 测试结果 (18)6 总结与心得 (21)6.1 课程设计过程中出现的技术难点和解决方法: (21)6.2 课程设计期间的主要收获: (21)参考文献: (21)1 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2 系统分析为实现上述程序功能,应以双向循环链表表示长整数。
为此,需要定义一个抽象数据类型。
2.1抽象数据类型定义抽象数据类型定义为:ADT OrderedList{数据对象:D={ai|ai∈int,i=1,2,...n, n≥0}数据关系:R1={|ai-1,ai∈D|=2,……n }基本操作:Creat(string a)操作结果:通过字符串a构造两个位数不限的长整数。
addtwo(head0,head1,result)初始条件:head0,head1都已存在,且head0的绝对值比head1大操作结果:result等于head0和head1的和。
数据结构课程设计实例100例1. 设计一个简单的栈数据结构。
2. 实现一个简单的队列数据结构。
3. 设计一个链表数据结构。
4. 实现一个二叉树数据结构。
5. 设计一个哈希表数据结构。
6. 实现一个图数据结构。
7. 设计一个堆数据结构。
8. 实现一个优先队列数据结构。
9. 设计一个有向图数据结构。
10. 实现一个循环链表数据结构。
11. 设计一个红黑树数据结构。
12. 实现一个字典数据结构。
13. 设计一个AVL树数据结构。
14. 实现一个散列表数据结构。
15. 设计一个双端队列数据结构。
16. 实现一个字典树数据结构。
17. 设计一个多叉树数据结构。
18. 实现一个最小生成树算法。
19. 设计一个并查集数据结构。
20. 实现一个图的遍历算法。
21. 设计一个迪杰斯特拉算法。
22. 实现一个Floyd算法。
23. 设计一个拓扑排序算法。
24. 实现一个最短路径算法。
25. 设计一个Kruskal算法。
26. 实现一个插入排序算法。
27. 设计一个快速排序算法。
28. 实现一个希尔排序算法。
29. 设计一个选择排序算法。
30. 实现一个冒泡排序算法。
31. 设计一个堆排序算法。
32. 实现一个归并排序算法。
33. 设计一个桶排序算法。
34. 实现一个基数排序算法。
35. 设计一个计数排序算法。
36. 实现一个递归算法。
37. 设计一个动态规划算法。
38. 实现一个回溯算法。
39. 设计一个哈夫曼编码算法。
40. 实现一个最大子序列和算法。
41. 设计一个最长递增子序列算法。
42. 实现一个最长公共子序列算法。
43. 设计一个贪婪算法。
44. 实现一个深度优先搜索算法。
45. 设计一个广度优先搜索算法。
46. 实现一个信号量算法。
47. 设计一个分治算法。
48. 实现一个枚举算法。
49. 设计一个置换算法。
50. 实现一个位运算算法。
51. 设计一个红黑树插入算法。
52. 实现一个二进制查找算法。
53. 设计一个最小堆插入算法。
一、设计题目猴子吃桃子问题有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
二、运行环境(软、硬件环境)VC++6.0 PC电脑一台三、算法的需求分析1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解4)如果采用4种方法者,适当加分//用户界面int Desk(int n){printf("**************************************************\n");printf("| 欢迎进入猴子吃桃子系统|\n");printf("| 1-数组法2-链表法3-递归法4-二叉树法5-退出|\n");printf("***************************************************\n");printf("请输入要选择的方法: ");scanf("%d",&n);getchar();system("cls"); //刷新屏幕while(n<1 || n>5){printf("***输入错误! 请重新输入***\n");scanf("%d",&n);}return n;}四、算法概要设计//采用链数据结构(栈) 实现上述求解typedef struct{int *top;int *base;}stack;//初始化一个栈stack Init(stack *s){s->base=(int *)malloc(STACK_SIZE*sizeof(int));if(s->base == NULL){printf("Init failed !\n");exit(-1);}s->top = s->base;return *s;}//二叉树创建一个大小为DAYS(由用给出)的二叉树,二叉树的左孩子节点存放当天的桃子数,右节点存放数字1,即为多吃的一个桃子。
《数据结构》课程设计报告书题目:约瑟夫环系别:计算机科学与应用学号:学生姓名:指导教师:完成日期:2012年6月7日目录1.需求分析 (3)1.1 功能分析 (3)1.2开发平台 (3)2.概要设计 (3)3. 程序设计主要流程 (5)4.调试与操作说明 (5)4.1调试情况 (5)4.2操作说明 (6)总结 (8)致谢 (9)附录 (9)参考文献 (13)指导教师评语: (14)1.需求分析1.1 功能分析本次选做的课程设计是改进约瑟夫(Joseph)环问题。
约瑟夫环问题是一个古老的数学问题,本次课题要求用程序语言的方式解决数学问题。
此问题仅使用单循环链表就可以解决此问题。
在建立单向循环链表时,因为约瑟夫环的大小由输入决定。
为方便操作,我们将每个结点的数据域的值定为生成结点时的顺序号和每个人持有的密码。
进行操作时,用一个指针r指向当前的结点,指针H指向头结点。
然后建立单向循环链表,因为每个人的密码是通过scanf()函数输入随机生成的,所以指定第一个人的顺序号,找到结点,不断地从链表中删除链结点,直到链表剩下最后一个结点,通过一系列的循环就可以解决改进约瑟夫环问题。
1.2开发平台WindowsXP操作系统;Microsoft Visual C++ 6.0;2.概要设计编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。
这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。
r->next=H。
解决问题的核心步骤:首先建立一个具有n个链结点,无头结点的循环链表。
然后确定第1个报数人的位置。
最后不断地从链表中删除链结点,直到链表为空。
目录一、题目概述(内容及要求) (2)二、功能分析 (2)三、设计 (3)四、运行与测试 (11)五、总结 (15)参考文献 (16)一、题目概述(内容及要求)1. 内容:输出公元1年至9999年的日历;以标准日历的形式输出,包含月份、星期以及具体某一天对应的年、月、星期;用数据结构课上所学二叉树及队列顺序存储形式存储。
1.要求:①输入年份②选择列数③打印日历并写入文件。
说明:列数表示打印格式12行一列、6行二列、四行三列。
二、功能分析1. 当你输入正确的公元年份时,程序会弹出选择菜单,然你选择输出方式。
然后去F盘,看file文档即可。
当你输入一个错误的年份,比如-2时。
因为这个年份无法通过循环的判定,所以程序无法继续下去。
同时,时间复杂度为Q(n)。
2.确定每年的第一天是星期几。
设公元元年一日是星期一,根据蔡司公式,用365乘以(year-1)再与年多出来的一天求和,与7取余,再加一天,就能求出所求年的一月一日是星期几了。
3.确定所求年是不是闰年。
普通年能被4整除且不能被100整除的为闰年。
4. 使输出的数字对齐。
当输出数字小于10时,输出两个空格。
当输出数字大于等于10时,输出一个空格。
5.算法的改进设想。
(1)可以不以公元元年一月一日为起点,可以找出任意年的任意天作为原点。
(2)case2,case3中的计算首日的部分可以共享,这样能减少代码长度。
三、设计1. 每个程序中使用的存储结构设计说明。
本程序用到的存储结构式数组int month[13]={0,1,2,3,4,5,6,7,8,9,10,11,12} //储存一年的总月数int Day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} //储存每个月的天数int i=12; //月份int j=6; //每个月需要打印的行数int k=7; // 每个月需要打印的列数a[i][j][k] //储存每个月里,每个数据的位置2.每个部分的算法设计说明。
课程设计任务书题目:迷宫设计学号:姓名:专业:网络技术课程:数据结构指导教师:职称:讲师完成时间:2013年12 月----2014 年1 月年月日课程设计任务书及成绩评定目录一.迷宫求解································(1)问题描述···········································(2)需求分析及设计思路·································(3)数据结构定义········································(4)系统功能模块介绍····································(5)源代码··············································(6)运行结果及调试分析································(7)课程设计总结·····························一.迷宫求解(1)问题描述输入一个任意大小的迷宫数据,用递归和非递归两种方法求出一条走出迷宫的路径,并将路径输出。
《数据结构》课程设计题目(程序实现采用C语言)题目1:猴子选王(学时:3)一堆猴子都有编号,编号是1,2,3 .。
.m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王.要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解.//链表#include 〈stdio.h〉#include 〈stdlib.h>// 链表节点typedef struct _RingNode{int pos;struct _RingNode *next;}RingNode, *RingNodePtr;// 创建约瑟夫环,pHead:链表头指针,count:链表元素个数void CreateRing(RingNodePtr pHead, int count){RingNodePtr pCurr = NULL, pPrev = NULL;int i = 1;pPrev = pHead;while(——count 〉 0){pCurr = (RingNodePtr)malloc(sizeof(RingNode));i++;pCurr—〉pos = i;pPrev-〉next = pCurr;pPrev = pCurr;}pCurr-〉next = pHead; // 构成环状链表}void KickFromRing(RingNodePtr pHead, int n){RingNodePtr pCurr, pPrev;int i = 1; // 计数pCurr = pPrev = pHead;while(pCurr != NULL){if (i == n){// 踢出环printf("\n%d", pCurr->pos); // 显示出圈循序pPrev—>next = pCurr->next;free(pCurr);pCurr = pPrev—>next;i = 1;}pPrev = pCurr;pCurr = pCurr—〉next;if (pPrev == pCurr){// 最后一个printf("\nKing is %d", pCurr—〉pos); // 显示出圈循序 free(pCurr);break;}i++;}}int main(){int n = 0, m = 0;RingNodePtr pHead = NULL;printf("M(person count)= ”);scanf(”%d”, &m);printf("N(out number) = ");scanf(”%d”, &n);if(m 〈= 0 || n <= 0){printf("Input Error\n”);return 0;}// 建立链表pHead = (RingNodePtr)malloc(sizeof(RingNode)); pHead->pos = 1;pHead->next = NULL;CreateRing(pHead, m);// 开始出圈printf("\nKick Order: ");KickFromRing(pHead, n);printf(”\n");system(”pause”);return 0;}//数组做:#include<stdio。
《数据结构》课程设计题目 1. 排序算法的性能分析 问题描述 设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求 (1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。 (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容 (1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。
2. 排序算法思想的可视化演示—1 基本要求 排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。
3. 排序算法思想的可视化演示—2 基本要求 排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。
4. 线性表的实现与分析 基本要求 ① 设计并实现线性表。 ② 线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方式 ③ 针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图形演示)。
5. 等价类实现及其应用 问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为ri(是一个整数),最后期限为di(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求: 使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。
6. 一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器。 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做)
7. 长整数的代数计算 问题描述 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ① 长整数长度在一百位以上。 ② 实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, ab mod n, ab mod n。 ③ 输入输出均在文件中。 ④ 分析算法的时空复杂性。
8. 敢死队问题。 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。
9. 简单计算器 基本要求: 输入:不含变量的数学表达式的中缀形式,可以接受的操作符包括+、-、*、/、%和(、)。 输出: 如果表达式正确,则输出表达式的结果,如果表达式非法,则输出错误信息。 注: 输入/输出形式可采取终端设备输入/输出,也可采用文件输入/输出,一个文件中可包含多个表达式
10. 迷宫问题-1 问题描述 以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 基本要求 (1)实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路一三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 (2)编写递归形式的算法,求得迷宫中所有可能的通路; (3)以方阵形式输出迷宫及其通路6
11. 迷宫问题-2 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 要求: (1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动; (2)迷宫的墙足够结实,老鼠不能穿墙而过; (3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败; (4)添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙; (5)找出走出迷宫的所有路径,以及最短路径; 利用序列化功能实现迷宫地图文件的存盘和读出等功能。
12. 应用等价类生成随机迷宫并寻找迷宫路径 问题描述: 使用等价类来构造一个NN的从左上角到右下角只有一条路径的随机迷宫,然后在这一迷宫上寻找迷宫路径。该设计共包含如下四个部分: ① 等价类数据结构的设计和实现 ② 构建随机迷宫 ③ 寻找迷宫路径 ④ 将迷宫和路径用图形方式画出 用图形方式将上述算法获得的随机迷宫及其上的最短路径画出。用线段来表示迷宫中的墙,用在每个方格中心的点来表示路径。
13、跳表(Skip List)的实现与分析 基本要求 ④ 构造并实现跳表(Skip List)的ADT ADT中应包括初始化、查找、插入、删除等基本操作。 ② 分析各基本操作的时间复杂性。 ③ 针对一个实例实现Skip List的动态演示(图形演示)。
14. LZW压缩算法及应用 基本要求 ① 在一个文本文件上实现LZW压缩和解压缩,其中每个字符就是该文本的8位ASCII码。 ② 在实现LZW过程中需要仔细考虑如何在编译表中找到匹配或找不到匹配,需要注意匹配算法的时间、空间开销。 ③ (选做)应用LZW算法实现256色灰度BMP图像文件的压缩和解压缩。
15. 二叉树的实现及分析 基本要求 (1)设计实现链表存储的二叉树ADT (2)实现基本操作实现过程(前序遍历、中序遍历、后序遍历、层序遍历等)的动态演示(图形演示)。 (3)应用二叉树,实现信号放大器的设置。
16. 应用堆实现一个优先队列并实现作业的优先调度 问题描述 优先队列priority queue是一种可以用于很多场合的数据结构,应用堆结构设计并实现一个优先队列。应用该优先队列实现作业的优先调度: 一个作业ti =(si,ei),si为作业的开始时间(进入时间),ei为作业的结束时间(离开时间)。作业调度的基本任务是从当前在系统中的作业中选取一个来执行,如果没有作业则执行nop操作。本题目要求的作业调度是基于优先级的调度,每次选取优先级最高的作业来调度,优先级用优先数(每个作业一个优先数pi)表征,优先数越小,优先级越高。作业ti进入系统时,即si时刻,系统给该作业指定其初始优先数pi = ei - si,从而使越短的作业优先级越高。该优先数在作业等待调度执行的过程中会不断减小,调整公式为:pi = pi - wi,其中的wi为作业ti的等待时间:wi = 当前时间-si。一旦作业被调度,该作业就一直执行,不能被抢占,只有当前执行作业指向完成时,才产生下一轮调度。所以可以在每次调度前动态调整各作业的优先数。 编程实现这样一个作业调度系统。 基本要求 ① 以堆结构实现优先队列。②作业集合中的各作业随机生成,根据作业的s属性和e属性动态调整作业队列,不断加入作业,作业结束删除作业。 ③要对作业调度的结果给出清晰的输出信息,包括:何时作业进入,何时调度哪个作业,何时离开,每个作业等待多长时间,优先数的动态变化情况等。 ④ 17. 哈夫曼编/译码器 问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编译码系统。 基本要求 一个完整的系统应具有以下功能: (1)I:初始化(Initialization)。从终端读入字符集大小n及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。 (2)C:编码(Coding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。 (3)D:解码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。 (4)P:打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时,将此字符形式的编码文件写入文件codeprint中。 (5)T:打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
18. AVL树的实现及分析 基本要求 ① 编写AVL树判别程序,并判别一个二叉搜索树是否为AVL树。二叉搜索树用其先序遍历结果表示,如:5,2,1,3,7,8。 ② 实现AVL树,其上的基本操作包括:Search,Insert,Delete,和Ascend; ③ 实现基本操作的动态演示(图形演示)。 ④ 扩展: a.实现带索引的AVL搜索树,实现其上的基本操作:Search,Insert,Delete,IndexSearch,IndexDelete和Ascend。前5种函数的时间复杂性应为O(logn),最后一种函数的时间复杂性应为O(n)。 b. 搜索树中有一些元素的关键值相同。
19. 直方图问题 问题描述: 在直方图问题中,从一个具有n个关键值的集合开始,要求输出不同关键值的列表以及每个关键值在集合中出现的次数(频率)。下图给出了一个含有10个关键值的例子。图a给出了直方图的输入,直方图的表格形式如图b所示,直方图的图形形式如图c 所示。直方图一般用来确定数据的分布,例如,考试的分数、图象中的灰色比例、在生产商注册的汽车和居住在洛杉矶的人所获得的最高学位都可以用直方图来表示。