山东建筑大学数据结构设计介绍

合集下载

山东建筑大学计算机科学与技术学院

山东建筑大学计算机科学与技术学院

山东建筑大学计算机科学与技术学院课程设计说明书题目:赫夫曼树的建立校园导航系统学生搭配问题课程:数据结构院(部):计算机科学与技术学院专业:计算机科学与技术班级:计科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成绩分析问题

数据结构课程设计报告1数组实现两个矩阵的相乘运算2成绩分析问题

山东建筑大学课程设计成果报告题目: 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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东建筑大学计算机科学与技术学院课程设计说明书题目:基于逆邻接表的有向图基本操作的实现课程:数据结构院(部):计算机学院专业:计科班级: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();}六、测试情况双向循环链表一、问题描述实现双向循环链表。

相关文档
最新文档