数据结构课程设计(数据结构课程设计的图书目录)
本文目录
- 数据结构课程设计的图书目录
- 数据结构课程设计是什么
- 数据结构课程设计-客户消费积分管理系统
- 求一数据结构课程设计心得体会
- 数据结构课程设计
- 数据结构课程设计的需求分析怎么写
- 数据结构课程设计的目的和意义
- 急!!!!!数据结构课程设计
- 数据结构课程设计(学生证管理程序)
数据结构课程设计的图书目录
第1章 数据结构课程设计概述1.1 数据结构简介1.2 课程设计目标和特点1.3 编写说明1.4 课程设计实例的标准格式第2章 线性表的应用2.1 存储结构与基本运算的算法2.2 集合的交、并运算2.3 学生成绩管理2.4 多项式求导2.5 约瑟夫环问题2.6 数据库管理系统第3章 栈的应用3.1 存储结构与基本运算的算法3.2 括号匹配3.3 汉诺塔问题3.4 算术表达式求值3.5 马踏棋盘第4章 队列的应用4.1 存储结构与基本运算的算法4.2 看病排队候诊问题4.3 数制的转换4.4 停车场管理4.5 基数排序第5章 串的应用5.1 存储结构与基本运算的算法5.2 KMP算法5.3 最长公共子串5.4 大整数计算器第6章 多维数组和广义表的应用6.1 存储结构与基本运算的算法6.2 魔方阵6.3 稀疏矩阵的加法运算6.4 本科生导师制问题第7章 树状结构的应用7.1 存储结构与基本运算的算法7.2 线索二叉树的创建与遍历7.3 由遍历确定二叉树7.4 电文的编码和译码7.5 家族关系查询系统第8章 图状结构的应用8.1 存储结构与基本运算的算法8.2 地铁建设问题8.3 安排教学计划8.4 校园导航附录A 课程设计实例软件包参考文献
数据结构课程设计是什么
.需求分析1.运行环境硬件:计算机486/64M以上操作系统: WIN9x 以上/WIN2000/WIN XP/WIN ME相关软件:vistualC++2.程序所实现的功能:(1)建立并显示图的邻接表。(2)深度优先遍历,显示遍历结果。(3)对该图进行拓扑排序,显示排序结果。(4)给出某一确定顶点到所有其它顶点的最短路径。3.程序的输入,包含输入的数据格式和说明(1)输入顶点数,及各顶点信息(数据格式为整形)(2)输入边数,及权值(数据格式为整形)4.程序的输出,程序输出的形式(1)输出图的邻接表、深度优先遍历结果、拓扑排序结果。(2)输入某一确定顶点到其它所有顶点的最短路径。5.测试数据二、设计说明1、 算法设计的思想建立图类,建立相关成员函数。最后在主函数中实现。具体成员函数的实现请参看源程序。 2、 主要的数据结构设计说明图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。3、 程序的主要模板template 《class Type》 class Graph4、 程序的主要函数 Graph、link()、DFTraverse()、TopologicalOrder()、TopologicalOrder()、GetVertexPos()、ShortestPath三、上机结果及体会1、 实际完成的情况说明主要程序参考教材《数据结构——C++版》。2、 程序的性能分析可连续建图 3、 上机过程中出现的问题及其解决方案。编译没有错误,但结果有问题。解决方案:虽然程序的编译通过,只能说明语法上没有问题,结果只所以不正确是因为算法上原因。4、 程序中可以改进的地方说明程序中的深度优先遍历,浪费空间较大,可以考虑用循环来做。但这样将付出代码长度度加长的代价。5、 程序中可以扩充的功能及设计实现假想实现假想:随用户的输入可以随时动态的显示图的生成。6、 收获及体会编写程序即是一件艰苦的工作,又是一件愉快的事情。最大的收获:编程时如果遇到看似简单但又无法解决的问题,很容易灰心丧气。此时切不可烦躁,一定要冷静的思考,认真的分析。要勇敢的面对问题,勇敢的接受问题,勇敢的处理问题,最后最勇敢的解决问题。四、参考文献数据结构(C++版) 叶核亚 主编 机械工业出版社数据结构经典算法实现与习题解答 汪杰 编著 人民邮电出版社数据结构课程设计 苏仕华 编著 机械工业出版社数据结构程序设计题典 李春葆 编著 清华大学出版社数据结构课程与题解(用C/C++描述) 胡圣荣 编著 北京大学出版社 char op //程序控制变量
数据结构课程设计-客户消费积分管理系统
用win-tc可运行、、、、、1. 设计目的数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。2. 设计内容和要求问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。基本要求:1.采用一定的存储结构进行客户信息的存储;2.对客户的信息可以进行修改、删除、添加;3.能够根据消费情况进行客户积分的计算;4.根据积分情况实行不同程度的打折优惠。3.本设计所采用的数据结构本系统用到的主要数据结构为数组和文件。一个数组对应一个客户,里面用3个字符串分别存储着用户的客户号、姓名和消费情况。然后将数组写入文件,查询时读取文件,提取相应信息。4.功能模块详细设计4.1 详细设计思想在数组中定义3个字符串gukehao、xingming、xiaofei,分别存储客户的顾客号、姓名、消费额。通过录入函数对3个字符串循环进行赋值,然后根据消费额使用if语句判断其折扣区间,复制完毕后存入文件s_score.txt。修改函数首先按照用户输入的客户号找到相应存储文件,然后输出相应信息供客户阅览,最后提供修改命令,修改完毕后删除原文件,用新文件替代原文件。查找函数首先读取文件,然后根据用户输入客户号找到相应文件输出客户信息(顾客号、姓名、消费额、积分、折扣)。删除函数根据用户输入客户号找到相应文件进行删除。主函数为用户界面,1-4分别对应录入、修改、查找、删除函数,5为退出。 4.2 源代码#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"#include "mem.h"#include "ctype.h"#include "alloc.h"struct score{ char gukehao; /*定义3个存储客户信息的字符串*/ char mingzi; float score;}data,info; /*定义数组*/ int i,j,k=0; float n; /*n为折扣值*/ char temp,ch; FILE *fp,*fp1;void luru(){ if((fp=fopen("s_score.txt","ab+"))==NULL) { printf("cannot open this file.\n"); getch();exit(0); } for(i=0;i》=0;i++) /*无限循环知道用户选择停止*/ { printf("Please input gukehao:"); gets(data.gukehao); printf("please input mingzi:"); gets(data.mingzi); printf("Please input xiaofei:"); gets(temp);data.score=atof(temp); /*不能直接赋值,采用转换函数*/ if(data.score《=5000) /*判断折扣区间*/ n=1; else if(data.score》5000) n=0.95; else n=0.9; fwrite(&data,sizeof(data),1,fp); /*写入文件*/ printf("another?(input n to main/anykey to continue)\n"); /*循环停止判断*/ ch=getch(); if(ch==’n’||ch==’N’) break; } fclose(fp);}void xiugai(){ if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) { printf("Cannot open this file.\n"); exit(0); } printf("\nPlease input shuru xiugai gukehao:"); scanf("%d",&i); getchar(); while((fread(&data,sizeof(data),1,fp))==1) /*读取文件*/ { j=atoi(data.gukehao); if(j==i) /*根据输入数值确定客户号*/ { printf("gukehao:%s\nmingzi:%s\n",data.gukehao,data.mingzi); printf("Please input mingzi:"); gets(data.mingzi); printf("Please input xiaofei:"); gets(temp);data.score=atof(temp);} fwrite(&data,sizeof(data),1,fp1); } fseek(fp,0L,0); /*0位移*/ fseek(fp1,0L,0); while((fread(&data,sizeof(data),1,fp1))==1) { fwrite(&data,sizeof(data),1,fp); /*取代原文件*/ } fclose(fp); fclose(fp1);}void chazhao(){ if((fp=fopen("s_score.txt","rb"))==NULL) { printf("\nCannot open this file.\n"); exit(0); } printf("\nPlease input gukehao chakan:"); scanf("%d",&i); while(fread(&data,sizeof(data),1,fp)==1) { j=atoi(data.gukehao); if(i==j) { printf("gukehao:%s\nmingzi:%s\nxiaofei:%f\njifen:%f\nzhekou:%f\n",data.gukehao,data.mingzi,data.score,n); } }getch();}void shanchu(){if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL) { printf("\nopen score.txt was failed!"); getch(); exit(0); } printf("\nPlease input gukehao which you want to del:"); scanf("%d",&i);getchar(); while((fread(&data,sizeof(data),1,fp))==1) { j=atoi(data.gukehao); if(j==i) { printf("Anykey will delet it.\n"); getch(); continue; } fwrite(&data,sizeof(data),1,fp1); } fclose(fp); fclose(fp1); remove("s_score.txt"); /*删除文件*/ rename("temp.txt","s_score.txt"); printf("Data delet was succesful!\n"); printf("Anykey will return to main."); getch();}main(){while(1){ clrscr(); /*清屏*/ printf("*=====================================================* \n"); printf("* 1》luru 2》xiugai * \n"); printf("* 3》shanchu 4》chazhao * \n"); printf("* 5》exit * \n"); printf("* * \n"); printf("* -----------------------------------------------------------------------------------------* \n"); printf(" Please input which you want(1-5):\n"); ch=getch(); switch(ch) { case ’1’:luru();break; case ’2’:xiugai(); break; case ’3’:shanchu(); break; case ’4’:chazhao(); break; case ’5’:exit(0); default: continue; }}}5.结论 通过对系统的设计,发现文件相对于其他数据结构更便于修改和删除。
求一数据结构课程设计心得体会
数据库课程设计大赛的尘嚣渐渐远去,怀着对这次大赛的些许不舍,怀着对当初课程设计开始时候的豪情万丈的决心的留恋,怀着通过这次课程设计积累的信心与斗志,我开始写这篇文章,为自己的足迹留下哪怕是微不足道但是对自己弥足珍贵的痕迹并期望与大家共勉。首先,让我的记忆追溯到大二暑假,在老大的指引下(老大劝我学asp.net),我接触到Microsoft 公司的.NET产品。那个时候我已经学过vc和asp,因为windows程序设计实验的课的关系,接触过vb,但是没有专门去学他,因为习惯了c++里面的class,int,觉得vb的sub,var 看着就不是很顺心。我是一个好奇心很强的人,突然看到了一个号称“.net是用于创建下一代应用程序的理想而又现实的开发工具”,而且主推c#语言,由于对c语言的一贯好感,我几乎是立刻对他产生了兴趣。我就开始了对c#的学习,任何语言都不是孤立存在的,所以数据交互是很重要的,暑假的时候我把我们这学期的课本数据库系统概论看了一遍。我记得以前用c语言编程的时候,数据是在内存中申请空间,譬如使用数组等等。很耗费内存空间。这个时候就是数据库站出来的时候啦,于是我又装上了sql server2000,以前学asp的时候用的是access,那个时候只是照着人家做,理论是什么也不是很清楚。通过一个暑假的学习,基本搞清楚了理论方面的东西,具体怎么用也不是很清楚。但是这为这学期的课程设计打下了铺垫。来到学校后,随着这学期的数据库课程大赛开始了,我有一个看法就是我自己应该具备的能力不是我会多少,而是我应该具备快速学会东西的能力。遇到什么就学什么。我们有时候很容易被一些专业名词说吓着,包括什么建模,软件工程,数据分析,数据挖掘等等。我身边就有很多同学被这些纸老虎所唬住,而没有勇气去接触他们,总是说这个太难了之类的退堂鼓的话,他们低估了自己的潜力同时也压抑住了他们自己的好奇心。其实都是纸老虎,又不是什么国家科研难题,只是去用一些工具,发明工具是很难,但是用一个工具就容易多了,just do it!我记得我做这个数据库之前,我们老师说要做好前期分析,我就在网上搜索用什么分析工具好。最后我选择了roseUML建模工具。在此之前,我脑袋里面没有软件建模的思想,什么UML建模对我而言就是一张空白的纸。但是真正接触后并没有想象的那么难,有什么不懂的上网去搜索,这是一个信息横流的世界,有google,baidu就没有不能解决的知识难题。以及后来的数据库分析的时候用到的powerdesigner也是一样。 开发的时候我想过用什么架构,c/s模式?模式有很多,怎么选择?我就上网搜索现在最流行的架构是什么。结果搜到了MVC架构,就是你啦。我决定用这个架构,不会,没关系,咱学。Just do it!前期工作准备好后,那么我就得把我暑假学的.net加以实践。这个时候我更加深入的了解了利用ado.Net操纵数据库的知识。并且对数据库里面的存储过程有了比较深入的了解。经过大概2个多星期的奋斗,我完成了我的数据库课程设计--基于.net数据集的图书馆管理系统。并最后非常荣幸的获得了大赛的一等奖以及以及新技术应用奖。 与其临渊羡鱼,不如退而结网。这次数据库课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个数据库开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。我完成了这次数据库课程设计,不过这只是我学习路上的驿站,未来十年.NET的核心技术就是XML,我会继续学习它,包括jave公司的j2ee我也很想试试,语言本来就是相通的,just do it!语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。古语说的好:学无止境啊! 我很庆幸我参加了这次数据库大赛,让我确实打开了眼界。
数据结构课程设计
《数据结构课程设计》列举了数据结构课程设计实例,通过综合训练,能够培养学生实际分析问题、解决问题、编程和动手操作等多方面的能力,最终目的是帮助学生系统地掌握该门课程的基本内容,并运用所学的数据结构知识去解决实际问题。全书共8章,内容包括数据库课程设计概述、线性表、栈、队列、串、多维数组和广义表、树状结构、图状结构等问题的应用。《数据结构课程设计》是一本独立于具体的数据结构教材的课程设计辅导书,通过针对每种数据结构的具体实例,循序渐进地启发学生完成设计。书中给出的实例都是完整可运行的,同时给出了测试样例、总结与思考等,是一本很好的教学辅导参考书。《数据结构课程设计》可作为高等院校计算机专业及相关专业教材或参考书,也可供从事软件开发工作和计算机编程爱好者参考。
数据结构课程设计的需求分析怎么写
一 需求分析: 在该部分中根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么?以及限制条件是什么? 1.1问题描述 1.2基本要求 (1) 输入的形式和输入值的范围; (2) 输出的形式; (3) 程序所能达到的功能; 二 概要设计 说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。 1、 数据结构 2、 程序模块 3、各模块之间的调用关系以及算法设计 三 详细设计 实现概要设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);写出出函数和过程的调用关系. 四 测试与分析 测试数据,输出测试的结果,这里的测试数据应该完整和严格。并对结果进行分析。 五 总结 总结可以包括 : 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。
数据结构课程设计的目的和意义
1、目的:通过实践,让学生加深对数据结构知识的理解,提高计算机算法设计能力,锻炼学生的综合能力,掌握程序的实际开发流程,以提高算法解决问题的能力,增强算法设计的自觉性和把握算法实施操作的能力。2、意义:帮助学生更深地理解数据结构的知识内容,使他们能够实践运用和掌握程序开发实际流程,以及分析、设计、实现、测试和维护计算机程序等技能。有助于帮助学生加深对算法设计思想及其在计算机程序中的实际应用。
急!!!!!数据结构课程设计
#include 《iostream.h》#include 《malloc.h》#include 《stdlib.h》#define MAX_VERTEX_NUM 30 //最大顶点数#define INFINITY 10000000 //无穷大typedef struct ArcCell{ int adj;}ArcCell,AdjMatrix;typedef struct{ char vexs; AdjMatrix arcs; int vexnum,arcnum;}MGraph;//查询顶点位置int LocateVex(MGraph G,char v){ int i=0; while(G.vexs!=v&&i《G.vexnum) i++; return i;}//创建图的邻接矩阵MGraph CreateMGraph(){ MGraph G; int i,j,k; int w; char v1,v2; cout《《"请输入图的顶点数:"; cin》》G.vexnum; cout《《"请输入图的弧数:"; cin》》G.arcnum; for(i=0;i《G.vexnum;i++){ cout《《"请输入第"《《i+1《《"个顶点:"; cin》》G.vexs; } for(i=0;i《G.vexnum;i++) for(j=0;j《G.vexnum;j++) G.arcs.adj=INFINITY; for(k=0;k《G.arcnum;k++){ cout《《"请输入弧"《《k+1《《"所关联的顶点和权值:"; cin》》v1》》v2》》w; if(LocateVex(G,v1)《G.vexnum) i=LocateVex(G,v1); else{ cout《《"没有找到此顶点!"《《endl; k--; continue; } if(LocateVex(G,v2)《G.vexnum) j=LocateVex(G,v2); else{ cout《《"没有找到此顶点!"《《endl; k--; continue; } G.arcs.adj=w; G.arcs; } cout《《"MGraph创建成功!"《《endl; return G;}//……………………输出MGraph…………………void PrintMGraph(MGraph G){ cout《《"图的邻接矩阵"《《endl; int i,j; for(i=0;i《G.vexnum;i++) cout《《" "《《G.vexs; cout《《endl; for( i=0;i《G.vexnum;i++){ cout《《G.vexs《《" "; for( j=0;j《G.vexnum;j++){ if(G.arcs.adj!=INFINITY) cout《《G.arcs.adj《《" "; else cout《《"∞"《《" "; } cout《《endl; } cout《《"--------------------------------------------"《《endl;}//……………………求各个顶点的度…………………void Vdu(MGraph G){ //求各个顶点的度 int i,j; int V; for(i=0;i《G.vexnum;i++){ int count=0; for(j=0;j《G.vexnum;j++) if(G.arcs.adj!=INFINITY) count++; V=count; } for(i=0;i《G.vexnum;i++) cout《《endl《《"第"《《i+1《《"个顶点"《《G.vexs《《endl;}//……………………插入顶点…………………void InsertVex(MGraph &G){ char v; int i,j; cout《《"请输入你想插入的顶点:"; cin》》v; i=G.vexnum++; G.vexs=v; for(j=0;j《G.vexnum;j++) G.arcs.adj=INFINITY; j=G.vexnum-1; for(i=0;i《G.vexnum;i++) G.arcs.adj=INFINITY; cout《《endl《《"插入成功!"《《endl;}//……………………插入弧…………………void InsertArc(MGraph &G){ char v1,v2; int i,j,w; cout《《"请输入你要插入的弧所关联的顶点和权值:"; cin》》v1》》v2》》w; if(LocateVex(G,v1)《G.vexnum&&LocateVex(G,v2)《G.vexnum){ i=LocateVex(G,v1); j=LocateVex(G,v2); G.arcs.adj=w; G.arcs; cout《《endl《《"插入成功!"《《endl; }else{ cout《《"没有找到关联的顶点!"《《endl; }}//……………………删除顶点…………………void DeleteVex(MGraph &G){ int i,j; char v; cout《《"请输入你所要删除的顶点:"; cin》》v; if(LocateVex(G,v)《G.vexnum){ int l=LocateVex(G,v); for(i=l;i《G.vexnum-1;i++) G.vexs; for(i=l;i《G.vexnum-1;i++) for(j=0;j《G.vexnum;j++) G.arcs; for(i=0;i《G.vexnum;i++) for(j=l;j《G.vexnum-1;j++) G.arcs; G.vexnum--; cout《《"已成功删除此顶点!"《《endl; }else cout《《"没有此顶点!"《《endl;}//……………………删除弧…………………void DeleteArc(MGraph &G){ int i,j; char v1,v2; cout《《"请输入你要删除的弧所关联的顶点"; cin》》v1》》v2; if(LocateVex(G,v1)《G.vexnum&&LocateVex(G,v2)《G.vexnum){ i=LocateVex(G,v1); j=LocateVex(G,v2); G.arcs.adj=INFINITY; G.arcs; cout《《"已成功删除此弧!"《《endl; }else cout《《"没有找到此弧所关联的顶点!"《《endl;}typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc;}ArcNode;typedef struct vnode{ char data; ArcNode *firstarc;}vnode,adjlist;typedef struct { adjlist vertices; int vexnum,arcnum;}ALGraph;//……………………创建图的邻接表…………………ALGraph CreateUDG(MGraph G){ ALGraph gra; int i,j; ArcNode *arc,*tem,*p; for(i=0;i《G.vexnum;i++){ gra.vertices; gra.vertices.firstarc=NULL; } for(i=0;i《G.vexnum;i++){ for(j=0;j《G.vexnum;j++){ if(gra.vertices.firstarc==NULL){ if(G.arcs.adj!=INFINITY){ arc=(ArcNode*)malloc(sizeof(ArcNode)); arc-》adjvex=j; gra.vertices.firstarc=arc; arc-》nextarc=NULL; p=arc; j++; while(G.arcs.adj!=INFINITY&&j《G.vexnum){ tem=(ArcNode*)malloc(sizeof(ArcNode)); tem-》adjvex=j; gra.vertices.firstarc=tem; tem-》nextarc=arc; arc=tem; j++; } } }else{ if(G.arcs.adj!=INFINITY){ arc=(ArcNode*)malloc(sizeof(ArcNode)); arc-》adjvex=j; p-》nextarc=arc; arc-》nextarc=NULL; p=arc; } } } } gra.vexnum=G.vexnum; gra.arcnum=G.arcnum; cout《《"ALGraph创建成功!"《《endl; return gra;}//……………………输出ALGraph…………………void PrintUDG(ALGraph gra){ int i; ArcNode *p; cout《《"图的各顶点为:"《《endl; for(i=0;i《gra.vexnum;i++) cout《《gra.vertices.data《《" "; cout《《endl; cout《《"图的邻接表为:"《《endl; for(i=0;i《gra.vexnum;i++){ cout《《i《《" "《《gra.vertices.data; p=gra.vertices.firstarc; while(p){ cout《《"-》"《《p-》adjvex; p=p-》nextarc; } cout《《endl; }}//……定义全局变量……int visited;int we;//……求第一个邻接点……int firstadjvex(ALGraph gra,vnode v){ if(v.firstarc!=NULL) return v.firstarc-》adjvex; else return -1;}//……求相对于w的下一个邻接点int nextadjvex(ALGraph gra,vnode v,int w){ ArcNode *p; p=v.firstarc; while(p!=NULL&&p-》adjvex!=w){ p=p-》nextarc; } if(p-》adjvex==w&&p-》nextarc!=NULL){ p=p-》nextarc; return p-》adjvex; }else return -1;}//……………………图的深度优先遍历…………………void DFS(ALGraph gra,int i){ visited=1; int we1; cout《《gra.vertices.data《《" "; for(we=firstadjvex(gra,gra.vertices,we)){ we1=we; if(visited==0) DFS(gra,we); we=we1; }}void DFSTravers(ALGraph gra){ int i; for(i=0;i《gra.vexnum;i++){ visited=0; } for(i=0;i《gra.vexnum;i++){ if(visited==0) DFS(gra,i); } cout《《endl;}//…………………………………………………………………//……………………队列定义和基本操作……………………typedef struct qnode{ int data; struct qnode *next;}qnode,*queueptr;typedef struct{ queueptr front; queueptr rear;}linkqueue; //……初始化队列………void initqueue(linkqueue &q){ q.rear=(queueptr)malloc(sizeof(qnode)); q.front=q.rear; q.front-》next=NULL;} //……入队列………int enqueue(linkqueue &q,int e){ queueptr p; p=(queueptr)malloc(sizeof(qnode)); //系统生成qnode节点并赋予p if(!p) return 0; else{ p-》data=e; p-》next=NULL; q.rear-》next=p; q.rear=p; return 1; } } //……出队列……int dequeue(linkqueue &q,int &e){ queueptr p; if(q.front==q.rear) return 0; p=q.front-》next; e=p-》data; q.front-》next=p-》next; if(q.rear==p) q.rear=q.front; free(p); return 1;} //……判断队列是否为空……int queueempty(linkqueue q){ if(q.front==q.rear) return 1; return 0;}//………………………………………………………………………//……………………图的广度优先遍历…………………void BFSTravers(ALGraph gra){ int i,e; linkqueue q; for(i=0;i《gra.vexnum;i++) visited=0; initqueue(q); //附设队列存储已经被访问的路径长度为1 2...的顶点 for(i=0;i《gra.vexnum;i++) if(!visited){ visited=1; cout《《gra.vertices.data《《" "; enqueue(q,i); while(!queueempty(q)){ dequeue(q,e); for(we=firstadjvex(gra,gra.vertices,we)){ if(!visited){ visited=1; cout《《gra.vertices.data《《" "; enqueue(q,we); } } } } cout《《endl;}//……………………求图的连通分支…………………void DFSTraversFL(ALGraph gra){ int i,count=1; for(i=0;i《gra.vexnum;i++){ visited=0; } for(i=0;i《gra.vexnum;i++){ if(visited==0){ cout《《"第"《《count《《"个连通分支为:"; DFS(gra,i); //对连通图,只需从一个顶点出发深度优先遍历即可访问所有顶点 cout《《endl; count++; } }}//……………………用普里姆算法求最小生成树…………………void PRIM(ALGraph gra,int g,int n){ int lowcost; int i,j,k,min; for(i=2;i《=n;i++){ lowcost; prevex=1; } lowcost=0; for(i=2;i《=n;i++){ min=INFINITY; k=0; for(j=2;j《=n;j++) if(lowcost!=0){ min=lowcost; k=j; } cout《《gra.vertices.data《《" "《《min; lowcost=0; for(j=2;j《=n;j++) if(g){ lowcost; prevex=k; } cout《《endl; }}//…………求最短路径…………void ShortPath(MGraph G,char ch){ //迪杰斯特拉算法实现,某点到其余各点 int i,j,min,k,t,w; int v=0; int final; int lowcost; int q; k=LocateVex(G,ch); for(i=0;i《G.vexnum;i++){ final=0; lowcost.adj; for(j=0;j《G.vexnum;j++) q=0; if(lowcost《INFINITY){ q=1; q=1; } } lowcost=0; final=1; for(i=0;i《G.vexnum;i++){ min=INFINITY; for(j=0;j《G.vexnum;j++) if(!final) if(lowcost《min){ min=lowcost; v=j; } final=1; for(w=0;w《G.vexnum;w++) if(!final)){ lowcost.adj; for(t=0;t《G.vexnum;t++) q; q=1; } } for(i=0;i《G.vexnum;i++){ if(i!=k){ cout《《ch《《" to "《《G.vexs《《endl; cout《《"最短路径:"; if(lowcost《INFINITY){ for(j=0;j《G.vexnum;j++) if(q&&j!=i) cout《《G.vexs《《" "; cout《《G.vexs; cout《《"长度:"《《lowcost《《endl; }else cout《《"不存在!"《《endl; } }}typedef struct CSNode{ char data; struct CSNode *firstchild,*nextsibling; }CSNode,*CSTree;//……………………深度优先生成树…………………void DFSTree(ALGraph gra,int v,CSTree &T){ //深度优先搜索后顺序输出 visited=1; int w,first=1; CSTree p,q; for(w=firstadjvex(gra,gra.vertices,w)) if(!visited){ p=(CSTree)malloc(sizeof(CSNode)); p-》data=gra.vertices.data; p-》firstchild=NULL; p-》nextsibling=NULL; if(first){ T-》firstchild=p; first=0; }else q-》nextsibling=p; q=p; DFSTree(gra,w,q); }}void DFSForest(ALGraph gra,CSTree &T){ T=NULL; CSTree p,q; int v; for(v=0;v《gra.vexnum;v++) visited=0; for(v=0;v《gra.vexnum;v++) if(!visited){ p=(CSTree)malloc(sizeof(CSNode)); p-》data=gra.vertices.data; p-》firstchild=NULL; p-》nextsibling=NULL; if(!T) T=p; else q-》nextsibling=p; q=p; DFSTree(gra,v,p); }}//……………………先序遍历深度优先生成树…………………void Preorder(CSTree T){ if(T){ cout《《T-》data《《" "; Preorder(T-》firstchild); Preorder(T-》nextsibling); } cout《《endl;}//……………………求u到v之间的最短路径…………………void shortestdistance(MGraph G){ int i,u,v,w,S,E; char start,end; int Distance; cout《《"请输入两个顶点:"; cin》》start》》end; while(LocateVex(G,start)》=G.vexnum||LocateVex(G,end)》=G.vexnum){ cout《《"没有找到关联的顶点!请重新输入:"; cin》》start》》end; } for(i=0;i《G.vexnum;i++) G.arcs.adj=0; for(u=0;u《G.vexnum;u++) for(v=0;v《G.vexnum;v++) Distance.adj; for(u=0;u《G.vexnum;u++) for(v=0;v《G.vexnum;v++) for(w=0;w《G.vexnum;w++) if(Distance) Distance; S=LocateVex(G,start); E=LocateVex(G,end); if(Distance==INFINITY) cout《《start《《"到"《《end《《"的最短路径不存在!"《《endl; else cout《《start《《"到"《《end《《"的最短路径为:"《《Distance《《endl;}//……………………求所有顶点之间的最短路径…………………void shortdistance(MGraph G){ //弗洛依德算法实现,任意两顶点 int i,j,u,v,w; int D; for(i=0;i《G.vexnum;i++) G.arcs.adj=0; for(u=0;u《G.vexnum;u++) for(v=0;v《G.vexnum;v++) D.adj; for(u=0;u《G.vexnum;u++) for(v=0;v《G.vexnum;v++) for(w=0;w《G.vexnum;w++) if(D) D; for(i=0;i《G.vexnum;i++) for(j=0;j《G.vexnum;j++) if(D==INFINITY) cout《《G.vexs《《"的最短路径不存在!"《《endl; else cout《《G.vexs《《endl;}void main(){ int i,j; char ch=’y’; MGraph G; G.vexnum=0; ALGraph gra; gra.vexnum=0; int t; CSTree T=NULL; while(ch==’y’){ cout《《"************************************************************"《《endl; cout《《" MENU"《《endl; cout《《"************************************************************"《《endl; cout《《" "《《"1 |利用邻接矩阵创建图"《《endl; cout《《" "《《"2 |显示图的邻接矩阵"《《endl; cout《《" "《《"3 |求各顶点的度"《《endl; cout《《" "《《"4 |插入顶点"《《endl; cout《《" "《《"5 |插入弧"《《endl; cout《《" "《《"6 |删除顶点"《《endl; cout《《" "《《"7 |删除弧"《《endl; cout《《" "《《"8 |用邻接矩阵创建邻接表UDG"《《endl; cout《《" "《《"9 |显示图的邻接表"《《endl; cout《《" "《《"10 |深度优先便利序列"《《endl; cout《《" "《《"11 |广度优先便利序列"《《endl; cout《《" "《《"12 |图的连通分支"《《endl; cout《《" "《《"13 |求连通图最小生成树"《《endl; cout《《" "《《"14 |求任意顶点到其它顶点的最短路径"《《endl; cout《《" "《《"15 |求图的深度优先生成树"《《endl; cout《《" "《《"16 |对生成树进行先序遍历"《《endl; cout《《" "《《"17 |求两点间的最短路径"《《endl; cout《《" "《《"18 |求所有点之间的最短路径"《《endl; cout《《" "《《"0 |退出!"《《endl; cout《《"***********************************************************"《《endl; cout《《endl《《"请选择你要进行的操作:"; cin》》i; switch(i){ case 1: if(G.vexnum==0) G=CreateMGraph(); else cout《《"MGraph已经创建!"《《endl; break; case 2: if(G.vexnum!=0) PrintMGraph(G); else cout《《"MGraph为空!"《《endl; break; case 3: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else Vdu(G); break; case 4: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else InsertVex(G); break; case 5: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else InsertArc(G); break; case 6: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else DeleteVex(G); break; case 7: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else DeleteArc(G); break; case 8: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else{ gra=CreateUDG(G); } break; case 9: if(gra.vexnum!=0) PrintUDG(gra); else cout《《"UDG为空!"《《endl; break; case 10: if(gra.vexnum!=0){ cout《《"图的深度优先遍历序列为:"; DFSTravers(gra); } else cout《《"请先创建ALGraph!"《《endl; break; case 11: if(gra.vexnum!=0){ cout《《"图的广度优先遍历序列为:"; BFSTravers(gra); } else cout《《"请先创建ALGraph!"《《endl; break; case 12: if(gra.vexnum!=0){ cout《《"图的连通分支如下:"《《endl; DFSTraversFL(gra); } else cout《《"请先创建ALGraph!"《《endl; break; case 13: if(gra.vexnum!=0){ for(i=0;i《G.vexnum;i++) for(j=0;j《G.vexnum;j++) t.adj; cout《《"图的最小生成树为:"《《endl; PRIM(gra,t,G.vexnum); } else cout《《"请先创建ALGraph!"《《endl; break; case 14: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else{ char ch; cout《《"请选择一个顶点:"; cin》》ch; while(LocateVex(G,ch)》=G.vexnum){ cout《《"没有找到此顶点!请重新选择一个顶点:"; cin》》ch; } ShortPath(G,ch); } break; case 15: if(gra.vexnum==0) cout《《"请先创建ALGraph!"《《endl; else DFSForest(gra,T); break; case 16: if(!T) cout《《"请先求深度优先生成树!"《《endl; else{ Preorder(T); cout《《"深度优先生成树已成功创建!"《《endl; } break; case 17: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else shortestdistance(G); break; case 18: if(G.vexnum==0) cout《《"请先创建MGraph!"《《endl; else shortdistance(G); break; case 0: exit(1); default: cout《《"请在0~18之间进行选择!"《《endl; } cout《《"是否继续y/n:"; cin》》ch; system("cls"); }}
数据结构课程设计(学生证管理程序)
晚上找时间给你写出来/*【题目描述】请设计一个学生证的管理程序,该程序应该具有下列功能:(1) 通过键盘输入某位学生的学生证信息。学生证包含的信息请参看自己的学生证;【题目要求】(1) 存储结构采用顺序表或链表;(2) 用本学期所学算法实现各模块;(3) 主函数设计一个菜单,通过菜单进入各模块测试。要求用数据结构(c语言)*/#include 《iostream》#include 《string》using namespace std;struct student{int number;string name;int classno; /*string sex;其他字段不写了*/ student *next;};student * initclass(){ student *head=NULL,*p; int d;do{cin》》d;if(d==0) break;p=new student;p-》number=d;cin》》p-》name》》p-》classno;p-》next=NULL;if(head==NULL) head=p; else { p-》next=head; head=p; }} return head; } //(2) 给定学号,显示某位学生的学生证信息(姓名,学号,学院,班级,专业,入学时间,学制性别);void findstudent(student *head,int d){ student *p; p=head; while(p!=NULL && p-》number!=d) p=p-》next; if(p==NULL) {cout《《"没有这个学生"《《endl; exit(0);} if(p-》number==d) cout《《p-》number《《"\t"《《p-》name《《"\t"《《p-》classno《《endl;}//(3) 给定某个班级的班号,显示该班所有学生的学生证信息;void showclass(student *head,int cno){student *p=head;bool flag=false;while(p!=NULL){if(p-》classno==cno) { flag=true; cout《《p-》number《《"\t"《《p-》name《《"\t"《《p-》classno《《endl; } p=p-》next;}if(!flag) cout《《"没有这个班级的学生\n";}//(4) 给定某位学生的学号,修改该学生的学生证信息; void modify(student *head,int d) { student *p=head; while(p!=NULL && p-》number!=d) p=p-》next; if(p==NULL) { cout《《"没有这个学生"《《endl; exit(0); } if(p-》number==d) { cin》》p-》name》》p-》classno; cout《《p-》number《《"好学生信息更新完成"《《endl; } }//(5) 给定某位学生的学号,删除该学生的学生证信息;student *dropstudent(student *h,int d){student *p,*q;p=h;while(p!=NULL && p-》number!=d) p=p-》next; if(p==NULL) { cout《《"没有这个学生"《《endl; exit(0); } if(p-》number==d) { if(p==h) { h=h-》next; delete p; } else { q=h; while(q-》next!=p) q=q-》next; q-》next=p-》next; delete p; } cout《《d《《"号学生信息删除成功"《《endl; } return h;}(6) 提供一些统计各类信息的功能或排序功能。
更多文章:
祝福一对新人的简短语句(祝福新人的话简短 祝福新人比较新意的话)
2024年8月27日 05:20
办公自动化论文(急求论文资料 题目是:论办公自动化对秘书工作的影响)
2024年9月10日 15:20
最漂亮的妇女节手抄报(最好看小学生3.8妇女节手抄报 妇女节的手抄报)
2024年7月3日 13:50
班超的生平简介?班超字仲升,扶风平陵人,徐令彪之少子也超于是召鄯善王广,以虏使首示之,一国震怖的译文
2024年3月24日 09:40
雨后的天空 有一点迷蒙(雨后的天空,有一点迷茫,在远方回首,.这是什么歌的歌词,求歌曲名)
2024年6月14日 13:00