实验报告:图
图像处理实验报告

图像处理实验报告图像处理实验报告一、引言图像处理是计算机科学与工程领域的一个重要研究方向,它涉及到对数字图像进行获取、处理、分析和显示等一系列操作。
本实验旨在通过使用图像处理技术,对一幅给定的数字图像进行处理和分析,以探索图像处理的原理和应用。
二、实验目的本实验有以下几个目的:1. 理解图像处理的基本概念和原理;2. 掌握图像处理的常用技术和方法;3. 熟悉图像处理软件的使用。
三、实验步骤1. 图像获取在本实验中,我们选择了一张风景图作为实验对象。
该图像是通过数码相机拍摄得到的,保存在计算机中的文件格式为JPEG。
我们使用图像处理软件将该图像导入到程序中,以便进行后续的处理和分析。
2. 图像预处理在进行图像处理之前,我们需要对图像进行预处理。
预处理的目的是去除图像中的噪声、平滑图像的边缘等。
我们使用了均值滤波和中值滤波两种常用的图像平滑方法。
通过对比两种方法的效果,我们可以选择合适的方法来进行图像预处理。
3. 图像增强图像增强是指通过一系列的操作,使得图像在视觉上更加鲜明、清晰、易于观察。
在本实验中,我们使用了直方图均衡化和灰度拉伸两种图像增强方法。
直方图均衡化通过对图像的像素值进行变换,使得图像的直方图更加均匀,从而增强图像的对比度。
灰度拉伸则是通过对图像的像素值进行线性变换,将图像的灰度范围拉伸到更广的范围内,从而增强图像的细节。
4. 图像分割图像分割是将图像分成若干个互不重叠的区域,每个区域具有一定的意义和特征。
在本实验中,我们使用了阈值分割和边缘检测两种图像分割方法。
阈值分割是指通过设置一个合适的阈值,将图像中的像素分为两个类别。
边缘检测则是通过检测图像中的边缘信息,将图像分割为不同的区域。
5. 图像特征提取图像特征提取是指从图像中提取出具有一定意义和特征的信息。
在本实验中,我们选择了纹理特征和颜色特征两种常用的图像特征提取方法。
纹理特征提取通过对图像的纹理进行分析,提取出图像的纹理特征。
类图、对象图实验报告

UML建模课程实验三、UML类图、对象图模型的设计班级:信息0702 组别:指导老师:徐凯波姓名:王姗学号:2007030331205一、实验要求:掌握利用UML建模工具建立类图和对象图的方法。
二、实验内容:利用UML建模工具设计类图和对象图三、实验环境:Windows 2000 Professional以上环境、Rational Rose2003、Sybase Power Designer 10四、操作步骤:五、遇到的问题和解决方法:类图是所有图中比较好画的一种图,就是将角色、系统它们所具有的属性和活动输入到软件中去,我的类图中角色有管理员、学生,管理员的属性有:管理学的账号、管理员的姓名、管理员的性别、管理员的年龄,他所参与的活动有添加课程信息、删除课程信息、修改课程信息、查询课程信息、登录系统、添加学生信息、删除学生信息、修改学生信息、查询学生信息、查询学生信息;学生的属性有:学生账户、学生姓名、学生性别、学生年龄,他所参与的活动有:查询课程信息、选课、查询个人选课信息,登录系统。
系统的包括:学生信息维护系统、课程管理系统、选课管理系统,学生信息维护系统的属性有:学生的账号、姓名、性别、年龄、管理员的账号;选课管理系统:学生账号、课程编号、课程名称、课程地点、课程时间、课程学分、课程学时;课程管理系统:课程编号、课程名称、课程地点、课程时间、课程学分、课程学时。
在画整个类图的过程中,我没有遇到太多的问题。
六、实验心得和体会:在老师的辅导下,我经过前一阶段的练习,基本掌握了UML的要领,类图我基本上没有太费时间,只是想好属性和动作,还有就是个角色之间的关系,类图的难点是角色与角色之间的关系,究竟是一对多、一对一、多对多。
确定好角色与角色的关系,类图就很容易完成了。
多普勒效应综合实验报告及数据处理图

多普勒效应综合实验(附数据处理图)(注:由于上传后文库中数据图看不清楚,须下载后才能看清楚) 当波源和接收器之间有相对运动时,接收器接收到的波的频率与波源发出的频率不同的现象称为多普勒效应。
多普勒效应在科学研究,工程技术,交通管理,医疗诊断等各方面都有十分广泛的应用。
例如:原子,分子和离子由于热运动使其发射和吸收的光谱线变宽,称为多普勒增宽,在天体物理和受控热核聚变实验装置中,光谱线的多普勒增宽已成为一种分析恒星大气及等离子体物理状态的重要测量和诊断手段。
基于多普勒效应原理的雷达系统已广泛应用于导弹,卫星,车辆等运动目标速度的监测。
在医学上利用超声波的多普勒效应来检查人体内脏的活动情况,血液的流速等。
电磁波(光波)与声波(超声波)的多普勒效应原理是一致的。
本实验既可研究超声波的多普勒效应,又可利用多普勒效应将超声探头作为运动传感器,研究物体的运动状态。
【实验目的】1、测量超声接收器运动速度与接收频率之间的关系,验证多普勒效应,并由f-V关系直线的斜率求声速。
2、利用多普勒效应测量物体运动过程中多个时间点的速度,查看V-t关系曲线,或调阅有关测量数据,即可得出物体在运动过程中的速度变化情况,可研究:①匀加速直线运动,测量力、质量与加速度之间的关系,验证牛顿第二定律。
②自由落体运动,并由V-t关系直线的斜率求重力加速度。
③简谐振动,可测量简谐振动的周期等参数,并与理论值比较。
④其它变速直线运动。
【实验原理】1、超声的多普勒效应根据声波的多普勒效应公式,当声源与接收器之间有相对运动时,接收器接收到的频率f为:f = f0(u+V1cosα1)/(u–V2cosα2)(1)式中f0为声源发射频率,u为声速,V1为接收器运动速率,α1为声源与接收器连线与接收器运动方向之间的夹角,V2为声源运动速率,α2为声源与接收器连线与声源运动方向之间的夹角。
若声源保持不动,运动物体上的接收器沿声源与接收器连线方向以速度V运动,则从(1)式可得接收器接收到的频率应为:f = f0(1+V/u)(2)当接收器向着声源运动时,V取正,反之取负。
大物实验报告 克拉尼图形

二维振动与模式-薄板 对于圆形薄板 厚为 h的圆形薄板振动挠度的波方程为
二维圆形薄板振动模式激发 振动模式满足
中间支撑 边缘自由
三.实验主要步骤或操作要点
1、研究薄膜的振动模式 a)选择弹性化学实验防护薄手套的局部,将其拉伸绷紧于一个圆形水杯口,
注意使得膜各方向张力均匀一致,用绳子将膜缠紧固定,形成小定音鼓。 b)用笔杆敲击膜面使其发出响声,由 phyphox软件记录下波形以及其频谱,
2
5.520 7.016 8.417 9.761
3
8.654 10.173 11.619 13.015
4
11.792 13.324 14.796 16.223
模态(m,n)命名在图上部中给 出,以ωa/c=2.405时的频率作 比较在图下部给出的数值 bmn 以表示相对频率。要将这些转 换为实际频率 fmn,bmn要乘以 (2.405/2na)√T/σ,其中 a为膜 半径。
物理实验报告
哈工大物理实验中心
班 号 33006 学 号 1190501917 姓 名 刘福田
教师签字
实验日期 2020.4.18
预习成绩
学生自评分
(注:为方便登记实验成绩,班号填写后 5位,请大家合作。)
总成绩
实验 (二 ) 克拉尼图形
一.实验目的
1、模拟克拉尼实验,观察克拉尼图形 2、理解二维薄膜(板)振动模式
哈尔滨工业大学
实验现象观察与原始数据记录
物理实验中心
学生 姓 名
签字
学号
日期
教师
签字
姓名
·7·
图 4-2 图 4-3
对应频率(Hz) 700
650 490
图 4-4
分光计的调节实验报告

分光计的调节实验报告篇一:大学物理实验分光计实验报告分光计法测光栅常数3.7 分光计的调节及光栅常数的测定分光计又称光学测角仪,是一种分光测角光学实验仪器。
它常用来测量折射率、色散率、光波波长、光栅常数和观测光谱等。
分光计是一种具有代表性的基本光学仪器,学好分光计的调整和使用,可为今后使用其他精密光学仪器打下良好基础。
3.7.1 分光计的调节实验目的了解分光计的结构和基本原理,学习调整和使用方法。
分光计的结构和原理分光计主要由五个部分构成:底座、平行光管、自准直望远镜、载物台和读数装置。
不同型号分光计的光学原理基本相同。
JJY型分光计如图3-7-1所示。
图3-7-1 JJY型分光计1.狭缝装置 2.狭缝装置锁紧螺钉 3.平行光管 4.元件夹 5.望远镜 6.目镜锁紧螺钉 7.阿贝式自准直目镜 8.狭缝宽度调节旋钮9.平行光管光轴高低调节螺钉 10.平行光管光轴水平调节螺钉11.游标盘止动螺钉 12.游标盘微调螺钉 13.载物台调平螺钉(3只) 14.度盘 15.游标盘 16.度盘止动螺钉 17.底座 18.望远镜止动螺钉 19.载物台止动螺钉 20.望远镜微调螺钉 21.望远镜光轴水平调节螺钉 22.望远镜光轴高低调节螺钉 23.目镜视度调节手轮1.底座分光计底座(17)中心固定有一中心轴,望远镜、度盘和游标盘套在中心轴上,可绕中心轴旋转。
2.平行光管平行光管安装在固定立柱上,它的作用是产生平行光。
平行光管由狭缝和透镜组成,如图3-7-2。
狭缝宽度可调(范围0.02~2mm),透镜与狭缝间距可以通过伸缩狭缝筒进行调节。
当狭缝位于透镜焦平面上时,由狭缝经过透镜出射的光为平行光。
图3-7-2 平行光管3.自准直望远镜阿贝式自准直望远镜安装在支臂上,支臂与转座固定在一起并套装在度盘上。
它用来观察和确定光线行进方向。
自准直望远镜由物镜、目镜、分划板等组成(如图3-7-3),三者间距可调。
其中,分划板上刻有“”形叉丝;分划板下方与一块45o全反射小棱镜的直角面相贴,直角面上涂有不透明薄膜,薄膜上划有一个“十”形透光的窗口,当小电珠光从管侧经另一直角面入射到棱镜上,即照亮“十”字窗口。
图的搜索与应用实验报告(附源码)(word文档良心出品)

哈尔滨工业大学计算机科学与技术学院实验报告课程名称:数据结构与算法课程类型:必修实验项目名称:图的搜索与应用实验题目:图的深度和广度搜索与拓扑排序设计成绩报告成绩指导老师一、实验目的1.掌握图的邻接表的存储形式。
2.熟练掌握图的搜索策略,包括深度优先搜索与广度优先搜索算法。
3.掌握有向图的拓扑排序的方法。
二、实验要求及实验环境实验要求:1.以邻接表的形式存储图。
2.给出图的深度优先搜索算法与广度优先搜索算法。
3.应用搜索算法求出有向图的拓扑排序。
实验环境:寝室+机房+编程软件(NetBeans IDE 6.9.1)。
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)数据类型定义:template <class T>class Node {//定义边public:int adjvex;//定义顶点所对应的序号Node *next;//指向下一顶点的指针int weight;//边的权重};template <class T>class Vnode {public:T vertex;Node<T> *firstedge;};template <class T>class Algraph {public:Vnode<T> adjlist[Max];int n;int e;int mark[Max];int Indegree[Max];};template<class T>class Function {public://创建有向图邻接表void CreatNalgraph(Algraph<T>*G);//创建无向图邻接表void CreatAlgraph(Algraph<T> *G);//深度优先递归搜索void DFSM(Algraph<T>*G, int i);void DFS(Algraph<T>* G);//广度优先搜索void BFS(Algraph<T>* G);void BFSM(Algraph<T>* G, int i);//有向图的拓扑排序void Topsort(Algraph<T>*G);/得到某个顶点内容所对应的数组序号int Judge(Algraph<T>* G, T name); };主程序流程图:程序开始调用关系:主函数调用五个函数 CreatNalgraph(G)//创建有向图 DFS(G) //深度优先搜索 BFS(G) //广度优先搜索 Topsort(G) //有向图拓扑排序 CreatAlgraph(G) //创建无向图其中 CreatNalgraph(G) 调用Judge(Algraph<T>* G, T name)函数;DFS(G)调用DFSM(Algraph<T>* G , int i)函数;BFS(G) 调用BFSM(Algraph<T>* G, int k)函数;CreatAlgraph(G) 调选择图的类型无向图有向图深 度 优 先 搜 索广度优先搜索 深 度 优 先 搜 索 广度优先搜索拓 扑 排 序程序结束用Judge(Algraph<T>* G, T name)函数。
计算机网络实验报告-局域网设计图

switch (con fig-if)#exit计算机网络实验报告 局域网设计图:第一步:交换机的VLAN 配置 交换机1: 划分VLANswitch #con figure term inal !进入交换机全局配置模式switch (con fig)#vla n 1!switch #show vlan ! 查看 VLAN 划分情况 将接口分配到VLANswitch (con fig)#i nterface fastEthernet 0/1-21 ! 配置模式switch (con fig-if)#switch port access vla n 1 !计算机网络实验报告-局域网设计图switch (con fig-vla n)#n ame test1 ! 将 vlan 1 命名为test1r M 31A"创建vlan 1进入1~21的接口将1~21端口加入vlan操作步骤ji.'.ioooefl_______ 十一_ 甬“兀山?宾 口?氐1 !]_雯 汙 % 3EJ丿汇^轴I(config-if)#endswitch #show vlan !查看VLAN 的端口划分情况Switch (config)# interface fastethernet 0/21 Switch (config-if)# switchport mode trunk (config-if)#endswitch #show vlan ! 查看VLAN 的端口划分情况交换机 2:(config)#vlan 2 ! 创建 vlan 2(config)#vlan 2 ! 创建 vlan 2switch (config-vlan)#name test3!将 vlan 3 命名为 test3 switch(config-vlan)#end switch #show vlan ! 查看VLAN 划分情况 switch (config)#interface fastEthernet 0/1-11 ! 进入 1-11 的接口配置模式 switch (config-if)#switchport access vlan 2! 将 1-11 端口加入 vlan 2switch (config)#interface fastEthernet 0/11-21! 进入 11-21 的接口配置模式 switch (config-if)#switchport access vlan 3 ! 将 11-21 端口加入 vlan 3switch (config-if)#exit Switch (config)# interface fastethernet 0/11 Switch (config-if)# switchport mode trunk 〜配置 trunk 端口 switch〜配置trunk 端口 switchswitch #configure terminal !进入交换机全局配置模式 switchswitch (config-vlan)#name test2!将 vlan 2 命名为 test2 switch第二步: 路由器配置路由器1:在路由器Router1 上配置快速以太网口的IP 地址Router1#configure terminalRouter1(config)#interface FastEthernet 0/0 ! 进入以太网0 口配置状态或Router1(config)#interface FastEthernet 1/0Router1(config-if)#ip address 210.100.10.33 255.255.255.224 ! 为以太网0 口配置地址Router1(config-if)#no shutdown ! 打开以太网0 口Router1(config-if)#end在路由器Routerl上配置广域网口的IP地址和时钟频率(假设Routerl为DCE端)Router1#conRouter1(config)#interface serial 2/0 ! 进入广域网0 口配置状态或Router1(config)#interface serial 1/2Router1(config-if)#ip address 210.100.10.65 255.255.255.0 ! 为广域网0口配置地址Router1(config-if)#clock rate 64000 ! DCE 端需设置端口时钟频率Router1(config-if)#no shutdown ! 打开广域网0 口Router1(config-if)#end为Router1 添加静态路由Router1#conRouter1(config)#ip route 210.100.10.96 255.255.255.224 210.100.10.66Router1(config)#ip route 210.100.10.128 255.255.255.224210.100.10.66 ! 添加静态路由Router1(config)#endRouter1#show ip route ! 显示路由表路由器2在路由器2上配置接口F0的子接口Router (config)# interface fastethernet 1/0Router (config-if)# no ip address Router (config-if)# no shutdownRouter (config-if)# exitRouter (config)# interface fastethernet 1/0.2 〜进入子接口F0.2配置模式Router (config-subif)# encapsulation dotlq 2 〜封装802.1Q 并指定Vlan 号2Router (config-subif)# ip address 210.100.10.97 255.255.255.224 〜配置子接口F0.2IP 地址Router (config-subif)# exitRouter (config)# interface fastethernet 1/0.3 〜进入子接口F0.3 配置模式Router (config-subif)# encapsulation dotlq 3 〜封装802.1Q 并指定Vlan 号3Router (config-subif)# ip address 210.100.10.129 255.255.255.224配置子接口F0.3IP 地址Router (config-subif)# end在路由器 2 上配置广域网口的IP 地址Router2#conf或Router2(config)#interface Router2(config)#interface serial 2/0 serial1/2 Router2(config-if)#ip address210.100.10.66255.255.255.224Router2(config-if)#no shutdown Router2(config-if)#end为路由器 2 添加静态路由Router2#conConfiguring from terminal, memory, or network [terminal]?Enter configuration commands, one per line. End with CNTL/Z.Router2(config)#ip route 210.100.10.32 255.255.255.224 210.100.10.65 Router2(config)#endRouter2#show ip route。
图像处理实验报告

大学新闻与传播学院实验教学中心实验报告实验名称图像处理指导教师洪杰文华滢年级08 学号23 成绩一、预习部分1、实验目的2、实验基本原理3、主要仪器设备(含必要的元器件、工具)1、实验目的:(1)熟悉和掌握数字图像的基本概念和技术指标,掌握色彩模式、图像分辨率、图像深度、图像文件格式与图像的显示效果、文件容量的关系。
(2)了解和掌握数字图像压缩的概念,观察不同的压缩比对图像的影响。
(3)了解和掌握图像中色彩的确定及选取方法,掌握前景色和背景色的概念及调整方法,掌握色彩填充的基本概念及应用。
(4)了解和掌握图像处理软件Photoshop的基本功能和基本使用方法,熟练掌握图层与选择区的基本使用方法。
(5)通过创造性的构图和对布局及色彩等的巧妙处理,一幅好的图画可以将一个主题以含蓄而又深刻的方式予以提示,并往往具有比单纯的语言文字更强的表现力。
在掌握图像处理基本概念和Photoshop基本使用方法的基础上,对已有的数字图像做一些基本的创意设计和编辑处理。
2、实验基本原理:基于photoshop软件的图像处理。
3、主要仪器设备(含必要的元器件、工具):Adobe Photoshop二、实验操作部分1、实验操作过程2、实验数据、观察到的实验现象1、实验操作过程:1.图像的基本变换(1)自选一幅不小于400×400pixel的彩色数字图像。
在Photoshop中打开该图像,记录其技术参数:文件格式、文件容量,图像尺寸(pixel和cm)、分辨率、色彩模式等。
文件格式:JPEG 图像;文件容量:59.7kb;图像尺寸(pixel和cm):600×600pixel;分辨率:72像素/英寸;色彩模式:RGB模式。
(2)对该图像重采样,要求采样后的图像分辨率为150dpi,图像尺寸为300×300pixel。
色彩模式分别变换成灰度、Indexed和RGB模式,按BMP格式分别保存成不同名称的图像文件;重新打开并观察变换后的显示效果,并记录各个文件的容量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告(实验七)专业班级姓名学号课程名称数据结构学年2009 --2010 学期1□/ 2□课程类别专业必修□限选□任选□实践□●实验内容:实验时间:2010年7月2日1.编写函数,采用邻接矩阵表示法,构造一个无向网。
2.编写函数,实现从键盘输入数据,建立一个有向图的邻接表。
3.编写函数,输出该邻接表。
4.编写函数,采用邻接表存储实现无向图的深度优先非递归遍历。
5.编写函数,采用邻接表存储实现无向图的广度优先遍历。
6.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:1.掌握图的存储思想及其存储实现2.掌握图的深度、广度优先遍历算法思想及其程序实现3.掌握图的常见应用算法的思想及其程序实现●方法与步骤:详见从第2页开始的源代码●实验结果:●小结:分数:批阅老师:2010年月日实验报告(附页)源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_VERTEX_NUM 10 //顶点最大个数#define STACK_INIT_SIZE 100//邻接矩阵的类型定义#define INFINITY 888 /* 用888代替∞*/typedef struct ArcCell{int adj;}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct{int vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;//构造无向网MGraph *CreateUDN(MGraph *N){int i,j,k,w;int v1,v2;printf("输入顶点的个数:");scanf("%d",&N->vexnum);printf("输入边数:");scanf("%d",&N->arcnum);printf("输入%d个顶点的元素:",N->vexnum);for(i=0;i<N->vexnum;i++){scanf("%d",&N->vexs[i]);}for(i=0;i<N->vexnum;i++)for(j=0;j<N->vexnum;j++)N->arcs[i][j].adj=INFINITY;for(k=0;k<N->arcnum;k++){printf("输入第%d条边所依附的顶点:",k+1);scanf("%d%d",&v1,&v2);printf("输入权值:");scanf("%d",&w);for(i=0;i<N->vexnum;i++)if(v1==N->vexs[i])break;for(j=0;j<N->vexnum;j++)if(v2==N->vexs[j])break;N->arcs[i][j].adj=w;N->arcs[j][i]=N->arcs[i][j];}printf(" ");for(i=0;i<N->vexnum;i++)printf(" v%d",N->vexs[i]);printf("\n");for(i=0;i<N->vexnum;i++){printf(" v%d",N->vexs[i]);for(j=0;j<N->vexnum;j++)printf(" %3d ",N->arcs[i][j].adj);printf("\n");}return N;}//邻接表的类型定义typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;int weight; //边的权}ArcNode; //表结点typedef struct VNode{int degree,indegree;//顶点的度,入度int data;ArcNode *firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct{AdjList vertices;int vexnum,arcnum;//顶点的实际数,边的实际数}ALGraph;#define TRUE 0#define FALSE -1//确定位置int LocateVex(ALGraph *G,int v){int i;for( i=0;v!=G->vertices[i].data&&i<G->vexnum;++i);if(i>G->vexnum)return -1;return i;}//创建有向图的邻接表ALGraph *createDG(ALGraph *G){int i,j,k;int v1,v2;ArcNode *p;printf("输入顶点的个数:");scanf("%d",&G->vexnum);printf("输入边数:");scanf("%d",&G->arcnum);printf("输入%d个顶点的元素:",G->vexnum);for(i=0;i<G->vexnum;++i){scanf("%d",&G->vertices[i].data);G->vertices[i].firstarc=NULL;}for(k=0;k<G->arcnum;++k){printf("输入第%d条边所依附的顶点:",k+1);scanf("%d%d",&v1,&v2);i=LocateVex(G,v1);j=LocateVex(G,v2);p=(ArcNode *)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G->vertices[i].firstarc;G->vertices[i].firstarc=p;}printf("创建成功邻接表!\n");return G;}//输出邻接表void printfAdjList(ALGraph *G){int i;ArcNode *p;printf(" %s %s %s\n","编号","顶点","相邻边编号");for (i=0;i<G->vexnum;++i){printf("%4d v%d",i,G->vertices[i].data);for(p=G->vertices[i].firstarc;p;p=p->nextarc)printf("->%2d", p->adjvex);printf("\n");}}//顺序栈类型定义typedef struct{int *base;int *top;int stacksize;}SqStack;//栈初始化SqStack *InitStack(){SqStack *s;s=(SqStack *)malloc(sizeof(SqStack));s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));s->top=s->base;s->stacksize=STACK_INIT_SIZE;return s;}//入栈SqStack *PushStack(SqStack *s,int i){(*s->top)=i;s->top++;return s;}//出栈int PopStack(SqStack *s){int i;if(s->top==s->base)return NULL;s->top--;i=(*s->top);return i;}//深度优先非递归遍历void DFSTraverse(ALGraph *G){int i,u;char visited[MAX_VERTEX_NUM]={0};SqStack *s;ArcNode *p;s=InitStack();for(i=0;i<G->vexnum;i++)visited[i]=FALSE;for(i=0;i<G->vexnum;i++)if(visited[i]){visited[i]=TRUE;printf("%d ",G->vertices[i].data);s=PushStack(s,i);while((s->base!=s->top)){u=PopStack(s);s=PushStack(s,u);for(p=G->vertices[u].firstarc;p;p=p->nextarc){if(visited[p->adjvex]){visited[p->adjvex]=TRUE;printf("%d ",G->vertices[p->adjvex].data);s=PushStack(s,p->adjvex);break;}else{u=PopStack(s);}}}}}//创建无向图的邻接表ALGraph *createUDG(ALGraph *G){int i,j,k;int v1,v2;ArcNode *p,*q;printf("输入顶点的个数:");scanf("%d",&G->vexnum);printf("输入边数:");scanf("%d",&G->arcnum);printf("输入%d个顶点的元素:",G->vexnum);for(i=0;i<G->vexnum;++i){scanf("%d",&G->vertices[i].data);G->vertices[i].firstarc=NULL;}for(k=0;k<G->arcnum;++k){printf("输入第%d条边所依附的顶点:",k+1);scanf("%d%d",&v1,&v2);i=LocateVex(G,v1);j=LocateVex(G,v2);p=(ArcNode *)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G->vertices[i].firstarc;G->vertices[i].firstarc=p;q=(ArcNode *)malloc(sizeof(ArcNode));q->adjvex=i;q->nextarc=G->vertices[j].firstarc;G->vertices[j].firstarc=q;}printf("创建成功邻接表!\n");return G;}//单链队列的类型定义typedef struct QNode{int data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;//队头指针QueuePtr rear;//队尾指针}*LinkQueue,Queue;//创建队列LinkQueue InitLinkQueue(){LinkQueue Q;Q=(LinkQueue)malloc(sizeof(Queue));Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));Q->front->next=NULL;return Q;}//入队LinkQueue EnLinkQueue(LinkQueue Q,int data){QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));p->data=data;p->next=NULL;Q->rear->next=p;Q->rear=p;return Q;}//出队int DeLinkQueue(LinkQueue Q){QueuePtr p;int data;p=Q->front->next;data=p->data;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);return data;}//广度优先遍历void BFSTraverse(ALGraph *G){LinkQueue Q;ArcNode *p;int i,u;char visited[MAX_VERTEX_NUM];Q=InitLinkQueue();for(i=0;i<G->vexnum;i++)visited[i]=FALSE;for(i=0;i<G->vexnum;i++)if(visited[i]){visited[i]=TRUE;printf("%d ",G->vertices[i].data);Q=EnLinkQueue(Q,i);while(Q->front!=Q->rear){u=DeLinkQueue(Q);for(p=G->vertices[u].firstarc;p;p=p->nextarc){if(visited[p->adjvex]){visited[p->adjvex]=TRUE;printf("%d ",G->vertices[p->adjvex].data);Q=EnLinkQueue(Q,p->adjvex);}}}}}//主函数void main(){int choice;MGraph *N;ALGraph *G;N=(MGraph *)malloc(sizeof(MGraph));G=(ALGraph *)malloc(sizeof(ALGraph));do{ printf("\t\t************************************************\n");printf("\t\t*1.采用邻接矩阵表示法,构造一个无向网*\n");printf("\t\t*2.实现从键盘输入数据,建立一个有向图的邻接表*\n");printf("\t\t*3.输出2中建立的有向图的邻接表*\n");printf("\t\t*4.构造一个无向图*\n");printf("\t\t*5.采用邻接表存储实现无向图的深度优先非递归遍历*\n");printf("\t\t*6.采用邻接表存储实现无向图的广度优先遍历*\n");printf("\t\t*0:退出*\n");printf("\t\t*请选择:0-6 *\n");printf("\t\t************************************************\n");scanf("%d",&choice);switch(choice){case 1:CreateUDN(N);break;case 2:G=createDG(G);break;case 3:printfAdjList(G);break;case 4:G=createUDG(G);break;case 5:DFSTraverse(G);printf("\n");break;case 6:BFSTraverse(G);printf("\n");break;}}while(choice!=0);}程序调试截图:主菜单:采用邻接矩阵表示法,构造一个无向网:实现从键盘输入数据,建立一个有向图的邻接表:输出2中建立的有向图的邻接表:构造一个无向图:采用邻接表存储实现无向图的深度优先非递归遍历:采用邻接表存储实现无向图的广度优先遍历:。