某知名共享单车公司PHP工程师面试笔试真题6_第1页
某知名共享单车公司PHP工程师面试笔试真题6_第2页
某知名共享单车公司PHP工程师面试笔试真题6_第3页
某知名共享单车公司PHP工程师面试笔试真题6_第4页
某知名共享单车公司PHP工程师面试笔试真题6_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

某知名共享单车公司PHP工程师面试笔试真题6一、选择题1.

实验高中的小明暗恋女神同学已经三年了,高考结束后,小明决定向女神同学表白。这天,小明来到女神楼下等待女神的出现,时间一分一秒地流逝,两个多小时过(江南博哥)去了,女神还没有出现,小明看了下表,时针和分针的位置正好跟开始等的时候互换,请问小明一共等了女神______分钟。A.165B.150C.172D.166正确答案:D[解析]根据题目中的描述,可以画一个表示时针与分针的图例,如下图所示。

假设小明开始等待女神的那一时刻时针与分针的夹角为θ弧度,那么,等到时针与分针正好互换位置时,时针走过了θ弧度,而由于分针转动一圈表示的时间为一个小时,钟表一圈是一个圆,表示的弧度值为2π,分针因为要转若干圈才能到达时针的位置,记分钟所转圈数为n,此时分针转过的角度则为2πn-θ弧度。

题目强调,“时间一分一秒地流逝,两个多小时过去了,女神还没有出现”,通过这条信息可知,分针转了2~3圈,接近3圈,此时可知,n值取3,所以,时针转过的角度值为0,分针转过的角度值为2π*3-θ=6π-θ。

对于时针而言,2π代表一圈,即12个小时,那么弧度θ表示的时间值为12*θ/2π小时,对于分针而言,2π代表一圈,即60分钟,那么6π-θ表示的是60*(6π-θ)/2π分钟。由于时钟走过的时间值与分钟走过的时间值所代表的时间量是一个量,故而二者是相等的,由此可以构建如下等式关系:

(12θ/2π)*60=60*(6π-θ)/2π

求解上述等式可知,θ=6π/13,即小明等待的时间反映在钟表上为6π/13弧度值,所以,小明一共等了12*(6π/13)/2π小时,即36/13小时,合166分钟。

所以,本题的答案为D。

2.

全等运算符===如何比较两个值?______A.把它们转换成相同的数据类型再比较转换后的值B.只在两者的数据类型和值都相同时才返回trueC.如果两个值是字符串,则进行词汇比较D.基于strcmp函数进行比较正确答案:B[解析]全等运算符主要比较两者数据类型和值是否相等,都相等时才会返回true。

本题中,对于选项A,全等运算符是先比较它们的值是否相等,如果不相等,那么返回false;如果相等,那么比较数据类型是否相等。并不是先转换相同的数据类型,再进行值的比较。选项A错误。

对于选项B,全等运算符是比较两者的数据类型和值是否都相等,如果数据类型和值都相等,那么返回true。选项B正确。

对于选项C,如果比较的两个值都是字符串,那么会对每个字符进行比较,而不是进行词汇比较。选项C错误。

对于选项D,strcmp只能用来比较两个字符串的值是否相等,而全等比较还能比较两个数据的类型是否相等,显然它们的功能是不同的,因此全等也不是基于strcmp实现的。选项D错误。

所以,本题的答案为B。

3.

可以用来表现以下条件判断最合适的语法结构是______

if($a=='a'){

somefunction();

}elseif($a=='b'){

anotherfunction();

}elseif($a=='c'){

dosomething();

}else{

donothing();

}A.没有default的switch语句B.一个递归函数C.while语句D.有default的switch语句正确答案:D[解析]对于if...elseif...else结构的分支结构程序可以使用switch语句进行优化,从而可以避免冗长的代码块。本题中,else相当于switch里面的default部分,即条件没有符合的都可以执行到default里面的语句。选项A错误,选项D正确。

逻辑判断语句是不可能被改成循环语句或递归函数完成对应功能的,选项B选项C错误。

所以,本题的答案为D。

4.

假设$a=5,有$b=($a--),则$b是______A.4B.5C.6D.0正确答案:B[解析]$b=($a--)相当于$b=$a--,$a--会先把$a的值赋值给$b再减1,得到$b=5。

所以,本题的答案为B。

5.

考虑如下数组,能从数组$multi_array中找出值cat的方法是______

$multi_array=array("red","green",

42=>"blue",

"yellow"=>array("apple",9=>"pear","banana",

"orange"=>array("dog","cat","iguana"))

);A.$multi_array['yellow']['apple'][0]B.$multi_array['blue'][0]['orange'][1]C.$multi_array[3][3][2]D.$multi_array['yellow']['orange']['cat']E.$multi_array['yellow']['orange'][1]正确答案:E[解析]$multi_array数组是一个多维数组,值cat在orange数组中,键名1,orange又在yellow,数组中,所以获得cat值的方法应该为$multi_array['yellow']['orange'][1]。选项E正确。

所以,本题的答案为E。

6.

下面关于PHP抽象类的描述中,错误的是______A.PHP中抽象类使用abstract关键字定义B.没有方法体的方法叫抽象方法,包含抽象方法的类必须是抽象类C.抽象类中必须有抽象方法,否则不叫抽象类D.抽象类不能实例化,也就是不可以new成对象正确答案:C[解析]抽象类可以是个空类,也就是不一定需要有抽象方法。但抽象方法只能存在抽象类中。选项C错误。

所以,本题的答案为C。

7.

在PHP的类中要使用定义的变量或函数时,要使用某种方式来指向类中的变量,下列选项中,错误的是______(三选)A.$it->B.$my->C.$this->D.$I->正确答案:ABD[解析]在类中指向定义的属性或方法只能使用“$this->”的方式指向,选项A选项B选项D正确。

所以,本题的答案为ABD。

8.

下面有关require()和include()的描述中,说法错误的是______A.require函数通常放在PHP程序的最前面B.include函数一般是放在流程控制的处理部分中C.require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是,则不会再次包含D.require在引入不存在的文件时产生一个警告且脚本还会继续执行,而include则会导致一个致命性错误且脚本停止执行正确答案:D[解析]require和include引用文件和使用方法几乎完全一样,除了处理失败的方式不同之外,require在出错时产生E_COMPILE_ERROR级别的错误。换句话说,require将导致脚本中止而include只产生警告(E_WARNING),脚本会继续运行。

include在引入不存在的文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行。

所以,本题的答案为D。

9.

正则表达式可以被用来实现______(双选)A.过滤特定的字符串B.查找指定的匹配字符C.完成页面的跳转D.转换字符编码正确答案:AB[解析]正则表达式可以匹配查找替换字符串,也可以过滤字符串中包含的特定字符串。选项A选项B正确。

正则表达式不具备页面跳转功能和转换字符编码的功能。选项C选项D错误。

所以,本题的答案为AB。

10.

处理HTTP文件上传时,PHP把文件存储在$FILES中。在PHP脚本的执行周期中,这些文件将被放在本地的临时文件夹里,而在脚本结束后,文件将被自动删除。在处理HTTP文件上传时,确保当前操作的文件是正确的方法有______(双选)A.操作前,将文件名与浏览器报告的文件名对比B.操作前,用fileexists函数确保文件存在C.用isuploadedfile()函数确认文件的确是通过HTTP方式传输过来的D.用moveuploadfile()将文件移动到安全位置E.只信任PHP存储临时文件目录下的文件正确答案:CD[解析]在上传前,一定要用is_uploaded_file()函数确保文件名正确传输,并把本地临时文件通过move_upload_file()函数在上传文件前检查文件,再移动文件到安全位置进行长期保存,防止文件丢失。而在操作前不需要特意地对文件名进行对比和使用。file_exists()函数判断文件是否存在。其次,文件的上传,PHP并不是只信任临时文件目录下的文件。选项C选项D正确。

所以,本题的答案为CD。

11.

如果用+操作符把一个字符串和一个整型数字相加,那么结果是______A.解释器输出一个类型错误B.字符串将被转换成数字,再与整型数字相加C.字符串将被丢弃,只保留整型数字D.字符串和整型数字将连接成一个新字符串E.整型数字将被丢弃,而保留字符串正确答案:B[解析]字符串将被转换成数字(如果无法发生转换,那么就是0),然后与整型数字相加。

所以,本题的答案为B。

12.

下列函数不是被用于处理数组的是______A.in_array()B.array_slice()C.list()D.intval()正确答案:D[解析]本题中,in_array()函数可以判断值是否在数组中,array_slice()函数可以在数组中根据条件取出一段值,list()函数可以一次操作所有的变量,无论是单个变量还是数组都可以。而intval()函数是获取数据的整数值,不能用于对象中。选项D正确。

所以,本题的答案为D。

13.

以下关于PHP文件处理的说法中,正确的是______A.file_get_contents()函数能用来抓取网页数据,但是没办法设置超时时间B.file()函数既能读取文本文件也能读取二进制文件,但是读取二进制文件有可能出现安全问题C.如果表单中没有选择上传的文件,则PHP变量的值将为NULLD.fsockopen()和fputs()结合起来可以发送邮件,也可以用来抓取网页内容、下载ftp文件等正确答案:C[解析]对于选项A,可以通过context参数设置超时时间。选项A错误。

对于选项B,file()函数可以安全用于读取二进制文件。选项B错误。

对于选项C,表单中没有文件上传时,PHP的$_FILES变量值为NULL。选项C正确。

对于选项D,fputs()用于写入字符串到文件中时,只能用于上传不能用于下载ftp文件。选项D错误。

所以,本题的答案为C。

14.

下列PHP配置项中,和安全最不相关的是______A.open_basedirB.register_globalsC.disable_functionsD.file_uploads正确答案:D[解析]对于选项A,open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号“.”来代表当前目录。注意,用open_basedir指定的限制实际上是前缀,而不是目录名。举例来说,若“open_basedir=/dir/user”,那么目录“/dir/user”和“/dir/user1”都是可以访问的。所以如果要将访问限制在仅为指定的目录,那么要用斜线结束路径名。例如,设置成“open_basedir=/dir/user/”。

对于选项B,register_globals的意思就是注册为全局变量,所以当它的值被设为on的时候,传递过来的值会被直接注册为全局变量来使用。当被设为off的时候,要到特定的数组里去获得它。但需要注意的是:

1)从PHP4.2.0版开始,配置文件中register_globals的默认值从on改为off,虽然可以设置它为on,但是当无法控制服务器的时候,代码的兼容性就成为一个大问题,所以,最好从现在就开始使用off的风格来编程。

2)当register_globals打开以后,各种变量都会被注入代码中,例如,来自HTML表单的请求变量。再加上PHP在使用变量之前是无须进行初始化的,这就使得更容易写出不安全的代码。当打开时,人们使用变量时确实不知道变量是哪里来的。但是register_globals的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。

对于选项C,disable_functions限制程序使用一些可以直接执行系统命令的函数,如system、exec、passthru、shell_exec、proc_open等。所以如果想保证服务器的安全,那么要将这个函数加到disable_functions里或者将安全模式打开。

对于选项D,file_uploads是决定PHP文件上传时记录file_uploads指令是否启用的函数,默认值为on。该函数和安全最不相关,选项D正确。

所以,本题的答案为D。

15.

在PHP中,使用sendmail程序从Windows或Novell系统中发送邮件的方式,与从类UNIX系统中发送的方式不同。以下哪些选项说明了这个不同?______(双选)A.Windows/Novell不需要第三方软件的支持就能实现该功能B.UNIX中,sendmail_from的配置决定了邮件头中的From信息C.在Windows/Novell中,无法发送有多个收件人的电子邮件,每个收件人都必须单独发送D.有可能完全相同,这取决于sendmailpath的配置E.不同于Windows/Novell,在UNIX中,必须用SMTP和smtp_port配置好MTA主机和端口正确答案:AD[解析]对于选项A,Windows/Novell版本通过SMTP可以直接用MTA发送邮件,而UNIX的PHP需要用sendmail程序通过MTA发送邮件。选项A正确,选项E错误。

对于选项B,在Windows/Novell上使用mail()时,需要配置sendmail_from才能使用,并不是通过sendmail_from配置决定邮件中的From信息。而UNIX发邮件是交给sendmail程序来处理的。选项D正确,选项B错误。

对于选项C,条件允许的情况下,Windows/Novell上的PHP可以进行配置,通过“sendmail”封装器模拟sendmail发信,可以发送多个收件人的电子邮件。选项C错误。

所以,本题的答案为AD。

二、填空题1.

假设机器上没有安装sendmail,要想mail函数能在Windows下使用,需要______。正确答案:改变php.ini的设置。[解析]在UNIX、Linux系统中,PHP主要使用sendmail程序来处理邮件。而在Windows中除非已经有sendmail包装器,否则只能使用服务器的SMTP配置进行,而SMTP是可以在php.ini文件中进行配置开启的。

2.

PHP支持的流传输方式的是______和______。正确答案:STDIO、stream。[解析]PHP只支持两种流传输,分别为本地操作的STDIO和远程操作的stream,并且可以根据创建的流的类型来自动选择合适的传输方式。

3.

能让类在整个脚本里只实例化一次的设计模式是______。正确答案:单例模式。[解析]单例模式是一种用于确保程序中只有一个类实例化的程序。

4.

使用final关键字时,应注意的问题有______、______、______。正确答案:定义的类禁止继承;定义的成员禁止继承;定义的方法禁止重写。

5.

即时加载一个类的方法是______。正确答案:spl_autoload_register()函数。[解析]spl_autoload_registerl()提供了一种更加灵活的方式来实现类的自动加载(同一个应用文件中,可支持任意数量的加载器,比如第三方库中的类文件)。而_autoload()函数在PHP7.2版本中已经被废除。

三、简答题1.

5名海盗抢得了窖藏的100枚金币,并打算瓜分这些战利品。这是一些讲民主的海盗(当然是他们自己特有的民主),他们的习惯是按下面的方式进行分配:最厉害的一名海盗提出分配方案,然后所有的海盗(包括提出方案者本人)就此方案进行表决。如果50%或更多的海盗赞同此方案,此方案就获得通过并据此分配战利品。否则提出方案的海盗将被扔到海里,然后下一名最厉害的海盗又重复上述过程。

所有的海盗都乐于看到他们的一位同伙被扔进海里,不过,如果让他们选择的话,他们还是宁可得一笔现金。他们当然也不愿意自己被扔到海里。所有的海盗都是有理性的,而且知道其他的海盗也是有理性的。此外,没有两名海盗是同等厉害的——这些海盗按照完全由上到下的等级排好了座次,并且每个人都清楚自己和其他所有人的等级。这些金块不能再分,也不允许几名海盗共有金块,因为任何海盗都不相信他的同伙会遵守关于共享金块的安排。这是一伙每人都只为自己打算的海盗。

最凶的一名海盗应当提出什么样的分配方案才能使他获得最多的金子呢?正确答案:如果轮到第四个海盗分配:100,0;

轮到第三个:99,0,1;

轮到第二个:99,0,1,0;

轮到第一个:98,0,1,0,1,这就是第一个海盗的最佳方案。

可以从后往前推测每次最优的方案,从而确定第一种方案就是最好的。

1)当只剩两个海盗分金时,因为只要有50%或以上的支持率则方案通过,所以第四个海盗和第五个海盗分金时,无论第五个海盗是否支持自己,第四个海盗都可以给自己分配100枚金币。

2)当只剩三个海盗分金时,第三个海盗分金的方案,除了自己的支持外,还需要一个海盗的支持,否则方案不通过。所以,如果第三个海盗想要拿最多金币,最好的方案就是让第五个海盗得到金币来支持他,因为第四个海盗可以通过否定第三个海盗的方案实现自己的利益最大化。所以,第三个海盗得99枚金币,而第五个海盗得1枚金币的方案是最好的方案。

3)当只剩下四个海盗分金时,第二个海盗的方案,只需要一个海盗支持他即可通过方案。由2)的分析知道,要第四个海盗支持自己是最有利的,所以可以得到最好的方案是第二个海盗得99枚金币,第四个海盗得1枚金币的方案。

最初的情况,5个海盗分金,第一个海盗必须要其余2名海盗支持自己,他才有可能得到最多的金币。通过3)的分析知道,分配给第三个海盗和第五个海盗1枚金币,让他们支持自己是最优的方案。

2.

如何定义一个函数?函数名区分大小写吗?正确答案:定义一个函数的步骤为以下几点,函数名的大小写是不区分的。

1)通过function关键字声明函数,格式为function函数名(){}。

2)函数命名遵循变量命名的规则,以字母或下划线开头,且不能以数字开头。

3)函数名不可以使用系统函数的名称,且不能使用已经声明过的函数名。

PHP中函数名、方法名、类名不区分大小写,但PHP的变量名是区分大小写的。

实现代码为

<?php

functionabc(){

echo"1";

}

ABC();

?>

程序运行结果为1。

从上面运行结果可以看出,函数名是abc小写,但是可以通过ABC大写去调用该函数。

3.

谈谈你对MVC的认识,介绍几种目前比较流行的MVC框架。正确答案:MVC是一种设计模式,由模型层、逻辑层和视图层组成。用户通过入口访问到控制器,控制器从模型层获取数据然后分配视图,并加载数据到视图层。用户通过视图层操作向逻辑层反馈,逻辑层处理反馈,如果涉及数据库操作,那么将会在模型层中对数据库增、删、改、查。最后逻辑层将执行结果返回到视图层。

目前比较流行的MVC框架有Laravel、ThinkPHP、Yii、codeIgniter、CakePHP等。

4.

请介绍说明观察者模式。正确答案:观察者模式(也被称为发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察的对象分离开。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关,结果是对象可以相互对话,而不必了解原因。

例如,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是,系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将它做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

实现的代码如下:

<?php

//观察者接口

interfaceInterfaceObserver

{

functiononListen($sender,$args);

functiongetObserverName();

}

//可被观察者接口

interfaceInterfaceObservable

{

functionaddObserver($observer);

functionremoveObserver($observer_name);

}

//观察者抽象类

abstractclassObserverimplementsInterfaceObserver

{

protected$observer_name;

functiongetObserverName()

{

return$this->observer_name;

}

functiononListen($sender,$args)

{}

}

//可被观察类

abstractclassObservableimplementsInterfaceObservable

{

protected$observers=array();

publicfunctionaddObserver($observer)

{

if($observerinstanceofInterfaceObserver)

{

$this->observers[]=$observer;

}

}

publicfunctionremoveObserver($observer_name)

{

foreach($this->observersas$index=>$observer)

{

if($observer->getObserverName()===$observer_name)

{

array_splice($this->observers,$index,1);

return;

}

}

}

}

//模拟一个可以被观察的类

classAextendsObservable

{

publicfunctionaddListener($listener)

{

foreach($this->observersas$observer)

{

$observer->onListen($this,$listener);

}

}

}

//模拟一个观察者类

classBextendsObserver

{

protected$observer_name='B';

publicfunctiononListen($sender,$args)

{

var_dump($sender);

echo"<br>";

var_dump($args);

echo"<br>”;

}

}

//模拟另外一个观察者类

classCextendsObserver

{

protected$observer_name='C';

publicfunctiononListen($sender,$args)

{

var_dump($sender);

echo"<br>";

var_dump($args);

echo"<br>";

}

}

$a=newA();

//注入观察者

$a->addObserver(newB());

$a->addObserver(newC());

//可以看到观察到的信息

$a->addListener('D');

//移除观察者

$a->removeObserver('B');

?>

5.

Memcache的工作原理是什么?正确答案:Memcache的工作就是在专门的机器内存里维护一张巨大的hash表,存储经常被读写的一些文件与数据,从而极大地提高网站的运行效率。

Memcache的程序运行在一个或多个服务器中,Memcache把全部的数据保存在内存中,通过hash表的方式,每条数据由key/value的形式构成,随时接受客户端的请求,然后返回结果。

客户端与Memcache建立连接后,存储对象主要是通过唯一的key存储value到内存中,取数据时通过这个key从内存中获取对应的value。因为Memcache的数据是存储在内存中而不是保存在cache文件中,所以Memcache访问比较快。但是因为这些数据不是永久化存储,所以不建议存储重要数据在Memcache中,因为重启服务器后这些数据就会消失。

四、编程题1.

数字1~1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。设计一个算法,将重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?正确答案:拿到题目,首先需要做的就是分析题目所要达到的目标以及其中的限定条件。从题目的描述中可以发现,本题的目标就是在一个有且仅有一个元素值重复的数组中找出这个唯一的重复元素,而限定条件就是每个数组元素只能访问一次,并且不许使用辅助存储空间。

示例代码如下:

<?php

/*

**函数功能:在数组中找唯一重复的元素

**输入参数:array数组首地址,len数组长度

**返回值:重复元素的值,无重复元素则返回-1

*/

functionfindDup($array)

{

$len=count($array);

if(!$array||$len<1)

return-1;

$newArr=array();

for($i=0;$i<$len-1;$i++)

$newArr[$i]=0;

for($i=0;$i<$len;$i++)

{

if($newArr[$array[$i]-1]==0)

{

$newArr[$array[$i]-1]=1;

}else

{

return$array[$i];

}

}

return-1;

}

$array=[1,3,4,2,5,3];

printf("%d",findDup($array));

?>

程序的运行结果为

3

2.

设计一个算法,判断给定的一个数n是否是某个数的平方,不能使用开方运算。例如,16就满足条件,因为它是4的平方;而15则不满足条件,因为不存在一个数使得其平方值为15。正确答案:通过对平方数进行分析发现有如下规律:

(n+1)^2=n^2+2n+1=(n-1)^2+(2*(n-1)+1)+2*n+1=…=1+(2*1+1)+(2*2+1)+…+(2*n+1)。

通过上式可以发现,这些项构成了一个公差为2的等差数列的和。由此可以得到如下的解决方法:对n依次减1,3,5,7,…,如果相减后的值大于0,则继续减下一项;如果相减的后的值等于0,则说明n是某个数的平方;如果相减后的值小于0,则说明n不是某个数的平方。根据这个思路,代码实现如下:

functionisPower($n)

{

if($n<=0)

{

printf("%d不是自然数\n",n);

returnfalse;

}

$minus=1;

while($n>0)

{

$n=$n-$minus;

//n是某个数的平方

if($n==0)

returntrue;

//n不是某个数的平方

elseif($n<0)

returnfalse;

//每次减数都加2

else

$minus+=2;

}

returnfalse;

}

3.

用类编程实现:Stu类中有两个私有属性name和sex,有两个公有方法,setName()和setSex()参数自定,方法可实现对两个私有属性进行修改。在实例化类的时候要求对私有属性能初始化。正确答案:实现代码如下:

<?php

ClassStu{

private$name;

private$sex;

publicfunctionsetName($name){

$this->name=$name;

}

publicfunctionsetSex($sex){

$this->sex=$sex;

}

}

?>

4.

把链表相邻元素翻转,例如,给定链表为1->2->3->4->5->6->7,则翻转后的链表变为2->1->4->3->6->5->7。正确答案:主要思路为,通过调整结点指针域的指向来直接调换相邻的两个结点。如果单链表恰好有偶数个结点,那么只需要将奇偶结点对调,如果链表有奇数个结点,那么除最后一结点外的其他结点进行奇偶对调。为了便于理解,下图给出了其中第一对结点对调的方法。

在上图中,当前遍历到结点cur,通过①~⑥6个步骤用虚线的指针来代替实线的指针实现相邻结点的逆序。其中,①~④实现了前两个结点的逆序操作,⑤和⑥两个步骤向后移动指针,接着可以采用同样的方式实现后面两个相邻结点的逆序操作。

实现代码如下:

<?php

header("content-type:text/html;charset=utf-8");

//链表结点

classnode{

public$data;

//存储数据

public$next;

//下一结点

publicfunction__construct($data){

$this->data=$data;

$this->next=NULL;

}

}

//单链表

classlinkList{

private$header;

//链表头结点

//构造方法

publicfunction__construct($data=NULL){

$this->header=newnode($data);

}

//添加结点数据

publicfunctionaddLink($node){

$current=$this->header;

while($current->next!=NULL){

$current=$current->next;

}

$node->next=$current->next;

$current->next=$node;

}

//删除链表结点

publicfunctionfree($data){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论