山东建筑大学数据结构设计介绍
- 格式:doc
- 大小:318.34 KB
- 文档页数:31
山东建筑大学计算机科学与技术学院课程设计说明书题目:赫夫曼树的建立校园导航系统学生搭配问题课程:数据结构院(部):计算机科学与技术学院专业:计算机科学与技术班级:计科063学生姓名:唐凝学号: 2006111083指导教师:张冬梅完成日期: 2008-07-6目录课程设计任务书一 (I)课程设计任务书二............................................... I I 课程设计任务书三.............................................. I II 赫夫曼树的建立.. (1)一、问题描述 (1)二、基本要求 (1)三、算法思想 (1)四、数据结构 (1)五、模块划分 (2)六、源程序 (2)七、测试数据 (4)八、测试情况 (5)校园导航系统 (6)一、问题描述 (6)二、基本要求 (6)三、算法思想 (6)四、数据结构 (6)五、模块划分 (6)六、源程序 (7)七、测试数据 (11)八、测试情况 (11)学生搭配问题 (12)一、问题描述 (12)二、基本要求 (12)三、算法思想 (12)四、数据结构 (12)五、模块划分 (12)六、源程序 (13)七、测试数据 (16)八、测试情况 (16)结论 (17)参考文献 (18)课程设计指导教师评语 (19)山东建筑大学计算机科学与技术学院课程设计任务书一课程设计任务书二课程设计任务书三指导教师(签字):教研室主任(签字)赫夫曼树的建立一、问题描述建立最优二叉树函数二、基本要求可以建立函数输入二叉树,并输出其赫夫曼树三、算法思想(1)初始化:由给定的n 个权值{w1,w2,…,wn}构造n 棵只有一个根结点的二叉树,从而得到一个二叉树集合F={T1,T2,…,Tn};(2)选取与合并:在F 中选取根结点的权值最小的两棵二叉树分别作为左右子树构造一棵新的二叉树,这棵新二叉树的根结点的权值为其左右子树根结点的权值之和;(3)删除与加入:在F 中删除作为左右子树的两棵二叉树,并将新建立的二叉树加入到E 中;(4)重复(2)、(3)两步,当集合F 中只剩下一棵二叉树时,这棵二叉树便是赫夫曼。
青岛理工大学数据结构课程设计报告题目:关键路径的实现院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2014.7.8—2014.7.19指导教师: 张艳一、需求分析1.问题描述找出实际工程中的关键路径,合理安排关键活动的施工顺序。
要求:(1)表示工程的图可以用邻接表或邻接矩阵存储;(2)应能以图形的方式输出图;(3)输出关键路径和关键活动。
2.基本功能(1)用邻接表存储有向图并建立AOE网 CreateGraph();(2)用图形的形式输出有向图Display();(3)输出关键路径和关键活动 SearchMapPath();3.输入输出输入: (1)有向图的顶点数和弧数,都是int型,中间用空格隔开;(2)图中的各个顶点的值,char型;(3)图中弧的权值、起点、终点,都是int型,中间用空格隔开;输出:起点(char)、终点(char) 、最早开始时间(int)、最迟开始时间(int)、差值(int)、是否为关键活动、关键路径。
二、概要设计1.设计思路:(1) 输入图的顶点数和弧数。
(2) 输入这个图中每段弧的起始点及权值。
(3) 用输入的数据建立AOE网。
(4) 用邻接表来存储图的这些信息。
(5) 用CreateGraph( )函数建立AOE图。
(6)用Display()函数输出AOE图。
(7) 用SearchMapPath ( )函数求出最长路径,并输出关键路径。
(8) 编写程序。
2.数据结构设计:(1)逻辑结构采用图状的结构。
图是一种较线性表和树更为复杂的数据结构。
在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(即其孩子结点)相关,但只能和上一层中一个元素(即其双亲结点)相关;而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
本科毕业设计说明书题目:某高校教学楼设计(方案五)院(部):土木工程学院专业:土木工程班级:土木143姓名:学号:指导教师:夏风敏完成日期:2018年5月26日目录摘要--------------------------------------------------------------------------------------- V 1 建筑设计 ---------------------------------------------------------------------------- - 1 -1.1建筑设计概况 ---------------------------------------------------------------------------------- -1-1.2建筑平面设计 ---------------------------------------------------------------------------------- -1-1.3建筑立面设计 ---------------------------------------------------------------------------------- -2-1.4建筑构造与做法 ------------------------------------------------------------------------------- -3-1.4.1 一层地面做法 ---------------------------------------------------------------------------- - 3 -1.4.2 二~五层楼面做法------------------------------------------------------------------------ - 3 -1.4.3 内、外墙面做法 ------------------------------------------------------------------------- - 4 -1.4.4 台阶、散水及屋面做法 ---------------------------------------------------------------- - 4 -2 结构选型及结构布置 ------------------------------------------------------------- - 5 -2.1材料选择----------------------------------------------------------------------------------------- -5-2.2板、梁、柱截面尺寸估算 ------------------------------------------------------------------- -6-2.2.1 板厚确定 ---------------------------------------------------------------------------------- - 6 -2.2.2 梁尺寸确定 ------------------------------------------------------------------------------- - 6 -2.2.3 柱截面确定 ------------------------------------------------------------------------------- - 6 -2.3结构计算简图 ---------------------------------------------------------------------------------- -8-2.3.1 计算简图的确定 ------------------------------------------------------------------------- - 8 -2.3.2 截面参数计算 ---------------------------------------------------------------------------- - 8 -3 荷载计算 ---------------------------------------------------------------------------- - 9 -3.1构件自重计算 ---------------------------------------------------------------------------------- -9-3.1.1 板 ------------------------------------------------------------------------------------------- - 9 -3.1.2 梁 ----------------------------------------------------------------------------------------- - 10 -3.1.3 墙 ----------------------------------------------------------------------------------------- - 10 -3.1.4 柱 ----------------------------------------------------------------------------------------- - 10 -3.2.1 恒荷载计算 ------------------------------------------------------------------------------- 11 -3.2.2 活荷载计算 ----------------------------------------------------------------------------- - 12 -3.3横向荷载计算 --------------------------------------------------------------------------------- -13-3.3.1 风荷载计算 ----------------------------------------------------------------------------- - 13 -3.3.2 地震作用计算 -------------------------------------------------------------------------- - 15 -4 6轴框架内力计算 -------------------------------------------------------------- - 18 -4.1恒荷载作用下结构内力计算 --------------------------------------------------------------- -18-4.1.1 分层法计算梁端、柱端弯矩 -------------------------------------------------------- - 18 -4.1.2 梁端、柱端剪力计算 ----------------------------------------------------------------- - 28 -4.1.3 柱轴力计算 ----------------------------------------------------------------------------- - 31 -4.2活荷载作用下结构内力计算 --------------------------------------------------------------- -33-4.1.1 分层法计算梁端、柱端弯矩 -------------------------------------------------------- - 33 -4.1.2 梁端剪力计算 -------------------------------------------------------------------------- - 40 -4.1.3柱轴力计算 ------------------------------------------------------------------------------ - 43 -4.3风荷载作用下结构内力计算 --------------------------------------------------------------- -44-4.3.1 反弯点法计算柱端弯矩 -------------------------------------------------------------- - 44 -4.3.2 计算梁端弯矩、剪力及柱轴力 ----------------------------------------------------- - 45 -4.4水平地震作用下结构内力计算 ------------------------------------------------------------ -50-5 ⑥轴框架内力组合 --------------------------------------------------------------- - 55 -5.1梁端弯矩调幅 --------------------------------------------------------------------------------- -55-5.2内力组合---------------------------------------------------------------------------------------- -55-5.2.1 非地震工况下框架梁的内力组合 -------------------------------------------------- - 56 -5.2.2 非地震工况下框架柱的内力组合 -------------------------------------------------- - 61 -5.2.3 地震工况下框架梁的内力组合 ----------------------------------------------------- - 65 -5.2.4 地震工况下框架柱的内力组合 ----------------------------------------------------- - 68 -6 框架截面设计 --------------------------------------------------------------------- - 73 -6.1.1 选取承载力设计值 -------------------------------------------------------------------- - 74 -6.1.2 正截面受弯承载力计算 -------------------------------------------------------------- - 74 -6.1.3 斜截面受剪承载力计算 -------------------------------------------------------------- - 75 -6.2框架柱截面设计 ------------------------------------------------------------------------------ -78-6.2.1 轴压比验算 ----------------------------------------------------------------------------- - 78 -6.2.2 截面尺寸复核 -------------------------------------------------------------------------- - 79 -6.2.3 正截面受弯承载力计算 -------------------------------------------------------------- - 79 -6.2.4 垂直于弯矩作用平面的受压承载力验算 ----------------------------------------- - 80 -6.2.5 斜截面受剪承载力计算 -------------------------------------------------------------- - 81 -6.2.6 裂缝宽度验算 -------------------------------------------------------------------------- - 81 -7 楼板计算 --------------------------------------------------------------------------- - 83 -7.1楼板内力计算 --------------------------------------------------------------------------------- -83-7.2楼板配筋计算 --------------------------------------------------------------------------------- -88-8 基础设计 --------------------------------------------------------------------------- - 91 -8.1设计参数---------------------------------------------------------------------------------------- -91-8.2B、G轴柱下独立基础设计 ----------------------------------------------------------------- -91-8.2.1 地基承载力验算 ----------------------------------------------------------------------- - 92 -8.2.2 基础高度验算 -------------------------------------------------------------------------- - 93 -8.2.3 基础配筋验算 -------------------------------------------------------------------------- - 93 -8.2.4 抗震验算 -------------------------------------------------------------------------------- - 93 -8.3D、E轴柱下独立基础设计 ----------------------------------------------------------------- -95-8.2.1 地基承载力验算 ----------------------------------------------------------------------- - 95 -8.2.2 基础高度验算 -------------------------------------------------------------------------- - 96 -8.2.3 基础配筋验算 -------------------------------------------------------------------------- - 96 -8.2.4 抗震验算 -------------------------------------------------------------------------------- - 96 -9 楼梯设计 --------------------------------------------------------------------------- - 98 -9.1.1 荷载统计 -------------------------------------------------------------------------------- - 98 -9.1.2 截面设计 -------------------------------------------------------------------------------- - 98 -9.2平台板设计------------------------------------------------------------------------------------- -99-9.2.1 荷载统计 -------------------------------------------------------------------------------- - 99 -9.2.2 截面设计 -------------------------------------------------------------------------------- - 99 -9.3平台梁设计----------------------------------------------------------------------------------- -101-9.3.1 荷载统计 ------------------------------------------------------------------------------- - 101 -9.3.2 截面设计 ------------------------------------------------------------------------------- - 101 -9.2.3 裂缝验算 ------------------------------------------------------------------------------- - 102 -9.2.4 挠度验算 ------------------------------------------------------------------------------- - 103 -9.4梯柱设计-------------------------------------------------------------------------------------- -103-谢辞--------------------------------------------------------------------------------- - 105 -参考文献 ---------------------------------------------------------------------------- - 106 -摘要本计算书的主要内容包括了该建筑的建筑设计与结构设计。
数据结构课程设计
数据结构课程设计是一门计算机科学与技术专业的通识基础课程,旨在培养学生基本的数据结构与算法设计能力。
课程设计是课程教学的重要组成部分,通过解决实际问题来巩固和应用课程所学的知识和技能。
数据结构课程设计的目标是让学生能够熟练运用各种常用的数据结构(如数组、链表、栈、队列、树、图等),了解它们的特点、操作和应用场景,并能够根据问题需求选择合适的数据结构。
同时,课程设计还培养学生的程序设计、算法分析与优化能力,使其能够设计高效的算法并解决实际问题。
数据结构课程设计通常包括以下内容:
1. 需求分析和问题建模:分析实际问题的需求,建立相应的模型。
2. 数据结构的选择与设计:根据问题的特点选择合适的数据结构,并进行相应的设计。
3. 算法设计与优化:设计解决问题的算法,并优化其效率。
4. 程序实现与调试:将算法转化为具体的程序代码,并进行调试和测试。
5. 算法复杂度分析:对算法的时间复杂度和空间复杂度进行分析,评估算法的效率。
6. 实验报告撰写:整理和总结课程设计的过程和结果,撰写实验报告。
学生在完成数据结构课程设计时,通常需要选择一个实际问题进行解决,通过分析问题需求、选择合适的数据结构和设计相
应的算法,最后将算法实现并进行测试。
通过这个过程,学生能够掌握数据结构与算法的基本原理和应用方法,并培养解决实际问题的能力。
山东建筑大学计算机科学与技术学院课程设计说明书题目:在线考试系统的设计---------系统及试题管理课程:数据库原理及应用课程设计院(部):计算机科学与技术学院专业:班级:学生姓名:学号:指导教师:完成日期: 2016年1月5日山东建筑大学计算机科学与技术学院课程设计任务书指导教师(签字):教研室主任(签字):目录1. 系统概述 (4)1.1系统管理 (4)1.2试题管理 (4)2.需求分析 (5)2.1 数据流图 (5)教师增加试题试题数据库学生考试试卷数据库组卷成绩数据库成绩查询用户信息数据库登录、修改密码登录、修改密码 (5)2.2数据字典 (6)3. 数据库概念结构设计 (8)3.1 实体分析 (8)3.2 数据库概念结构设计 (9)4.数据库逻辑结构设计 (9)4.1 关系模型 (9)4.2表与视图的设计 (10)5 数据库物理设计及实施 (11)5.1 创建数据库 (11)5.2 创建表 (11)7 总结 (18)参考文献 (19)在线考试信息管理系统-----系统、试题管理1. 系统概述为了提高考试的可靠性,降低考试成本,提高工作效率,需要实现在线考试系统,帮助教师合理管理试题,辅助出题,为学生提供在线考试功能,进行自动阅卷,提供成绩查询和汇总统计的功能。
为了方便计算机判卷,在线考试系统中的试题采用客观题形式,包括选择题、填空题和判断题三种题型。
1.1系统管理系统管理:系统的用户包括系统管理员、学生和教师三类用户。
系统管理员维护学生基本信息、教师基本信息。
其功能包括验证登录用户的身份,根据用户身份进入不同的页面;教师用户和学生用户密码默认为“123456”,当用户忘记密码时系统管理员可以将密码重置为“123456”。
设计相应存储过程实现。
1.2试题管理试题管理:供教师用户管理,用于维护题库。
试题包括选择题和填空题,选择题包括试题内容、各选项、参考答案、试题类型、分值、所属科目、录入时间等,填空题包括试题内容、参考答案、试题类型、分值、所属科目、录入时间等;判断题包括试题内容、参考答案,试题类型、所属科目、分值、录入时间等;教师可以对试题进行维护,包括插入、删除、修改操作,也可以查询题库,可以按照科目、题型、录入时间等进行查询。
山东建筑大学计算机科学与技术学院课程设计说明书题目:课程:院(部):专业:班级:学生姓名:学号:指导教师:完成日期:目录课程设计任务书 (3)1. 系统概述 (4)1.1业务流程描述 (4)1.2 业务流程图 (5)2.数据字典 (5)3. 数据分析与数据库设计 (6)3.1 系统结构设计 (6)3.2 数据库概念及逻辑模型设计 (7)3.3 数据库物理模型设计 (8)4. 详细设计 (8)4.1招干考试成绩管理系统界面设计 (8)4.2 考前处理 (9)4.3 输入设计 (9)4.4 成绩处理 (10)4.5 录用过程设计 (10)4.6 输出设计 (10)5. 程序设计 (11)5.1 进入系统密码设置 (11)5.2 考前处理 (12)5.3 成绩输入设计 (12)5.4 成绩处理 (12)5.5 录用过程设计 (12)5.6 初始化程序 (12)总结 (13)参考文献 (14)课程设计指导教师评语 (15)山东建筑大学计算机科学与技术学院课程设计任务书指导教师(签字):教研室主任(签字):招干考试信息管理系统1. 系统概述某市进行招干考试,有几千人报名,分3个专业。
不同专业考试科目不同:法律专业考政治、英语、法律;行政专业考政治、英语、行政学;财经专业考政治、英语、财经学。
招干考试工作过程如下:每个考生在报名时,登记姓名、性别、报考专业、地址、出生日期等。
招干办公室(简称招干办)根据考生报考的专业及所在的考区来安排考场、编排准考证号码、打印准考证。
考生参加考试后,登记每个考生每门课的成绩,并计算出每个考生3门课考试成绩的总分。
按准考证号的顺序打印出考生成绩单,分发给考生;打印成绩表供招干办留存、备查。
将考生成绩分3个专业,按总分从高到低的次序排序,供录用单位参考。
录用后输出录用名单、录用通知书。
开发招干考试成绩管理系统,由计算机辅助实现上述过程,代替人工操作,节省人力、时间,提高工作效率。
1.(P10)存储器的任何位置既可以存放数据也可以存放指令,不过一般是将指令和数据分开存放。
将解题的程序(指令序列)存放到存储器中成为存储程序,而控制器依据存储的程序来控制全机协调地完成计算任务叫做程序控制。
存储程序并按地址顺序执行,这就是冯.诺依曼型计算机的设计思想,也是机器自动化工作的关键。
目前将运算器和控制器和存储器放到CPU中成为中央处理器。
2.(P11)通常把取指令的一段时间叫做取指周期;而把执行指令的一段时间叫做执行周期;如果某字代表要处理的数据,则成为数据字;如果某字为一条指令,则称为指令字。
区分指令字和数据字:一般来讲,取指周期中从内存读出的信息流是指令流,它流向控制器;而在执行器周期中从内存读出的信息流是数据流,它有内存流向运算器。
3.(P14)计算机系统的层次结构:第1级是微程序设计级,这是一个实在的硬件级,它有机器硬件直接执行微指令;第2级是一般机器级,也称为机器语言级,它由微程序解释机器指令系统。
这一级也是硬件级;第3级是操作系统级,它由操作系统程序实现,这一级称为混合级;第4级是汇编语言级;第5级是高级语言级。
4.(P15)计算机体系结构为机器语言程序员所看到的的传统机器语言所具有的的属性,包含概念性结构和功能特性两个方面。
计算机组织,也译成计算机组成,指的是计算机体系结构的逻辑实现,包括物理机器级内的数据流和控制流的组成以及逻辑设计等。
它着眼于物理机器级内各事件的排序方式和控制方式,各部件的功能以及各部件的联系。
计算机实现指的是计算机组织的物理实现,他着眼于器件技术和微组装技术,其中器件技术在实现技术中起主导作用。
一种计算机组织可以采用多种不同的计算机实现,即一种组织可由多种物理实现。
4.(P20)例题2.1和例题2.25.(P23)一个正整数,当用原码、反码、补码表示时,符号位都固定为0,用二进制表示的数值位都相同,即三种表示方法完全一致。
一个负整数,原码符号位1不变,整数的每一位二进制数位求反得到反码;反码符号位为1不变,反码数值位最低位加1,得到补码。
山东建筑大学课程设计成果报告题目: 1.数组实现两个矩阵的相乘运算2.成绩分析问题课程:数据结构A课程设计院(部):管理工程学院专业:信息管理与信息系统班级:信管***学生姓名:***学号:********指导教师:*******完成日期:2016年12月29日目录目录 (2)一、课程设计概述 (3)二、课程设计题目一 (3)用数组实现两个矩阵的相乘运算 (3)2.1[问题描述] (3)2.2[要求及提示]: (3)2.3[详细设计] (4)2.4[调试分析] (5)2.5[运行结果及分析] (5)三、课程设计题目二 (6)成绩分析问题 (6)3.1[问题描述] (6)3.2[概要设计] (6)3.3[存储结构] (7)3.4[流程图] (7)3.5[详细设计] (8)3.6[调试分析] (8)3.7[运行结果及分析] (22)四、参考文献: (25)一、课程设计概述本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。
使用语言:C编译环境:vc6.0二、课程设计题目一用数组实现两个矩阵的相乘运算2.1[问题描述]#include “stdio.h”int r[6][6];void mult(int a[6][6] , int b[6][6]){ }main(){int i,j;int num1[6][6],num2[6][6];printf(“请输入第一个矩阵的值:”,);for(i=1;i<=6;i++)for(j=1;j<=6;j++)scanf(“%d”,&num1[i][j]);printf(“请输入第二个矩阵的值:”,);for(i=1;i<=6;i++)for(j=1;j<=6;j++)scanf(“%d”,&num2[i][j]);mult(num1,num2);printf(“\n两个矩阵相乘后的结果为:”);for(i=1;i<=6;i++){for(j=1;j<=6;j++)printf(“%4d”,r[i][j]);printf(“\n”);}}2.2[要求及提示]:1、要求完善函数mult( ),2、现有A,B两个矩阵,要求用上述程序求出A与B相乘后的运行结果,4 1 3 6 9 0 3 1 0 1 2 47 3 1 4 2 1 1 3 1 0 5 20 1 0 2 9 1 1 9 2 1 3 0A= 4 1 0 2 6 0 B= 9 1 2 4 0 01 2 1 0 1 5 3 0 0 1 0 13 0 0 5 1 2 2 1 0 6 8 9 2.3[详细设计]2.4[调试分析]问题一:现象:输入的时候输入七行共42个数据才到下一个矩阵的输入原因:在scanf的时候,scanf("%d",&num2[i][j]);%d后面多了一个空格2.5[运行结果及分析]三、课程设计题目二成绩分析问题3.1[问题描述]录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。
山东省考研计算机科学与技术复习资料数据结构算法详解山东省考研计算机科学与技术复习资料:数据结构算法详解数据结构和算法是计算机科学与技术领域中最为重要的基础知识之一。
无论是在考研复习阶段还是在日后的职业生涯中,对数据结构和算法的深入理解都是非常必要的。
本文将详细介绍山东省考研计算机科学与技术考试中涉及到的常见数据结构和算法,并为读者提供复习资料和学习方法。
一、线性结构线性结构是最为基本的数据结构之一,包括数组、链表和队列等。
其中,数组是一种连续存储的线性结构,具有随机访问的特点;链表则是一种通过指针相互连接的非连续存储的线性结构,具有灵活性;队列常用于模拟排队等场景,并具有先进先出的特性。
1. 数组数组是一种线性结构,它由一系列元素组成,这些元素在内存中是连续排列的。
可以通过下标来访问数组中的元素,其时间复杂度为O(1)。
数组有固定的大小,在使用过程中需要注意下标越界的问题。
2. 链表链表是一种通过指针相互连接的非连续存储的线性结构,包括单链表、双链表和循环链表等形式。
链表的插入和删除操作效率高,但查找效率较低。
3. 队列队列是一种先进先出的线性结构,常用于模拟排队等场景。
队列有两个基本操作:入队和出队,它们的时间复杂度均为O(1)。
二、树形结构树形结构是一种非线性的数据结构,包括二叉树、二叉搜索树和平衡二叉树等。
树形结构的特点是一个节点可以有多个子节点,但每个节点只有一个父节点。
1. 二叉树二叉树是一种每个节点最多有两个子节点的树形结构。
其中,满二叉树和完全二叉树是最常见的两种形式。
二叉树的遍历有前序遍历、中序遍历和后序遍历三种方式。
2. 二叉搜索树二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树,左子树的值都小于根节点的值,右子树的值都大于根节点的值。
利用二叉搜索树的特性,可以实现高效的查找、插入和删除操作。
3. 平衡二叉树平衡二叉树(Balanced Binary Tree)是一种特殊的二叉搜索树,它的左右子树高度差不超过1。
山东省考研计算机科学与技术数据结构算法解析数据结构算法作为计算机科学与技术领域的重要基础知识,在山东省考研计算机科学与技术专业中占据着重要的地位。
本文将对山东省考研计算机科学与技术专业中关于数据结构算法的解析进行探讨。
一、概述数据结构算法是指计算机程序中数据的组织、存储和管理方式以及对这些数据进行处理的方式和方法。
它在计算机科学与技术领域中扮演着重要的角色。
在山东省考研计算机科学与技术专业中,数据结构算法是一个重要的考点,考生需要深入了解其概念、原理及应用。
二、数据结构分类在数据结构算法中,数据可以按照其组织方式进行分类。
常见的数据结构包括线性结构、树形结构和图形结构。
线性结构包括数组、链表和栈等;树形结构包括二叉树、平衡树和堆等;图形结构包括有向图和无向图等。
山东省考研计算机科学与技术专业中,考生需要掌握并能够灵活应用不同类型数据结构。
三、算法分析算法是数据结构的基础,是一系列解决问题的清晰指令。
算法的好坏决定了程序的效率。
在山东省考研计算机科学与技术专业中,算法分析是一个重要的考点。
考生需要了解算法的时间复杂度和空间复杂度,能够分析算法的效率,并具备优化算法的能力。
四、常见算法在数据结构算法中,有一些常见的算法被广泛应用。
例如,二分查找算法、快速排序算法和最短路径算法等。
山东省考研计算机科学与技术专业的考试中,考生需要掌握这些常见算法的原理和实现方法,并能够解决相关的应用问题。
五、应用领域数据结构算法广泛应用于计算机科学与技术的各个领域。
例如,网络算法和图像处理算法等。
在山东省考研计算机科学与技术专业的考试中,考生需要了解数据结构算法在不同领域中的应用情况,并能够结合具体问题选择合适的算法解决方案。
六、实践与创新数据结构算法是一门注重实践和创新的学科。
在山东省考研计算机科学与技术专业中,考生需要进行实践操作,并能够根据实际问题进行创新思考,提出解决方案。
通过实践和创新,考生不仅能够加深对数据结构算法的理解,还能够提升解决实际问题的能力。
山东建筑大学计算机科学与技术学院课程设计说明书题目:双向链表的创建和操作的实现树的创建和相关操作的实现课程:数据结构与算法分析院(部):计算机学院专业:软件工程班级:软件133学生姓名:孙振宇学号: 20131112110指导教师:伊静完成日期: 2015-1-8目录课程设计任务书一 (1)课程设计任务书二 (2)双向循环链表的创建及相关操作的实现 (3)一、问题描述 (3)二、数据结构 (4)三、逻辑设计 (4)四、编码 (5)五、测试数据 (10)六、测试情况 (11)树的创建及相关操作的实现 (12)一、问题描述 (12)三、逻辑设计 (14)四、编码 (14)五、测试数据 (17)六、测试情况 (17)结论 (18)参考文献 (18)课程设计指导教师评语 (19)课程设计任务书一课程设计任务书二双向循环链表的创建及相关操作的实现一、问题描述双向循环链表的逻辑形态插入操作删除操作二、数据结构class Node<AnyType>{AnyType data;Node<AnyType> prev;Node<AnyType> next;public Node(){}public Node(AnyType data){this.data=data;this.prev=null;this.next=null;}public Node(AnyType data,Node<AnyType> p,Node<AnyType> q) {this.data=data;this.prev=p;this.next=q;}}三、逻辑设计1、总体思路先找出有用的数据存储结构 --> 编写相关方法 --> 完成对数据的操作2、模块划分3、函数或类的具体定义和功能public MyLinkedList()remove(int idx)//删除public Node<AnyType> getNode(int pos)//得到某一位置的节点public boolean add(AnyType data)//添加public void nizhi()//逆置public void print(MyLinkedList<AnyType> dl)//打印public static void main(String[] args)//主方法class Node<AnyType>{//节点类AnyType data;Node<AnyType> prev;Node<AnyType> next;public Node(){}public Node(AnyType data){this.data=data;this.prev=null;this.next=null;}public Node(AnyType data,Node<AnyType> p,Node<AnyType> q){this.data=data;this.prev=p;this.next=q;}}四、编码import java.util.Scanner;class Node<AnyType>{AnyType data;Node<AnyType> prev;Node<AnyType> next;public Node(){}public Node(AnyType data){this.data=data;this.prev=null;this.next=null;}public Node(AnyType data,Node<AnyType> p,Node<AnyType> q){this.data=data;this.prev=p;this.next=q;}}public class MyLinkedList<AnyType> {private int theSize=0;public Node<AnyType>beginMarker;public Node <AnyType> endMarker;public void print(MyLinkedList<AnyType> dl) {Node<AnyType> p = dl.beginMarker.next;System.out.println("循环双链表的元素为:");for (int i = 0; i <theSize; i++) {System.out.print(p.data + " ");p = p.next;}System.out.println();}public MyLinkedList(){//构造一个头结点和尾节点的双向链表beginMarker=new Node<AnyType>(null,null,null);endMarker= new Node<AnyType>(null, beginMarker,null);beginMarker.next= endMarker;theSize = 0;}public Node<AnyType> getNode(int pos){Node<AnyType>p;if(pos<0||pos>theSize)throw new IndexOutOfBoundsException("getNode():"+pos);if(pos<theSize/2){p=beginMarker.next;for(int i=0;i<pos;i++){p=p.next;}}else{p=endMarker;for(int i=theSize;i>pos;i--){p=p.prev;}}return p;}//添加public boolean add(AnyType data){add(theSize,data);return true;}public void add(int pos,AnyType data){Node<AnyType>p=getNode(pos);addBefore(p,data);}public void addBefore(Node<AnyType> p,AnyType data){Node<AnyType> newNode=new Node<AnyType>(data,p.prev,p);newNode.prev.next=newNode;p.prev=newNode;theSize++;}//删除public AnyType remove(int pos){return remove(getNode(pos));}public AnyType remove(Node<AnyType> p){p.next.prev=p.prev;p.prev.next=p.next;theSize--;return p.data;}//逆转public void nizhi(){Node<AnyType> p=beginMarker;boolean flag=true;while(flag){if(p!=endMarker){Node<AnyType> a=p;Node<AnyType> b=p.next;a.next=a.prev;a.prev=b;p=p.prev;}else{flag=false;Node<AnyType> b=endMarker.next;endMarker.next=endMarker.prev;endMarker.prev=b;Node<AnyType> e=beginMarker;beginMarker=endMarker;endMarker=e;break;}}}public static void main(String[] args){MyLinkedList<Integer> la=new MyLinkedList<Integer>();System.out.println("请输入链表的大小:");Scanner s=new Scanner(System.in);int len=s.nextInt();System.out.println("请输入链表的各个点的数据域:");for(int i=0;i<len;i++){int a=s.nextInt();la.add(a);}System.out.println("请输入您要插入的位置和数据:");int pos=s.nextInt();int d=s.nextInt();la.add(pos-1, d);System.out.println("链表的顺序是:");la.print(la);System.out.println("请输入您要删除的位置:");int pos1=s.nextInt();la.remove(pos-1);System.out.println("链表的顺序是:");la.print(la);System.out.println("请输入要插入第一个顶点的值:");int val1=s.nextInt();la.add(0,val1);System.out.println("链表的顺序是:");la.print(la);System.out.println("请输入要插入最后一个顶点的值:");int val2=s.nextInt();la.add(val2);System.out.println("链表的顺序是:");la.print(la);la.nizhi();System.out.println("就地逆转之后的链表的顺序是:");la.print(la);}}请输入链表的大小:6请输入链表的各个点的数据域:1 2 3 4 5 6请输入您要插入的位置和数据:2 7链表的顺序是:循环双链表的元素为:1 72345 6请输入您要删除的位置:2链表的顺序是:循环双链表的元素为:1 2 3 4 5 6请输入要插入第一个顶点的值:0链表的顺序是:循环双链表的元素为:0 1 2 3 4 5 6请输入要插入最后一个顶点的值:7链表的顺序是:循环双链表的元素为:0 1 2 3 4 5 6 7就地逆转之后的链表的顺序是:循环双链表的元素为:7 6 5 4 3 2 1 0树的创建及相关操作的实现一、问题描述树12 3 45 6双亲表示法孩子链表示法孩子兄弟表示法二、数据结构public class Node {int key;String data;Node zuo,you;public Node (String data){super();this.data = data;zuo=you=null;}public Node (String data,Node zuo,Node you){ this.data=data;this.zuo=zuo;this.you=you;}public Node(){data= null;zuo=you=null;}public int getKey() {return key;}public void setKey(int key) {this.key = key;}public String getData() {return data;}public void setData(String data) {this.data = data;}public Node getZuo() {return zuo;}public void setZuo(Node zuo) {this.zuo = zuo;}public Node getYou() {return you;}public void setYou(Node you) {this.you = you;}}三、逻辑设计1、总体思路创建双向循环链表--→编写各种方法--→实现链表的各种操作2、模块划分jiantree(String[] e) Main() shuyz(Node root)chengci(Node root)jiaohuan(Node root)3、函数或类的具体定义和功能函数:public Node jiantree(String[] e)//创建树public int shuyz(Node root)// 统计叶子节点个数public void chengci(Node root) {// 层次遍历public void jiaohuan(Node root) //交换左右子树四、编码import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Queue;public class Tree {Node root;int i = 0;int yz = 0;public Tree() {}public Tree(String e) {root.data = e;root.zuo = root.you = null;}public Tree(Node e) {root = e;}//建树public Node jiantree(String[] e) {Node root = null;if (i < e.length) {String data = e[i];i++;if (!data.equals("@")) {root = new Node(data);root.zuo = jiantree(e);root.you = jiantree(e);}}return root;}//树叶的个数public int shuyz(Node root) {if (root == null)return 0;if (root.zuo == null && root.you == null)return 1;elsereturn shuyz(root.zuo) + shuyz(root.you);}//层次遍历public void chengci(Node root) {ArrayList<Node> list = new ArrayList<Node>();list.add(root);int i = 0;Node w = list.get(i);if (root == null)return;for (; i < list.size(); i++) {w = list.get(i);if (w.zuo != null) {list.add(w.zuo);}if (w.you != null) {list.add(w.you);}}for (int j = 0; j < list.size(); j++) {w = list.get(j);System.out.printf(w.data + " ");}System.out.println();}//交换左右子树public void jiaohuan(Node root) {Node t;if (root == null)return;jiaohuan(root.zuo);jiaohuan(root.you);t=root.zuo;root.zuo=root.you;root.you=t;return;}}public static void main(String[] args) {Scanner cin = new Scanner(System.in);int n;n=cin.nextInt();String[] tr = new String[n];for(int i=0;i<n;i++){tr[i] = cin.next();}Tree tree = new Tree();Node node = tree.jiantree(tr);Tree text = new Tree(node);System.out.println("层次遍历的结果为");text.chengci(text.root);System.out.println("叶子的节点数为:"+ text.shuyz(text.root));text.jiaohuan(text.root);text.chengci(text.root);}}五、测试数据1110 9 7 @ @ 6 @ @ 8 @ @层次遍历的结果为10 9 8 7 6叶子的节点数为:3交换左右子树:10 8 9 6 7六、测试情况结论本次课程设计做了双向循环链表的创建和相关操作(建立节点,添加,删除,逆置等)以及关于二叉树的相关操作(建树,统计叶子树,层次遍历,以及交换叶子树)。
山东建筑大学计算机科学与技术学院课程设计说明书题目:在线考试系统的设计-—-—--———系统及试题管理课程:数据库原理及应用课程设计院(部):计算机科学与技术学院专业:班级:学生姓名:学号:指导教师:完成日期:2016年1月5日山东建筑大学计算机科学与技术学院课程设计任务书指导教师(签字): 教研室主任(签字):目录1. 系统概述 (4)1.1系统管理 (4)1。
2试题管理 (4)2.需求分析 (5)2.1 数据流图 (5)............................................................................................................................................ 错误!未定义书签。
2.2数据字典 (6)3。
数据库概念结构设计 (7)3.1 实体分析 (7)3。
2 数据库概念结构设计 (8)4。
数据库逻辑结构设计 (8)4。
1 关系模型 (8)4。
2表与视图的设计 (9)5 数据库物理设计及实施 (10)5.1 创建数据库 (10)5.2 创建表 (10)7 总结 (17)参考文献 (18)在线考试信息管理系统---—-系统、试题管理1。
系统概述为了提高考试的可靠性,降低考试成本,提高工作效率,需要实现在线考试系统,帮助教师合理管理试题,辅助出题,为学生提供在线考试功能,进行自动阅卷,提供成绩查询和汇总统计的功能。
为了方便计算机判卷,在线考试系统中的试题采用客观题形式,包括选择题、填空题和判断题三种题型.1。
1系统管理系统管理:系统的用户包括系统管理员、学生和教师三类用户。
系统管理员维护学生基本信息、教师基本信息.其功能包括验证登录用户的身份,根据用户身份进入不同的页面;教师用户和学生用户密码默认为“123456",当用户忘记密码时系统管理员可以将密码重置为“123456”.设计相应存储过程实现。
2022年山东建筑大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a, e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是()。
A.a,b,e,c,d,fB.a,c,f,e,b,dC.a,e,b,c,f, dD.a,e,d,f,c,b2、哈希文件使用哈希函数将记录的关键字值计算转化为记录的存放地址,因为哈希函数是一对一的关系,则选择好的()方法是哈希文件的关键。
A.哈希函数B.除余法中的质数C.冲突处理D.哈希函数和冲突处理3、静态链表中指针表示的是()。
A.下一元素的地址B.内存储器的地址C.下一元素在数组中的位置D.左链或右链指向的元素的地址4、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。
A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改5、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V76、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
山东大学数据结构实验报告四实验报告四:堆排序算法的设计与实现一、引言堆排序是一种基于二叉堆的排序算法,其具有时间复杂度为O(nlogn)的特点,适用于大规模数据的排序。
本实验旨在通过设计与实现堆排序算法,掌握堆排序的原理和实现过程,并分析其时间复杂度和空间复杂度。
二、实验目的1. 理解堆排序的基本原理;2. 掌握堆排序算法的实现过程;3. 分析堆排序算法的时间复杂度和空间复杂度。
三、实验内容1. 设计堆排序算法的流程;2. 根据设计的流程,编写堆排序算法的代码;3. 使用随机生成的数据进行测试,并记录排序结果;4. 分析堆排序的时间复杂度和空间复杂度。
四、实验步骤1. 设计堆排序算法的流程:1.1 创建一个最大堆(Max Heap);1.2 将堆顶元素与最后一个元素交换;1.3 对剩余元素进行堆调整,使其满足最大堆的性质;1.4 重复步骤2和3,直到所有元素排序完成。
2. 根据设计的流程,编写堆排序算法的代码:```java// 堆排序算法public class HeapSort {public static void sort(int[] arr) {int n = arr.length;// 构建最大堆for (int i = n / 2 - 1; i >= 0; i--)heapify(arr, n, i);// 依次将堆顶元素与最后一个元素交换,并重新调整堆 for (int i = n - 1; i >= 0; i--) {int temp = arr[0];arr[0] = arr[i];arr[i] = temp;heapify(arr, i, 0);}}// 调整堆public static void heapify(int[] arr, int n, int i) {int largest = i; // 最大元素的索引int left = 2 * i + 1; // 左子节点的索引int right = 2 * i + 2; // 右子节点的索引// 如果左子节点比最大元素大,则更新最大元素的索引if (left < n && arr[left] > arr[largest])largest = left;// 如果右子节点比最大元素大,则更新最大元素的索引if (right < n && arr[right] > arr[largest])largest = right;// 如果最大元素的索引不是当前节点,则交换当前节点和最大元素,并继续调整堆if (largest != i) {int swap = arr[i];arr[i] = arr[largest];arr[largest] = swap;heapify(arr, n, largest);}}}```3. 使用随机生成的数据进行测试,并记录排序结果:```javapublic class Main {public static void main(String[] args) {int[] arr = generateRandomData(100); // 生成100个随机数 System.out.println("排序前:");printArray(arr);HeapSort.sort(arr); // 使用堆排序算法进行排序System.out.println("排序后:");printArray(arr);}// 生成随机数据public static int[] generateRandomData(int n) {int[] arr = new int[n];Random random = new Random();for (int i = 0; i < n; i++) {arr[i] = random.nextInt(1000);}return arr;}// 打印数组public static void printArray(int[] arr) {for (int i : arr) {System.out.print(i + " ");}System.out.println();}}```排序前:567 245 789 123 456 789 234 567 890 123 ...排序后:1 2 3 4 5 6 7 8 9 10 ...4. 分析堆排序的时间复杂度和空间复杂度:- 时间复杂度:堆排序的建堆过程的时间复杂度为O(n),每次调整堆的时间复杂度为O(logn),共需要调整n-1次。
河南城建学院《数据结构》课程设计任务书班级0832141专业信息管理与信息系统课程名称数据结构指导教师张延红、赵军民计算机科学与工程系2015年6月《数据结构》课程设计任务书一、设计时间及地点1、设计时间:第15周2、设计地点:计算机系机房205二、设计目的和要求数据结构课程设计是在学完数据结构课程之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过数据结构课程设计在下述各方面得到锻炼:1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2、提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3、培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
学生认真主动完成课程设计的要求,发挥自主学习的能力,充分利用时间,安排好课程设计,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。
三、设计题目和内容建议设计题目:1、运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)功能要求:(1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分;(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
山东建筑大学计算机科学与技术学院课程设计说明书题目:基于逆邻接表的有向图基本操作的实现课程:数据结构院(部):计算机学院专业:计科班级:133学生姓名:潘含笑学号:20131111092指导教师:李盛恩完成日期:2015.07.03目录课程设计任务书 (I)课程设计任务书 (II)逆邻接链表实现有向图 (3)一、问题描述 (3)二、数据结构 (3)三、逻辑设计 (3)四、编码 (5)五、测试数据 (14)六、测试情况 (16)逆邻接链表实现有向图 (17)一、问题描述 (17)二、数据结构 (17)三、逻辑设计 (17)四、编码 (18)五、测试数据 (24)七、测试情况 (24)结论 (26)课程设计指导教师评语 (28)山东建筑大学计算机科学与技术学院课程设计任务书指导教师(签字):教研室主任(签字)山东建筑大学计算机科学与技术学院课程设计任务书指导教师(签字):教研室主任(签字)逆邻接链表实现有向图二、数据结构三、逻辑设计1、总体思路先实现Network类,通过队列实现BFS,通过堆栈实现DFS和拓扑排序。
再构建Graph类,并继承Network类实现以逆邻接链表为存储结构的有向图。
2、模块划分(以图示的方法给出各个函数的调用关系)3、函数或类的具体定义和功能Network类:virtual int Begin(int i) = 0;//确定起始顶点virtual int Nextvertex(int i) = 0;//下一个顶点virtual int Edges()=0;//确定点virtual int Vertices()=0;//确定边virtual void Initializepos(int i)=0;//让迭代器等于链表的第i个顶点的第一个元素virtual void Deactivatepos(int i)=0;//删除迭代器指的元素void BFS(int v,int reach[],int label,int a[]);//宽度遍历void DFS(int v,int reach[],int label,int a[]);//深度遍历bool Topological(int v[]);//拓扑排序virtual ~Network();//析构函数Graph类:virtual ~Graph();//析构函数int InDegree(int node);//入度int OutDegree(int node);//出度Graph& Add(int node1, int node2);//添加点Graph& Delete(int node1, int node2);//删除点int Begin(int i);//确定起始顶点int Nextvertex(int i);//下一个顶点int Edges() {return e;}//确定点int Vertices() {return n;}//确定边void Initializepos(int i){pos=al[i].begin(); }////让迭代器等于链表的第i个顶点的第一个元素void Deactivatepos(int i){al[i].erase(pos);}//删除迭代器指的元素void Out();//输出函数四、编码//Network.h#include <iostream>#include<queue>#include<stack>#include <vector>using namespace std;class Network {public:virtual int Begin(int i) = 0;virtual int Nextvertex(int i) = 0;virtual int Edges()=0;virtual int Vertices()=0;virtual void Initializepos(int i)=0;//让迭代器等于链表的第i点的第一个元素virtual void Deactivatepos(int i)=0;//删除迭代器指的元素void BFS(int v,int reach[],int label,int a[]);//宽度遍历void DFS(int v,int reach[],int label,int a[]);//深度遍历bool Topological(int v[]);//拓扑排序virtual ~Network();};//Network.cpp#include "Network.h"void Network::BFS(int v,int reach[],int label,int a[]){int n=Vertices(); //获取n的值,有几个顶点queue<int> Q; //创建一个队列int k=0; //定义一个k来使元素得到保存reach[v]=label; //标记点a[k++]=v; //用数组记录BFS的遍历顺序Q.push(v); //把一个元素加入队列 while(!Q.empty()){int x;x=Q.front(); //获取队列中的第一个元素Q.pop(); //让队列中的第一个元素出队for(int i=1;i<=n;i++) //寻找x的下一个节点{int u=Begin(i);if((u==x)&&(!reach[i])) //因为是逆邻接链表{Q.push(i);reach[i]=label;a[k++]=i; //把标记的元素放入遍历数组}while(u) //看后面是不是还有节点 {u=Nextvertex(i);if((u==x)&&(!reach[i])){Q.push(i);reach[i]=label;a[k++]=i;}}}}for(int i=v;i<n;i++) //输出BFS的运行结果 {if(reach[i]==label)cout<<"执行完BFS后第"<<i<<"个元素被标记 "<<endl;elsecout<<"执行完BFS后第"<<i<<"个元素没有被标记 "<<endl;}cout<<"从节点"<<v<<"开始BFS遍历的顺序是";for(int i=1;i<n;i++) //输出BFS的遍历顺序 {cout<<a[i-1]<<" ";};cout<<endl;}void Network::DFS(int v,int reach[],int label,int a[]){stack<int> S; ///创建一个堆栈int n=Vertices(); //获取n的值int k=0;S.push(v); //把元素v加入堆栈 while(!S.empty()){int x=S.top(); //获取堆栈的栈顶元素if(!reach[x]) //如果元素没被标记,就把元素标记{ reach[x]=label;a[k++]=x;S.pop(); //把堆栈的栈顶弹出 for(int i=1;i<=n;i++) //获取节点的下一个元素{int u=Begin(i);if((u==x)&&(!reach[i])){S.push(i); //把元素加入堆栈}while(u){u=Nextvertex(i);if((u==x)&&(!reach[i])){S.push(i);}}}}elseS.pop(); //如果被标记元素就弹出}for(int i=v;i<n;i++) //输出DFS的运行结果 {if(reach[i]==label)cout<<"执行完DFS后第"<<i<<"个元素被标记 "<<endl;elsecout<<"执行完DFS后第"<<i<<"个元素没有被标记"<<endl;}cout<<"从节点1开始DFS遍历的顺序是";for(int i=1;i<n;i++) //输出DFS的遍历顺序{cout<<a[i-1]<<ends;};cout<<endl;}bool Network::Topological(int v[]){int n=Vertices(); //获取n的值vector<int> a(n+1);stack<int> S; //创建一个堆栈for(int i=1;i<=n ;i++) //初始化数组a,使每个点的a等于0,用来记录点的入度a[i]=0;for(int i=1;i<=n;i++) //遍历整个邻接链表,有入度的节点增加a的值{int x=Begin(i);while(x){a[i]++;x=Nextvertex(i); //后面有元素,则入度加1}}for( int i=1;i<=n;i++) //如果a=0,把元素加入堆栈if(a[i]==0) S.push(i);int k=1;while(!S.empty()){int y;y=S.top(); //拿出第一个元素S.pop();v[k++]=y; //弹出获取值的元素for(int i=1;i<=n;i++) //遍历整个邻接链表,使有y的元素的入度减一{int u=Begin(i);if(u==y&&a[i]!=0){a[i]--;if(a[i]==0) S.push(i); //如果有入度等于0的元素,把元素加入堆栈}while(u){u=Nextvertex(i);if(u==y&&a[i]!=0){a[i]--;if(a[i]==0) S.push(i);}}}}if(k==n+1)return true;elsereturn false;}Network::~Network() {}//Graph.h#include <iostream>#include <vector>#include <list>#include <algorithm>#include"Network.h"using namespace std;class Graph:public Network{public:Graph(int);virtual ~Graph();int InDegree(int node);int OutDegree(int node);Graph& Add(int node1, int node2);Graph& Delete(int node1, int node2);int Begin(int i);int Nextvertex(int i);int Edges() {return e;}int Vertices() {return n;}void Initializepos(int i){pos=al[i].begin(); }void Deactivatepos(int i){al[i].erase(pos);}void Out();private:int n;int e;vector<list<int> > al;list<int>::iterator pos;};//Graph.cpp#include "Graph.h"Graph::Graph(int num) {e=0; //初始化边,顶点n=num;al.resize(n+1); //开空间}Graph::~Graph() {}int Graph::InDegree(int node){return al[node].size();}int Graph::OutDegree(int node){list<int>::iterator q; //开链表的迭代器int i=0;for(int p=1;p<=n;p++){q=find(al[p].begin(),al[p].end(),node);if(q!=al[p].end()) i++;}return i;}Graph& Graph::Add(int node1, int node2){if(node1 < 1 || node1 > n || node2 < 1 || node2 > n) return *this;list<int>::iterator p;p = find(al[node2].begin(), al[node2].end(), node1); //寻找有没有node1if (p != al[node2].end()) return *this; //如果有,返回else{al[node2].push_back(node1);e++;}return *this;}Graph& Graph::Delete(int node1, int node2){if(node1 < 1 || node1 > n || node2 < 1 || node2 > n) return *this;list<int>::iterator p;p = find(al[node2].begin(), al[node2].end(), node1);if (p ==al[node2].end()) return *this;else{al[node2].erase(p); //删除要删除的元素e--;}return *this;}void Graph::Out(){for(int i = 1; i <=n; i++){list<int>::iterator p;cout<<"逆邻接链表中第"<<i<<"行元素有";for(p = al[i].begin(); p != al[i].end(); p++) cout << *p << ' ';cout <<endl;}return;}int Graph::Begin(int i){if(i<1||i>n) cout<<"无该点";Initializepos(i);if(pos==al[i].end())return 0;elsereturn *pos;}int Graph::Nextvertex(int i){if(i<1||i>n) cout<<"无该点";pos++;if(pos!=al[i].end())return *pos;elsereturn 0;}五、测试数据#include"Graph.h"#include"Network.h"int b[20];int b1[20];int c[20];int a[20];int a1[20];int main(void){int n=6;int label=2;Graph g(n); //创建对象g.Add(1,4).Add(1,3).Add(2,4).Add(2,5).Add(3,4).Add(3,6).Add(4,6).Add(5,6);g.Out();g.BFS(1,b,label,b1);cout<<endl;g.DFS(1,a,label,a1);for(int i=1;i<=n;i++){cout<<"节点"<<i<<"的入度为:";cout<<g.InDegree(i)<<",";cout<<"节点"<<i<<"的出度为:";cout<<g.OutDegree(i)<<endl;}g.Topological(c); //执行拓扑排序for(int i=1;i<=n;i++)cout<<"拓扑排序的第"<<i<<"个元素是 "<<c[i]<<endl;cout<<endl;g.Delete(4,6);g.Out();}六、测试情况双向循环链表一、问题描述实现双向循环链表。