数据结构大作业
数据结构大作业题目

数据结构大作业专业:班级:题目:学生姓名:(课程设计报告撰写的基本要求)题目(三号,黑体,居中)(空一行)一、任务与目标(标题均为小三号,宋体)(正文均为小四号,宋体,行距1.5倍)(这一部分需简单介绍题目内容,即该题目到底要做什么。
如果涉及明确的算法,最好再简单介绍一下算法产生的背景,还要列出各项本设计要达到的具体的目标。
)二、方案设计与论证(对目标进行总体分析,说明要采用的基本思路,说明遇到的问题和解决方法。
说明完成本次课程设计的完整过程。
要描述程序的设计思想,重点描述你自己提出的与已有工作不同的程序设计思想。
)三、算法说明(这一部分需详细描述解决问题所需要用到的算法和重要的数据结构,即该课程设计到底应该怎么做。
基本要求:处理问题中所用到的关键算法都要描述清楚,而不是仅描述主函数。
算法和数据结构可用伪码和图示描述,不要只写源代码和注释。
这一部分的目的是让读者在短时间内清楚地理解作者解决问题的整体思路,表达方式必须比源代码更通俗易懂。
如果读者感觉还不如直接读源代码来得明白,这一部分内容就失去了意义。
)四、全部源程序清单(给出本次大作业所编写全部源程序已经调试好的可运行代码清单,字体可以用宋体五号,页数可增加,每个程序开头用注释文字说明此程序的用途和大体工作过程,,程序中必要部分也要加入足够多的注释行。
)五、程序运行的测试与分析(这一部分内容需要紧扣课程设计的题目类型和要求,设计提供相应的测试方法和结果。
这部分包括运行图。
对于需要比较不同算法性能优劣的题目,应设计并填写一张性能比较表格,列出不同算法在同一指标下的性能表现。
仅仅罗列出一堆数据是不够的,还应将数字转化为图形、曲线等方式,帮助读者更直观地理解测试结果。
对于需要利用某算法解决某问题的题目,应设计并填写一张测试用例表。
每个测试用例一般应包括下列内容:·测试输入:设计一组输入数据;·测试目的:设计该输入的目的在于测试程序在哪方面可能存在漏洞;·正确输出:对应该输入,若程序正确,应该输出的内容;·实际输出:该数据输入后,实际测试得到的输出内容;·错误原因:如果实际输出与正确输出不符,需分析产生错误的可能原因;·当前状态:分为“通过”(实际输出与正确输出相符)、“已改正’’(实际输出与正确输出不符,但现在已修改正确)、“待修改”(实际输出与正确输出不符,且尚未改正)三种状态。
湖北汽车工业学院数据结构期末大作业

数据结构大作业只收手工纸面版,统一用学院的实验稿纸。
自留底稿,不退。
(已更新单选错误地方)单选题复习用1、数据结构除了研究数据本身如何表示和存储外,还需要重点研究数据___________D_____。
(A)的数量(B)的质量(C)的属性(D)之间的关系2、以下哪种逻辑结构重点表示数据之间的层次关系。
B(A)线性结构(B)树形结构(C)图形结构(D)集合结构3、以下哪种存储结构主要是通过增加新的管理数据来同时保证读取数据的高速和动态修改数据的高速。
C(A)顺序存储(B)链接存储(C)索引结构(D)哈希存储4、遍历操作是对某个数据结构中所有数据需要做到__A____的访问。
(A)至少一次且至多一次(B)可以多次(C)大部分一次,部分可以重复(D)二次5、下面哪一句话是正确的。
C(A)算法就是可以运行的程序(B)算法是程序的总结,只能用中文表示(C)算法是表示一种解决问题的思路(D)算法最好用英语表示,这样可以很快切换成程序。
6、一个满二叉树共有三层,问有几个结点?C(A)5 (B)6 (C)7 (D)87、结点个数为4个的无向完全图的边数是多少条?B(A)5 (B)6 (C)7 (D)88、实现函数调用返回点管理应该用数据结构__C_____。
(A)二叉树(B)图(C)栈(D)队列1、二分查找法适合__C____。
(A)适合顺序表和链表等结构(B)数据不需要排序,但是必须顺序存储(C)仅仅把数据排序后的顺序表(D)二叉树和图2、在字符串结构中,哪一个是进行查找操作?D(A)求子串(B)串比较(C)串遍历(D)子串定位3、在字符串的索引结构中,哪一个操作没有对原始数据区进行处理?C(A)插入字符(B)删除字符串(C)删除行(D)修改字符4、一个m*n的矩阵,用列优先存储,元素A(i,j)存储在位置k上,在横向关系上的直接前驱在一维数组中一般地址为(约定每一个元素仅仅占一个单元):D(A)k+1 (B)k-1 (C)k+m (D)k-m5、用建立大根堆来进行排序,最后的结果是什么?A(A)升序(B)降序(C)逆序(D)不一定6、图结构的遍历操作中,一般采用什么机制可以最简单地避免再次访问已经被访问过的结点。
数据结构大作业

班级021051学号021050**数据结构大作业题目 Huffman的编码与译码学院电子工程学院专业智能科学与技术学生姓名****导师姓名朱虎明Huffman 编码与译码1.实验目的:在掌握相关基础知识的基础上,学会自己设计实验算法,熟练掌握Huffman 树的建立方法,Huffman 编码的方法,进而设计出Huffman 译码算法,并编程实现。
2.实验要求:制作出能够实现基于26个英文字母的任意字符串的编译码。
写出技术工作报告并附源程序。
3.实验内容及任务:3.1.设字符集为26个英文字母,其出现频度如下表所示。
3.2.建Huffman 树;3.3.利用所建Huffman 树对任一字符串文件进行编码——即设计一个Huffman 编码器;3.4.对任一字符串文件的编码进行译码——即设计一个Huffman 译码器。
实现步骤:(1)数据存储结构设计; (2)操作模块设计; (3)建树算法设计;51 48 1 15 63 57 20 32 5 1 频度z y x w v u t 字符11611882380频度p 21 f q15 g r 47 h s o n m l k j 字符 57 103 32 22 13 64 186 频度 i e d c b a 空格 字符(4)编码器设计;(5)译码器设计4.分析以及算法描述4.1.分析问题1)首先学习二叉树的知识,了解二叉树的路径、权数以及带权路径长度计算。
2)认识霍夫曼树,了解霍夫曼树的定义,构造霍夫曼树构造算法①又给定的n个权值{w1,w2,w3,……,w n}构造根节点的二叉树,从而得到一个二叉树森林F={T1,T2,T3,……T n}。
②在二叉树森里选取根节点全职最小和此最小的两棵二叉树作为左右节点构造新的二叉树,此时新的二叉树的根节点权值为左右子树权值之和。
③在二叉树森林中删除作为新二叉树的根节点左右子树的两棵二叉树,将新的二叉树加入到二叉树森林F中。
数据结构大作业3

数据结构大作业一、大作业的性质和目的数据结构大作业是对软件设计的综合训练,包括问题分析、总体设计、用户界面设计、程序设计基本技能和技巧,以至一套软件工作规范的训练和科学作风的培养。
在数据结构实验中,完成的只是单一而“小”的算法,而本课程设计是对学生的整体编程能力的锻炼。
数据结构大作业的目的是训练学生对问题的抽象能力和算法的运用能力。
二、大作业安排每位同学独立完成,可自选题目或根据选择后面的一个参考题目来完成。
开学第一周统一提交到教学在线。
提交的内容包括:(1)设计报告文档。
该文档是评分的重要依据之一,请认真对待。
该文档包括如下内容:●需求分析: (陈述要解决的问题,要实现的功能),●详细设计:包括设计算法流程图、算法分析、使用的数据结构(要求详细论证);●软件测试:包括测试数据和测试结果记录●总结:设计过程中遇到的问题及解决方法;尚未解决的问题及考虑应对的策略;收获和心得;(2)源代码。
要求注释清晰,编写规范,模块化。
(3)可运行的exe文件。
要求充分测试,在XP操作系统中能正常运行。
以上内容打包后提交到教学在线。
三、考核和成绩评定老师根据设计文档、源代码和可执行文件,进行判分。
对于出现以下情况的学生,要求统一进行答辩:●执行文件无法正常运行。
●源程序疑似抄袭。
如果有发现两个同学的代码相类似则需要共同出席答辩。
如果判定抄袭,则为不及格。
开发过程可以部分复用网上的开源代码,但必须体现自己的工作,如果没有自己工作的部分,同样判为抄袭。
五、题目(任选其中之一或自拟)1. 数字化校园(1)设计华南理工大学的校园平面图,至少包括10个以上的地点,每两个地点间可以有不同的路,且路长可能不同。
以图中顶点表示校内各地点,存放名称、代号、简介等信息;用边表示路径,存放路径长度等相关信息。
(2)提供图中任意地点相关信息的查询。
(3)提供图中任意地点的问路查询,即查询任意两个地点之间的一条最短路径。
(4)学校要新建一间超市,请为超市选址,实现总体最优。
数据结构大作业

数据结构作业(1)年级:2004级(2)班专业:计算机科学与技术专业学号:200431500066姓名:秦博纯病人看病模拟程序编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队过程中,主要重复两件事:1.病人到达诊室,将病历本交给护士,排到等待队列中候诊。
2.护士从等待队列中取出下一们病人的病历,该病人进入人诊室就诊。
要求模拟病人等待这一过程,程序采用菜单方式,其选项及功能说明如下:a.排队——输入排队病人的病历号,加入病人排队队列中;b.就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除;c.查看排队——从队首到队尾列出所有的排队病人的病历号;d.不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行;e.下班——退出运行。
解:本项目的组成结构如图1所示,本程序的模块结构图如图2所示,图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系,虚线方框表示文件的组成,即指出该虚线方框中的函数存放在哪个文件中。
文件包含如下函数:. SeeDoctor():模拟病人看病的过程。
病人排队看医生,所以要用到一个队列,这里设计了一个不带头结点的单链表作为队列。
源程序如下:图1 项目组成#include<stdio.h>#include<malloc.h>typedef struct qnode{int data;struct qnode *next;}QNode;typedef struct{QNode *front,*rear;}QuType; 图2 项目的程序结构图void SeeDoctor(){int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType)); /*创建空队*/qu->front=qu->rear=NULL;while(flag==1) /*循环执行*/{printf("1:排队2:就诊3:查看排队4:不再排队,余下依次就诊5:下班请选择");scanf("%d",&sel);switch(sel){case 1:printf(">>输入病历号:");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL&&!find){if(p->data==no)find=1;elsep=p->next;}if(find)printf(">>输入的病历号重复,重新输入:");}while(find==1);p=(QNode *)malloc(sizeof(QNode)); /*创建结点*/p->data=no;p->next=NULL;if(qu->rear==NULL) /*第一个病人排队*/ {qu->front=qu->rear=p;}else{qu->rear->next=p; /*将*p结点入队*/qu->rear=p;}break;case 2: /*队空*/ if(qu->front==NULL)printf(">>没有排队的病人!\n");else /*队不空*/{p=qu->front;printf(">>病人%d就诊\n",p->data);if(qu->rear==p) /*只有一个病人排队*/{qu->front=qu->rear=NULL;}elsequ->front=p->next;free(p);}break;case 3: /*队空*/ if(qu->front==NULL)printf(">>没有排列的病人!\n");else /*队不空*/{p=qu->front;printf(">>排队病人: ");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}break;case 4: /*队空*/ if(qu->front==NULL)printf(">>没有排队的病人!\n");else /*队不空*/{p=qu->front;printf(">>病人按以下顺序就诊: ");while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}flag=0; /*退出*/break;case 5: /*队不空*/ if(qu->front!=NULL)printf(">>请排队的病人明天就医!\n");flag=0; /*退出*/break;}}}void main(){SeeDoctor();}程序运行结果如下:。
数据结构大作业

数据结构大作业在计算机科学领域中,数据结构是非常重要的一个概念。
它是指组织和存储数据的方式,以及对数据进行操作的方法。
数据结构的选择与实现直接影响着算法的复杂度和程序的性能。
因此,在学习数据结构的过程中,一般都会有相应的大作业,以帮助学生更好地理解和应用所学的知识。
本篇文章将重点介绍数据结构大作业的一般要求和一种可能的实现方案,供读者参考。
一、数据结构大作业要求数据结构大作业一般旨在让学生将所学的数据结构知识应用于实际问题的解决。
作业要求通常包括以下几个方面:1. 题目选择:作业题目需要涵盖数据结构的各个方面,例如链表、栈、队列、树、图等等。
题目应具备一定的难度,能够考察学生对数据结构的理解和运用能力。
2. 实现方式:学生需要根据题目要求选择合适的数据结构和算法,并进行实现。
一般要求使用编程语言来完成实现,并给出相应的代码。
3. 功能要求:作业题目通常会要求实现某些特定的功能或解决某些问题。
学生需要确保所实现的程序能够满足这些功能需求,并能正确运行。
4. 性能评估:作业可能会要求对所实现的程序进行性能评估,比如时间复杂度、空间复杂度等。
学生需要能够分析和解释程序的性能,并对可能的改进方法进行讨论。
5. 报告撰写:作业一般要求学生完成一份报告,对所实现的程序进行详细的说明和分析。
报告需要包括程序设计思路、实现细节、运行结果以及遇到的问题和解决方法等。
二、数据结构大作业实现方案示例以下是一个可能的数据结构大作业实现方案示例,以一个简化的社交网络系统为题目:1. 题目描述:设计一个基于图的社交网络系统,能够实现用户的注册、好友关系的建立和查询、用户之间的消息传递等功能。
2. 数据结构选择:可以使用图的数据结构来存储用户和好友关系的信息,使用链表来存储用户的消息队列。
3. 算法实现:根据题目要求,需要实现用户注册、好友关系的建立和查询、消息传递等功能的算法。
可以使用深度优先搜索或广度优先搜索算法来查找用户的好友关系,使用链表来实现用户消息的发送和接收。
《数据结构》大作业
《数据结构》大作业
数据结构是计算机科学中构建可靠计算机系统所必需的基础知识。
它主要是用来处理
非常大的量级的数据,并为用户快速访问,高效的解决计算机问题。
由于中央处理机的特
点是高速而有效,起到了极大的性能提升。
数据结构有很多不同的结构,其中最重要的是线性结构和非线性结构。
线性结构又可
以分为数组、单向链表、双向链表和循环链表;非线性结构可以分为二叉树、二叉搜索树、B树、堆、红黑树和图。
在实际计算机程序中,数据结构一般被用来搜索和排序存储的数据,这些操作有助于
提高计算机的运行效率。
如果用户想要查找某一个数据,可以在合适的存储结构中找到它;如果用户希望把一系列数据按照某种顺序排列起来,也可以使用数据结构进行排序。
同时数据结构还可以用于实现数据结构间的转换,使得用户可以较为方便的获得数据。
它的运用,更加方便了计算机的工作,更加提高了计算机的性能。
总之,数据结构是计算机科学中重要的组成部分,它为计算机的工作提供了重要的基础,更加方便了用户的操作,也帮助用户更好地完成计算机系统中的各种工作和解决方案。
数据结构大作业实验报告要求范文
浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:班级:学号:姓名:指导教师:年月一、大作业报告内容包括以下几个部分⒈问题描述:(题目)⒉设计:⑴数据结构设计和核心算法设计描述;⑵主控及功能模块层次结构;⑶主要功能模块的输入、处理(算法框架描述)和输出;⑷功能模块之间的调用与被调用关系等。
⒊测试:测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。
⒋使用说明和作业小结:⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;⑵在小结中说明程序的改进思想、经验和体会;⒌整理一份程序清单及运行示例的结果。
将以上各项文字材料及程序清单等装订成册,形成一个完整的报告。
题目从以下题目中任选一个,每人1个题目。
(一)试设计一个航空客运定票系统。
基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
3、实现提示:两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。
由于预约人数无法预计,队列也应以链表作为存储结构。
数据结构实践作业
数据结构作业利用单向链表数据结构完成对链表的如下操作:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表具体要求将程序功能做成菜单,形式如下:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表0、退出《数据结构》大作业1 总体要求将程序功能做成菜单,形式如下:(1)创建一条含整数结点的无序链表(2)链表结点的输出(3)链表结点的升序排序(4)分别计算链表中奇数和偶数结点之和并输出(5)释放链表2 开发环境软件环境:Window10,Visual Studio 20173 系统运行效果截图(1)主菜单:(2)创建一条含整数结点的无序链表:3,6,2,5,9(3)链表结点的输出(4)链表结点的升序排序(5)分别计算链表中奇数和偶数结点之和并输出(6)释放链表4 源程序#include<iostream>//头文件using namespace std;//节点数据结构定义struct node{int data;node *next;};//创建一条含整数结点的无序链表node *CreateLinkList(){node *p1, *p2, *head;int n;p2 = NULL;head = NULL;cout <<"正在创建一个无序链表\n";cout <<"请输入一个整数,以-1结束:";cin >> n;//循环输入一个整数,直到数值为-1结束,创建一条无序链表while (n != -1){p1 = new node;p1->data = n;//采用尾插法,新建一个结点并连接到链表尾部if (head == 0){head = p1; p2 = p1; //首结点的建立}else{p2->next = p1; p2 = p1;}cout <<"请输入一个整数,以-1结束:";cin >> n;}if (head != 0) //尾结点p2->next = 0;return(head);}//输出结点void PrintLinkList(const node *head){const node *p;p = head;while (p != NULL){cout <<" "<< (p->data);p = p->next;}cout << endl;}//升序排序void SortLinkList(node *head){node temp;node *p = NULL;node *q = NULL;//判断结点为空或者只有一个结点if (head == NULL || head->next == NULL){return;}//p->next!=NULL为链表倒数第2个结点for (p = head; p->next != NULL; p = p->next) {for (q = p->next; q != NULL; q = q->next){if (p->data > q->data) //升序{ //交换数据域temp.data = q->data;q->data = p->data;p->data = temp.data;}}}return;}//奇数结点和int OddSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断数值为是否奇数if (p->data % 2 != 0){sum = sum + p->data;}p = p->next;}return sum;}//偶数结点和int EvenSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断是否偶数if (p->data % 2 == 0){sum = sum + p->data; //偶数结点的数值累加}p = p->next;}return sum;}//释放链表void DeleteLinkList(node *head){node *p;while (head){p = head;head = head->next;delete p;}printf("释放成功\n");}void main(){node *head;head = NULL;int select;cout <<"************菜单************"<< endl;cout <<"输入对应选择,执行对应操作"<< endl;cout <<"1.创建一条含整数结点的无序链表"<< endl;cout <<"2.链表结点的输出"<< endl;cout <<"3.链表节点的升序排序"<< endl;cout <<"4.分别计算链表中奇数和偶数结点之和并输出"<< endl;cout <<"5.释放链表"<< endl;cout <<"0.退出"<< endl;while (1){cout <<"\n请输入选择:";cin >> select;switch (select) //判断选项,并执行对应的函数{case 1:{head = CreateLinkList();printf("无序链表创建完成\n");break;}case 2:{printf("输出链表中各结点数据:");PrintLinkList(head);break;}case 3:{SortLinkList(head);printf("升序后:");PrintLinkList(head);break;}case 4:{int oddsum;int evensum;oddsum = OddSumLinkList(head);evensum = EvenSumLinkList(head);printf("奇数和= %d,偶数和= %d\n", oddsum, evensum);break;}case 5:{DeleteLinkList(head);break;}case 0:{cout <<"退出"<< endl;exit(0);}default:{cout <<"输入选项有误,请重新输入:"<< endl;break;}}}}。
数据结构大作业
一、大作业设计题目以下题目中任选一个1.哈夫曼编码/译码器设计要求:针对字符集A及其各字符的频率值(可统计获得),给出其中字符的哈夫曼编码,并针对一段文本(定义在A上),进行编码和译码,实现哈夫曼编码/译码系统。
2.算术表达式求值设计要求:输入任意一个算术四则表达式,可求出其值。
3.一元多项式的代数运算设计要求:计算任意两个一元多项式的加法、减法和乘法。
4.最小生成树问题设计要求:在n个城市之间架设网络,只需保证连通即可,求最经济的架设方法。
二、大作业报告要求大作业报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下7个内容:1.需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:(1) 输入的形式和输入值的范围;(2) 输出的形式;(3) 程序所能达到的功能;(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2.概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
3.详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。
4.调试分析内容包括:a.调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;b.算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;c.经验和体会等。
5.用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。
6.测试结果列出你的测试结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于需求分析中所列。
7.附录带注释的源程序。
如果提交源程序软盘,可以只列出程序文件名的清单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书设计题目:学生管理系统专业:xxxxxx班级:xxxxxxxxxxxxxxxxxx设计人:xxxxxxxxxxxxxxx 山东科技大学2015年 1 月 3 日学生管理系统1.需求分析说明学生信息管理者用此程序所要完成的主要工作为:输入学生的个人信息、查找学生信息、通过此系统可以方便的进行上述工作。
每位同学所包含的信息有:姓名、学号、语文成绩、数学成绩和英语成绩。
1.1 主函数模块本模块的主要功能是调用各个模块,实现程序的主要功能。
1.2 排序功能本模块的主要功能是根据用户的选择进行数组的创建,并对输入数据或者随机产生的数据进行排序1.3 输入子模块本模块的主要功能是通过键盘录入学生信息,并对用户输入数据进行处理,创建数组。
1.4 系统需求分析开发环境:Windows XP以上版本操作系统实用软件:编写实验报告:Microsoft Office Word编译工具:visual C++ 6.0二、概要设计2.1 功能模块图功能模块图2.2各模块的算法设计说明(1)存储学生信息功能,定义结构体student,用scanf和cin函数进行输入。
流程图如图2.1.1 存储学生信息流程图:存储学生信息流程图相应代码设计:typedef struct A{char a[20];//学生姓名int num;//学生学号int chscore,mascore,enscore;//学生的语文数学英语成绩} Student; //存储学生个人信息的结构体typedef struct{Student *elem;int length;} SqList;(2)查找有补考的同学,并按成绩降序排列输出。
流程图如图2.1.2查找有补考同学信息功能流程图:查找有补考同学信息功能流程图(3)将学生按照学号的升幂排序,为后续查询学生用二分查找提供条件。
流程图如图2.1.3sort函数排序流程图:sort函数排序流程图(4)查找学生个人信息,根据用户输入的学号进行查找。
查找方法为二分查找。
(5)主函数流程图如图3.1.4主函数流程图:主函数流程图2.2 各模块函数bool cmp (const Student &a,const Student &b);//按照总成绩进行排序bool cmpp (const Student &a,const Student &b);//按照学号进行排序void CreatList(SqList &L,int n);//建立数组void Sesrch_Bin(SqList &L,int n);//进行二分查找三、详细设计3.1 输入学生信息程序运行后,创建一个student结构体,多组情况,每组输入两个整数分别表示学生的总数和查询数量。
3.2输出有补考学生的全部信息调用sort()函数,首先将学生按成绩排序,运用for循环和if(L.elem[i].chscore<60||L.elem[i].mascore<60||L.elem[i].enscore<6 0)语句输出,如果总成绩相同,学号小的在前面。
3.3 排序调用sort()函数对Student按照学号升序进行排序,此函数中采用了冒泡排序的方法,此方法只有在前一个学生的学号大于后一个学生的学号时,才会需要一个辅助空间用作暂存记录,空间复杂度低,并且稳定。
3.4 查询学生信息运用for循环函数,输入要查询学生的学号,对已经排序的student进行二分查找,low<=high时遍历,如果nu==s[mid].no 时找到输出学生的信息语句:{printf("%s %d %d %d %d\n",L.elem[i].a,L.elem[i].num,L.elem[i].chs core,L.elem[i].mascore,L.elem[i].enscore);}如果没有输出printf("NOT FOUND\n");3.5退出程序主函数中while(~)等待输入,用户只要在运行的页面中输入ctrl+z,即可退出系统。
四、运行结果及分析本程序需用二分法,其余方法超时,在输入输出时注意用标准语言输入,注意格式。
在运行框内输入Zhangyi 201501 90 90 90Zhanger 201502 80 80 80Zhangsan 201404 70 70 70Zhangsi 201504 60 60 60Zhangwu 201505 50 50 50wcr 1124 100 100 100loushangdashen 1234 60 60 602015012015032015051201506输出结果为下图:五.总结通过这次课程设计,我学会了很多,首先,我对自身的知识掌握度加大了,以前只是单纯的课本掌握,现在通过编写,修改,测试程序,对课程设计中的一些知识更加了解了。
其次,对于一些比较死板的知识,通过运用,对它提高了很大的兴趣,而且,自己设计的程序能够运行出来,自己非常有自豪感,满足感。
总的说来,努力还是很有成效的,锻炼了整体的能力,并且通过一次次的调试来读懂程序,程序更加完善。
数据结构在编程语言中是一门相当有技术含量的语言,学会并能够掌握它,对以后的生活帮助很大。
附:主要算法的源代码#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>using namespace std;typedef int Status;#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 2001typedef struct{char a[20];int num;int chscore,mascore,enscore;} Student;typedef struct{Student *elem;int length;} SqList;bool cmp (const Student &a,const Student &b){int sum1 = a.chscore + a.mascore + a.enscore;int sum2 = b.chscore + b.mascore + b.enscore;if(sum1 == sum2)return a.num < b.num;elsereturn sum1 > sum2;}bool cmpp (const Student &a,const Student &b){return a.num < b.num;}void CreatList(SqList &L,int n){L.elem=new Student[MAXSIZE];for(int i=0; i<n; i++){scanf("%s",L.elem[i].a);cin>>L.elem[i].num>>L.elem[i].chscore>>L.elem[i].m ascore>>L.elem[i].enscore;}L.length=n;}void Sesrch_Bin(SqList &L,int n){int low=0,high=L.length-1,mid;while(low<=high){mid=(low+high)/2;if(num==L.elem[mid].num) return mid;else if(num<L.elem[mid].num) high=mid-1;else low=mid+1;}return 0;}int main(){int m,n,a;SqList L;scanf("%d%d",&m,&n);CreatList(L,m);sort(L.elem,L.elem+n,cmp);for(int i=0; i<m; i++){if(L.elem[i].chscore<60||L.elem[i].mascore<60||L.e lem[i].enscore<60)printf("%s %d %d %d %d\n",L.elem[i].a,L.el em[i].num,L.elem[i].chscore,L.elem[i].mascore,L.elem[i].enscore);}sort(L.elem,L.elem+n,cmpp);for(int i=0; i<n; i++){int b;cin>>a;b=Sesrch_Bin(L,a);if(b==0)printf("NOT FOUND\n");elseprintf("%s %d %d %d %d\n",L.elem[b-1].a,L. elem[b-1].num,L.elem[b-1].chscore,L.elem[b-1].mascore,L.elem[b-1]. enscore);}}。