设为首页 收藏本站
查看: 1324|回复: 0

[经验分享] PHP实现双向链表、栈

[复制链接]

尚未签到

发表于 2015-8-24 15:46:51 | 显示全部楼层 |阅读模式
  前期写过一个PHP实现单向链表、实现排序单向链表的一篇文章,传送门:http://www.iyunv.com/yydcdut/p/3777760.html。双向链表写过了,再拿出来提一提:http://www.iyunv.com/yydcdut/p/3782661.html。
  这次再来分享一下实现双向链表和栈的实现。代码虽然是以前写的了,但是发现PHP写的这些代码很容易看懂!
  双向链表                                                                                       



<?php
//双向链表
class Hero
{
public $pre=null;//前指针
public $no;//排名
public $name;//名字
public $next=null;//后指针
/**
*构造函数,申明链表头
*/
public function __construct($no='',$name='')
{
$this->no=$no;
$this->name=$name;
}
/**
*插入
*/
static public function addHero($head,$hero)
{
$cur = $head;
$isExist=false;
//判断目前这个链表是否为空
if($cur->next==null)
{
$cur->next=$hero;
$hero->pre=$cur;
}
else
{
//如果不是空节点,则安排名来添加
//找到添加的位置            
while($cur->next!=null)
{
if($cur->next->no > $hero->no)
{//如果大于了排名,跳出
break;
}
else if($cur->next->no == $hero->no)
{//如果等于排名,则代表有这个元素了
$isExist=true;
echo "<br>不能添加相同的编号";
}
$cur=$cur->next;
}
if(!$isExist)
{//如果元素不存在,执行插入操作
if($cur->next!=null)
{$hero->next=$cur->next;}
$hero->pre=$cur;
if($cur->next!=null)
{$hero->next->pre=$hero;}
$cur->next=$hero;            
}
}
}
//遍历
static public function showHero($head)
{
$cur=$head;
while($cur->next!=null)
{
echo "<br>编号:".$cur->next->no."名字:".$cur->next->name;
$cur=$cur->next;
}
}        
static public function delHero($head,$herono)
{
$cur=$head;
$isFind=false;
while($cur!=null)
{
if($cur->no==$herono)
{
$isFind=true;
break;
}
//继续找
$cur=$cur->next;
}
if($isFind)
{
if($cur->next!=null)
{$cur->next_pre=$cur->pre;}
$cur->pre->next=$cur->next;
}
else
{echo "<br>没有找到目标";}            
}
}
$head = new Hero();
$hero1 = new Hero(1,'1111');
$hero3 = new Hero(3,'3333');
$hero2 = new Hero(2,'2222');
Hero::addHero($head,$hero1);
Hero::addHero($head,$hero3);
Hero::addHero($head,$hero2);
Hero::showHero($head);
Hero::delHero($head,2);
Hero::showHero($head);
?>
  双向链表的插入操作示意图:



if($cur->next!=null)
$hero->next=$cur->next;
$hero->pre=$cur;
if($cur->next!=null)
$hero->next->pre=$hero;
$cur->next=$hero;
  
DSC0000.png
  删除操作示意图:



if($cur->next!=null)
$cur->next->pre=$cur->pre;
$cur->pre->next=$cur->next;
  
DSC0001.png
  栈                                                                                               



<?php
class myStack
{
private $top=-1;
private $maxSize=5;
private $stack=array();
public function push($val)
{
if($this->top == $this->maxSize)
{
echo "<br>已经满了";
}
$this->top++;
$this->stack[$this->top]=$val;
}
public function showStack()
{
if($this->top==-1)
{
echo "<br>栈为空!";
return ;
}
for($i=$this->top;$i>-1;$i--)
{
echo "<br>stack[".$i."]=".$this->stack[$i];
}
}
public function pop()
{
if($this->top==-1)
{
echo "<br>栈为空!";
return ;
}
$val=$this->stack[$this->top];
$this->top--;
echo "<br>弹出".$val;
}
}
$mystack = new myStack;
$mystack->push('111');
$mystack->push('222');
$mystack->showStack();
$mystack->pop();
$mystack->pop();
?>
DSC0002.jpg
  栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。
  栈在计算机的实现有多种方式:


  • 硬堆栈:利用CPU中的某些寄存器组或类似的硬件或使用内存的特殊区域来实现。这类堆栈容量有限,但速度很快;
  • 软堆栈:这类堆栈主要在内存中实现。堆栈容量可以达到很大。在实现方式上,又有动态方式和静态方式两种
  栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。
  栈底(Bottom):是固定端,又称为表头。
  空栈:当表中没有元素时称为空栈。
  栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。
  当然,php中的数组API里面带的有push和pop函数。
  我是天王盖地虎的分割线                                                                 
  《PHP实现链表》传送门:http://www.iyunv.com/yydcdut/p/3777760.html
  
  
  
  转载请注明出处:转载请注明出处:http://www.iyunv.com/yydcdut

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103635-1-1.html 上篇帖子: php中的extract函数 下篇帖子: PHP调用java的class
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表