静态表的查找操作实验
- 格式:doc
- 大小:80.39 KB
- 文档页数:9
实验二静态路由实验一、实验目的1. 掌握静态路由配置方法2. 启用路由器的路由功能3. 查看路由表4. ping和trace命令的使用二、设备需求本实验需要以下设备:1. 4台2811Cisco路由器,四台都有两个FastEthernet口。
2. 2条双绞线,1对V.35背靠背线缆3. 4台带有超级终端程序的PC机,以及4条Console电缆三、拓扑结构及配置说明本实验的拓扑如图2-1所示。
图2-1网络拓扑结构4台路由器分别命名为R1、R2、R3和R4。
所使用的ip地址分配如图1-1所示。
图中的“/24”表示子网掩码为24位,即255.255.255.0。
实验中,应使用静态路由的设置,实现R1到R4在IP层的连通性,即要求从R1可以ping通R4,反之亦然。
四、实验步骤1. 恢复路由器的初始配置。
(若路由器末被配置过则直接做第三步)2. 给路由器命名router>enable //进入特权模式Router #config terminal //进入配置模式Enter configuration commands, one per line. End with CNTL/Z.Router (config) #Router (config)#hostname r1 //给路由器命名R1 (config)#其它路由器配置类似3. 配置端口IPR1 (config)# interface FastEthernet0/1 //进入FastEthernet0/1端口r1(config-if)#ip address 10.1.1.1 255.255.255.0 //指定端口的IP地址及子网掩码r1(config-if)#no shut //开启端口r1(config-if)#exit //退出端口模式R1 (config)#interface Loopback0 //进入本地回环接口0r1(config-if)#ip address 192.168.100.1 255.255.255.0其它路由器配置类似配完各个路由器的名字及IP后,通过sh run(特权模式下的命令)命令查看路由器的配置把你所看到的结果记录下来。
路由表的实验报告一、实验拓扑二、实验目的及需求:实验目的:熟悉静态的使用环境和3种配置方法,掌握使用浮动静态路由的方法,了解静态路由的负载均衡。
实验需求:根据拓扑图上的基本信息完成底层的配置。
要求最终使得R1到R3的loop0的网络分别实现浮动静态路由和负载均衡。
三、实验步骤:首先,根据拓扑图的要求完成底层的基本配置。
接着使用静态路由的配置方式,使得R1通过R2到达R3的loop0口。
这里要注意数据包出去的方向和回来的方向。
配置命令如下:在R1上使用“ip route 3.3.3.0 255.255.255.0 f0/0 12.12.12.1”这条命令的作用很简单,就是让R1把去往R3环回口数据包交给R2(这里采用的是出站接口+下一跳的配置方式)但是,R2收到R1给的数据包去查找路由表时,并没有找到与目标地址匹配的路由条目,所以我们要手工指定一个路由条目给R2 “ip route 3.3.3.0 255.255.255.0 FastEthernet0/1 23.23.23.3”,这样R2就会把数据包交给R3。
这里注意数据包是要有去有回的,这里R3并不知道如何把回复的数据包返还给R1,所以同样使用“ip route 12.12.12.0 255.255.255.0 FastEthernet0/0 23.23.23.2”,让R3知道把返还的数据包交给R2,由于R2与R1直连,并且R1是把F0/0的接口做为源的,所以这里不用在做任何配置。
这样R1就可以与R3之间通讯了,使用ping测试,现象正常。
接下来,使用同样的方法让R1通过R3直接到达其换回口。
在R1上“ip route 3.3.3.0 255.255.255.0 FastEthernet0/1 13.13.13.3”。
这时候,你去查看R1的路由表:就会发现,R1把到达R3 loop0的路由条目做了一个负载均衡,R1通选择R2和R3作为自己的下一跳。
配置静态路由一、实验目的1掌握静态路由的配置方法;2验证静态路由的配置结果,加深对路由概念的理解;二、实验设备1路由器、计算机、交换机分别2台2console线2根,直通线若干根三、实验过程和主要步骤1在纸上或者头脑里面,想好拓扑图,如图1;图1拓扑图2按照图1所示连接好网络,并分别将两个路由器跟计算机用console线连接;表1设备参数设定3想好IP和网关,如表1;并设置好计算机和路由器的IP参数;注意:iPC机的IP和网关参数设置是在本地连接属性Internet协议的属性ii路由器端口IP配置后要记得noshutdowniiiIP配置完后,最好要用ping命令测试一下,这里测试只看看PC是否能ping通网关,不做两个网络间的测试4设置静态路由路由器R1的设置静态路由命令:iproute路由器R2的设置默认路由命令:iproute注意:i配置静态路由的命令常用格式:iproute目的网络子网掩码下一跳路由器的IPii默认路由是一种特殊的静态路由;如果不清楚从源站到达目的站的路由,或者匹配路由表中所有显示的表项,路由器将把数据包按默认路由转发;iii当iproute…,出现“Defaultgatewayisnotset…..ICMPredirectcacheisempty”时,原因是:IP 路由被禁用,解决办法:configiprouting5查看静态路由表命令:showiproute6用ping命令进行测试,7结束实验后,为了不影响以后实验,最好清除路由器的静态路由命令如下:confignoiproute目的网络子网掩码下一跳路由器的IP注意:这里的目的网络、子网掩码和下一跳路由器的IP要跟之前你配置的路由一样;四、感受和体会遇到问题,首先是自己想想看,再是百度搜索看看,最后才问老师;特别是百度搜索,有时候不单单能找到自己要多答案,而且有时候能了解更多的知识;这次实验开始最好是自己在纸上画好拓扑图,再写好静态的IP,最后才上机连线配置IP;。
计算机网络实验(4B)实验名称:路由器的基本操作及静态路由配置实验实验目的:了解路由器的基本结构,功能,使用环境以及基本参数的配置。
实验要求:1.配置路由器接口的IP地址。
2.设置静态路由。
3. 测试静态路由:ping IP 地址; trace IP 地址4.写出实验报告实验准备知识:一、实验环境的搭建:•准备 PC 机 2 台,操作系统为 Windows XP ;•准备Huawei S2501E 路由器 3 台;•路由器串口线(2对)•交叉线(或通过交换机的直连线)网线 2条;• Console电缆2条。
步骤:del 删除各个路由器原有的路由表✓第一步:设置Router1[Quidway]SYSNAME R1➢[R1] interface Ethernet 0#设置其IP地址➢[R1-Ethernet0] ip address 10.0.0.2 255.255.255.0shutdownundo shutdown #激活此以太网口!!(对此口配置了IP地址后用此命令)#进入串口Serial0视图➢[R1-Ethernet0] interface serial 0#设置其IP地址➢[R1-Serial0] ip address 20.1.0.1 255.255.255.0shutdownundo shutdown #激活此串口!!(对此口配置了IP地址后用此命令)#设置链路层协议为PPP➢[R1-Serial0] link-protocol ppp#进入系统视图➢[R1-Serial0] quit#添加静态路由➢[R1] ip route-static 40.1.0.0 255.255.255.0 20.1.0.2 preference 60 ##添加静态路由(R2的以太网接口)[R1] ip route-static 50.1.0.0 255.255.255.0 20.1.0.2 preference 60 #保存路由器设置➢[R1] save#重启路由器➢[R1] reboot✓第二步:设置Router2[Quidway]SYSNAME R2#进入以太网接口视图:➢[R2] interface Ethernet 0#设置其IP地址➢[R2-Ethernet0] ip address 50.1.0.2 255.255.255.0shutdownundo shutdown #激活此以太网口!!!#进入串口Serial0视图➢[R2-Ethernet0] interface serial 0#设置其IP地址➢[R2-Serial0] ip address 20.1.0.2 255.255.255.0shutdownundo shutdown #激活此串口!!(对此口配置了IP地址后用此命令)#设置链路层协议为PPP➢[R2-Serial0] link-protocol ppp#进入系统视图➢[R2-Serial0] quit#进入串口Serial1视图➢[R2] interface serial 1#设置其IP地址➢[R2-Serial1] ip address 30.1.0.1 255.255.255.0shutdownundo shutdown #激活此串口!!(对此口配置了IP地址后用此命令)#设置链路层协议为PPP➢[R2-Serial1] link-protocol ppp#进入系统视图➢[R2-Serial1] quit#添加静态路由➢[R2] ip route-static 40.1.0.0 255.255.255.0 30.1.0.2 preference 60 ➢[R2] ip route-static 10.0.0.0 255.255.255.0 20.1.0.1 preference 60 #保存路由器设置➢[R2] save#重启路由器➢[R2] reboot✓第三步:设置Router3[Quidway]SYSNAME R3#进入以太网接口视图:➢[R3] interface Ethernet 0#设置其IP地址➢[R3-Ethernet0] ip address 40.1.0.1 255.255.255.0shutdownundo shutdown #激活此以太网口!!!#进入串口Serial1视图➢[R3-Ethernet0] interface serial 1#设置其IP地址➢[R3-Serial1] ip address 30.1.0.2 255.255.255.0shutdownundo shutdown #激活此串口!!(对此口配置了IP地址后用此命令)#设置链路层协议为PPP➢[R3-Serial1] link-protocol ppp#进入系统视图➢[R3-Serial1] quit#添加静态路由➢[R3] ip route-static 50.1.0.0 255.255.255.0 30.1.0.1 preference 60 ➢[R3] ip route-static 10.0.0.0 255.255.255.0 30.1.0.1 preference 60 #保存路由器设置➢[R3] save#重启路由器➢[R3] reboot✓第四步:设置主机TCP/IP属性:➢PC1:IP地址:10.0.0.1子网掩码:255.255.255.0默认网关:10.0.0.2➢PC2:IP地址:40.1.0.2子网掩码:255.255.255.0默认网关:40.1.0.1✓第四步:用Ping命令测试结论:整个网络是连通的2个路由器的静态路由表查看路由!!![R1][R1]display ip routing-tableRouting Tables:Destination/Mask Proto Pref Metric Nexthop Interface10.1.1.0/24 Direct 0 0 10.1.1.1 Ethernet010.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack020.1.1.0/24 Direct 0 0 20.1.1.1 Serial120.1.1.1/32 Direct 0 0 20.1.1.1 Serial120.1.1.2/32 Direct 0 0 127.0.0.1 LoopBack030.1.1.0/24 Static60 0 20.1.1.1 Serial1127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0 [R2]display ip routing-tableRouting Tables:Destination/Mask Proto Pref Metric Nexthop Interface10.1.1.0/24 Static60 0 20.1.1.2 Serial120.1.1.0/24 Direct 0 0 20.1.1.2 Serial120.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack020.1.1.2/32 Direct 0 0 20.1.1.2 Serial130.1.1.0/24 Direct 0 0 30.1.1.1 Ethernet030.1.1.1/32 Direct 0 0 127.0.0.1 LoopBack0127.0.0.0/8 Direct 0 0 127.0.0.1 LoopBack0 127.0.0.1/32 Direct 0 0 127.0.0.1 LoopBack0。
路由基本概念及静态路由配置实验报告一、实验原理1.路由器的定义和作用路由器——用于网络互连的计算机设备路由器的核心作用是实现网络互连,数据转发路由(寻径):路由表建立、刷新交换:在网络之间转发分组数据隔离广播,指定访问规则异种网络互连2.基本概念路由表:路由器为执行数据转发路径选择所需要的信息被包含在路由器的一个表项中,称为“路由表” 。
当路由器检查到包的目的IP地址时,它就可以根据路由表的内容决定包应该转发到哪个下一跳地址上去。
路由表被存放在路由器的RAM上。
路由表的构成:目的网络地址(Dest),掩码(Mask),下一跳地址(Gw),发送的物理端口(interface)路由信息的来源(Owner),路由优先级(pri),度量值(metric)路由信息根据产生的方式和特点可以分为以下几种:直连路由,缺省路由,静态路由,动态路由;其中缺省路由可以由静态路由配置,也可以由动态路由产生。
直连路由:当接口配置了网络协议地址并状态正常时,既物理连接正常,并且可以正常检测到数据链路层协议的keepalive信息时,接口上配置的网段地址自动出现在路由表中并与接口关联。
其中产生方式(onwer)为直连(direct),路由优先级为0,拥有最高路由优先级。
其metric值为0,表示拥有最小metric值。
直连路由会随接口的状态变化在路由表中自动变化,当接口的物理层与数据链路层状态正常时,此直连路由会自动出现在路由表中,当路由器检测到此接口down掉后此条路由会自动消失。
系统管理员手工设置的路由称之为静态(static)路由,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络拓扑结构的改变自动改变。
优点:不占用网络、系统资源、安全;缺点:需网络管理员手工逐条配置,不能自动对网络状态变化做出调整。
在无冗余连接网络中,静态路由可能是最佳选择。
静态路由是否出现在路由表中取决于下一跳是否可达。
静态路由在路由表中中产生方式(onwer)为静态(static),路由优先级为1,其metric值为0。
静态路由实验报告静态路由实验报告引言:静态路由是计算机网络中常用的一种路由方式,它通过手动配置路由表来确定数据包的传输路径。
本实验旨在通过实际操作,深入理解静态路由的原理和应用。
一、实验目的本实验的主要目的是掌握静态路由的配置和使用方法,了解其优缺点,并通过实际操作验证静态路由的可行性和效果。
二、实验环境本实验使用了一台运行Windows操作系统的计算机,以及两台路由器设备。
三、实验步骤1. 确定网络拓扑结构在本实验中,我们使用了一个简单的网络拓扑结构,包括两台路由器和两台主机。
路由器A连接主机A,路由器B连接主机B,并且路由器A和路由器B之间通过一条链路相连。
2. 配置IP地址首先,我们需要为每个设备配置IP地址。
在路由器A上,我们将其接口1配置为192.168.1.1/24,接口2配置为10.0.0.1/24;在路由器B上,我们将其接口1配置为10.0.0.2/24,接口2配置为192.168.2.1/24。
主机A和主机B分别配置为192.168.1.2/24和192.168.2.2/24。
3. 配置静态路由在路由器A上,我们需要配置到达192.168.2.0/24网络的静态路由。
使用命令行界面,输入以下命令:```route add 192.168.2.0 mask 255.255.255.0 10.0.0.2```这条命令的意思是将数据包目的地址为192.168.2.0/24的数据包发送到10.0.0.2进行转发。
在路由器B上,我们同样需要配置到达192.168.1.0/24网络的静态路由。
使用命令行界面,输入以下命令:```route add 192.168.1.0 mask 255.255.255.0 10.0.0.1```这条命令的意思是将数据包目的地址为192.168.1.0/24的数据包发送到10.0.0.1进行转发。
4. 测试连通性配置完成后,我们可以进行连通性测试。
在主机A上,使用ping命令向主机B 发送数据包:```ping 192.168.2.2```如果ping命令成功返回,说明静态路由配置成功,数据包能够正常传输。
实验四、静态路由实验目的:理解什么是静态路由;熟悉掌握静态路由的配置方法,理解重要参数的意义及使用;理解如何查看路由表及简单的链路故障排查技巧。
实验知识要点:¾静态路由(static route):指由网络管理员手工配置的路由信息。
当网络的拓扑结构或链路的状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息。
静态路由信息在缺省情况下是私有的,不会传递给其他的路由器。
¾配置命令及参数:配置静态路由协议有两种方法:下一跳接口IP地址和出盏接口。
Router(config)#ip route network mask{address | interface }[distance]1.ip route :静态路由配置命令work:目标网络3.mask:目标网络掩码4.address:下一跳地址5.interface:本地出站接口6.distance:管理距离¾路由表:记录路由器可到达的网段和接口的对应关系。
¾查看路由表全局配置的模式下,在用show ip rout 这个命名查看路由表。
如(图4-1):(图4-1)在上面图中输出的信息首先显示路由条目各种类型的简写,如“C”为直连网络,“S”为静态路由。
以上带有下划线的路由为例,“S”表示这条路由是静态路由,手动配置的;“172.31.1.0”是目标网络;“[1/0]”是管理距离/度量值;“via 192.168.12.2”是指到达目的网络的下一跳路由器的IP地址;¾管理距离(Administrative Distance, AD):用来表示路由的可信度,路由器可能从多种途径获得同一网络的路由,为了区别它们的可信度,用管理距离加以表示。
AD值越小说明路由的可靠程度越高。
不协议的默认管理距离,如(图4-2)所示:(图4-2)¾度量值(Metric):一个路由协议判别到达目的网络的最佳路径的方法。
欧阳歌谷创编 2021年2月1实验B06: 静态表的查找操作实验欧阳歌谷(2021.02.01)二、实验目的1.掌握顺序查找操作的算法实现。
2.掌握二分查找操作的算法实现及实现该查找的前提。
3.掌握索引查找操作的算法实现。
三、实验内容1.建立顺序查找表,并在此查找表上实现顺序查找操作(验证性内容)。
2.建立有序顺序查找表,并在此查找表上实现二分查找操作(验证性内容)。
3.建立索引查找表,并在此查找表上实现索引查找操作(设计性内容)。
四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号以及模块:Windows环境下的TurboC2.0以上或VC++五、知识准备前期要求掌握查找的含义和顺序查找、二分查找及索引查找操作的方法。
六、验证性实验1.实验要求编程实现如下功能:(1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。
(2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。
(3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。
2. 实验相关原理:查找表分别静态查找表和动态查找表两种,其中只能做引用操作的查找表称为静态查找表。
静态查找表采用顺序存储结构的数据描述为:#define MAXSIZE 100 /*顺序查找表的最大长度*/typedefintkeytype;typedefstruct{keytype key;}redtype;typedefstruct{redtypeelem[MAXSIZE];int length;}Sstable;【核心算法提示】查找操作是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或记录的过程。
若查找表中存在这样一个记录,则称“查找成功”。
查找结果给出整个记录的信息,或指示该记录在查找表中的位置;若在查找表中不存在这样的记录,则称“查找不成功”。
静态路由配置实验报告静态路由配置实验报告一、引言在计算机网络中,路由是实现数据包从源主机到目标主机的传输的关键技术之一。
路由器作为网络的核心设备,负责转发数据包并选择最佳路径。
静态路由是一种最简单的路由方式,通过手动配置路由表来指定数据包的转发路径。
本实验旨在通过配置静态路由,探索路由器的工作原理和网络通信的基本概念。
二、实验目的1. 理解静态路由的概念和原理;2. 学习如何配置静态路由;3. 掌握网络通信过程中路由器的角色和功能。
三、实验环境本实验使用了以下设备和软件:1. 路由器:Cisco 2800系列;2. 交换机:Cisco Catalyst 2960系列;3. 模拟器:GNS3;4. 虚拟机:VMware Workstation;5. 操作系统:Windows 10。
四、实验步骤1. 搭建网络拓扑首先,使用GNS3模拟器搭建一个包含两台路由器和两台主机的网络拓扑。
将路由器和主机连接到交换机上,并使用VMware Workstation创建虚拟机作为主机。
2. 配置IP地址在路由器和主机上配置IP地址,确保它们处于同一个子网中。
使用命令行界面或网络管理工具,为每个接口分配一个唯一的IP地址。
3. 配置静态路由在路由器上配置静态路由,将数据包从源主机转发到目标主机。
使用路由器的命令行界面,输入静态路由的目标网络和下一跳的IP地址。
4. 测试网络连接在主机上使用ping命令测试网络连接。
向目标主机发送数据包,并观察路由器的转发过程。
通过ping命令的输出结果,确认数据包是否成功到达目标主机。
五、实验结果与分析经过实验测试,静态路由配置成功,并且网络连接正常。
通过观察路由器的转发过程,我们可以看到数据包从源主机经过路由器,按照路由表中配置的路径到达目标主机。
静态路由的优点是配置简单,适用于小型网络;但是对于大型网络来说,静态路由的维护工作量较大,不利于网络的扩展和管理。
六、实验总结通过本实验,我们深入了解了静态路由的配置和工作原理。
静态路由配置实验原理静态路由是一种网络通信协议,它允许管理员手动配置路由器来定义网络中每个节点的路径。
静态路由配置实验是一个非常常见的实验,它使学生们通过手动配置网络路由器来理解和掌握静态路由的原理、实现和应用。
在这篇文章中,我们将介绍静态路由的原理和配置方法,并详细讲解静态路由配置实验的步骤和目的。
静态路由的原理静态路由是通过手动配置路由表来定义网络中每个节点的路径。
当一个数据包从一个节点发送到另一个节点时,路由器根据路由表的规则来决定数据包的下一跳路由器,并将数据包转发到下一跳路由器。
这个过程一直重复,直到数据包到达目的节点。
在静态路由中,路由表是由管理员手动配置的。
每个路由表条目都包含目的网络地址、下一跳路由器和出接口。
当一个数据包到达路由器时,路由器会查找路由表中与目的地址匹配的最长前缀,然后将数据包转发到下一跳路由器。
如果没有匹配的路由表条目,路由器会将数据包丢弃。
静态路由的优点是简单、可预测、可控制和可靠。
由于路由表是手动配置的,管理员可以精确地控制数据包的路径和路由器的优先级。
这使得静态路由比动态路由更加可靠,因为它不会受到网络拓扑变化的影响。
静态路由的缺点是不灵活和不适用于大型网络。
由于路由表是手动配置的,静态路由不适用于大型和复杂的网络,因为管理员需要手动维护路由表。
此外,静态路由不具备自适应性,因此无法适应网络拓扑的变化。
静态路由的配置方法静态路由的配置方法很简单,只需要手动编辑路由表即可。
路由表可以通过命令行界面或web界面进行配置。
以下是通过命令行界面配置静态路由的步骤:1. 进入路由器的命令行界面2. 输入路由表配置命令,例如“ip route 192.168.1.0255.255.255.0 10.0.0.2”3. 配置完成后,保存并退出路由器的命令行界面在上述命令中,“192.168.1.0”是目的网络地址,“255.255.255.0”是子网掩码,“10.0.0.2”是下一跳路由器的IP地址。
实验B06: 静态表的查找操作实验一、实验名称和性质二、实验目的1.掌握顺序查找操作的算法实现。
2.掌握二分查找操作的算法实现及实现该查找的前提。
3.掌握索引查找操作的算法实现。
三、实验内容1.建立顺序查找表,并在此查找表上实现顺序查找操作(验证性内容)。
2.建立有序顺序查找表,并在此查找表上实现二分查找操作(验证性内容)。
3.建立索引查找表,并在此查找表上实现索引查找操作(设计性内容)。
四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号以及模块:Windows环境下的TurboC2.0以上或VC++五、知识准备前期要求掌握查找的含义和顺序查找、二分查找及索引查找操作的方法。
六、验证性实验1.实验要求编程实现如下功能:(1)根据输入的查找表的表长n和n个关键字值,建立顺序查找表,并在此查找表中用顺序查找方法查找给定关键值的记录,最后输出查找结果。
(2)根据输入的查找表的表长n和n个按升排列的关键字值,建立有序顺序查找表,并在此查找表中用二分查找方法查找给定关键值的记录,最后输出查找结果。
(3)主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种查找操作。
2. 实验相关原理:查找表分别静态查找表和动态查找表两种,其中只能做引用操作的查找表称为静态查找表。
静态查找表采用顺序存储结构的数据描述为:#define MAXSIZE 100 /*顺序查找表的最大长度*/typedef int keytype;typedef struct{keytype key;}redtype;typedef struct{redtype elem[MAXSIZE];int length;}Sstable;【核心算法提示】查找操作是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或记录的过程。
若查找表中存在这样一个记录,则称“查找成功”。
查找结果给出整个记录的信息,或指示该记录在查找表中的位置;若在查找表中不存在这样的记录,则称“查找不成功”。
查找结果给出“空记录”或“空指针”。
(1)顺序查找操作的基本步骤:从表中最后一个记录开始,逆序扫描查找表,依次将扫描到的结点关键字值与给定值key进行比较,若当前扫描到的结点关键字值与key相等,则查找成功;若扫描到第一个记录,仍未找到关键字值等于key的记录,则查找失败。
在程序设计中为了减少执行的循环次数使用了监视哨。
监视哨可设置在表头,也可设置在表尾。
在此设置在表头。
(2)二分查找也叫折半查找,这种查找要求查找表必须是有序顺序表。
其查找操作的基本步骤:首先取出表中的中间元素,若其关键字值等于给定值key,则查找成功,操作结束;否则以中间元素为分界点,将查找表分成两个子表,并判断所查的key值所在的子表是前部分,还是后部分,再重复上述步骤直到找到关键字值为key的元素或子表长度为0。
【核心算法描述】int sxsearch(Sstable ST, keytype key)/*在顺序查找表ST中,用顺序查找的方法查找其关键字等于key的数据元素。
若找到,则函数返回该元素在表中的位置,否则返回0 */{ ST.elem[0].key=key; /*在表头设置监视哨*/for(i=ST.length;ST.elem[i].key!=key;--i); /*从后往前顺序查找*/return i;}int binsearch(Sstable ST,keytype key)/*在按关键字从小到大的有序顺序表ST中,用二分查找的方法查找其关键字等于key的数据元素。
若找到,则函数返回该元素在表中的位置,否则返回0 */{ low=1;high=ST.length; /*置查找区间的初值*/while(low<=high){ mid=(low+high)/2;if (key==ST.elem[mid].key)return mid;/*找到匹配记录*/else if (key<ST.elem[mid].key)high=mid-1;/*继续对左半部分进行二分查找*/else low=mid+1;/*继续对右半部分进行二分查找*/}return 0; /*找不到匹配记录*/}3.源程序代码参考#define MAXSIZE 100typedef int keytype;typedef struct{ keytype key;}redtype;typedef struct{ redtype elem[MAXSIZE];int length;}Sstable;int sxsearch(Sstable ST,keytype Key)/*顺序查找函数*/ { int i;ST.elem[0].key=Key;for(i=ST.length;ST.elem[i].key!=Key;--i);return i;}int binsearch(Sstable ST,keytype Key)/*二分法查找函数*/ { int low,mid,high;low=1;high=ST.length;while(low<=high){ mid=(low+high)/2;if (Key==ST.elem[mid].key)return mid;else if (Key<ST.elem[mid].key)high=mid-1;else low=mid+1;}return 0;}main()/*主函数*/{Sstable ST;int i,pos,x,key;pos=0;while(1){ printf("\n 1---Sxserach\n");printf(" 2---Binserach\n");printf(" 3---Exit\n");printf("please input choose(1-3):");scanf("%d",&x);switch(x){ case 1:printf("please input table length n:");/*请求输入顺序表表长*/scanf("%d",&ST.length);printf("please input n data:\n");/*请求输入n个关键字值*/for(i=1;i<=ST.length;i++)scanf("%d",&ST.elem[i].key);printf("please input key:");/*请求输入待查找的记录关键字值*/scanf("%d",&key);pos=sxsearch(ST,key); /*调用顺序查找函数*/break;case 2:printf("please input table length n:");/*请求输入顺序表表长*/scanf("%d",&ST.length);printf("please input n data(sort):\n");/*请求输入n个关键字值(必须升序排列)*/ for(i=1;i<=ST.length;i++)scanf("%d",&ST.elem[i].key);printf("please input key:");/*请求输入待查找的记录关键字值*/scanf("%d",&key);pos=binsearch(ST,key);/*调用二分法查找函数*/break;case 3: return;default: printf("choose error\n");}if(pos==0)printf("\nthe data is not found.\n"); /*若找不到,提示信息*/elseprintf("\nthe data is at position %d\n",pos);} /*若找到,输出位置*/}4.运行结果参考如图6-1所示图6-1 验证性实验运行结果七、设计性实验1.实验要求编程实现如下功能:(1)建立索引查找表(2)利用索引查找确定给定记录在索引查找表中的块号和在块中的位置。
2.核心算法分析索引查找表有索引表和块表两部分所构成,其中索引表存储的是各块记录中的最大关键字值和各块的起始存储地址,用顺序存储结构,各块的起始存储地址的初始值置为空指针;而块表中存储的是查找表中的所有记录并且按块有序,用链式存储或顺序存储结构,在此用链式存储结构。
则索引查找表的存储结构图如6-2所示:STST. r r[0] r[1] r[2] r[3] 图6-2 索引查找表的存储结构示意图最大关键字块链头指针将如图6-2所示的存储结构描述为:#define MAXSIZE 100typedef int keytype;typedef struct bnode /*块链中的结点类型*/{ keytype key; /*存储块中记录的关键字值*/struct bnode *next; /*指向块链中下一记录结点的指针*/} Bnode;typedef struct snode /*索引表中元素的类型*/{ keytype Maxkey; /*存储各块记录中的最大关键字值*/Bnode *head; /*块链的头指针*/}Snode;typedef struct /*索引查找表的结构类型*/{ Snode r[MAXSIZE]; /*索引顺序表*/int length; /*索引顺序表中存储数据的个数*/}Stable;由于在索引查找表中,索引表是按关键字从小到大排列的有序顺序表,块链是一个无序链表,所有索引表的查找过程可归纳为:(1)在索引表中用二分查找确定待查找的记录所在的块号;(2)沿着块链指针用顺序查找的方法确定待查找的记录在块链中的存储位置。
如果查找成功,则输出待查找记录在索引表中的块号和在块链中的存储地址;如果查找失败,则输出“没有找到”的信息。
3.核心算法描述int findblock(Stable ST, keytype key)/*用二分查找法在索引查找表ST的索引表中确定关键字值为key的待查找记录所在的块号,函数并返回值其块号值*/{ int low,high,mid;low=1;high=ST.length;while(low<=high){ mid=(low+high)/2;if (key<ST.r[mid].Maxkey)high=mid-1;elselow=mid+1;}return high+1;}Blink findrec(Stable ST,keytype key)/*用顺序查找法在索引查找表的块链中确定关键字值为key的待查找记录的存储位置,如查找成功则函数返回其地址值,否则返回空指针*/{ Blink p;int Bno;Bno=findblock(ST,key); /*调用函数,确定待查记录所在块号*/p=ST.r[Bno].head; /*取到待查记录所在块链的头指针*/while (p&&p->key!=key) /*顺着链指针依次查找*/p=p->next;return p; /*返回查找结果*/}Welcome To Download !!!欢迎您的下载,资料仅供参考!。