<?php /* * use php write stack * 栈的链式存储(链栈,单链表尾部添加) * 定义一个结点node */ class node{ //存储单元 private $data; //指向下一个的“指针” private $next; //初始化node public function __construct() { $this->data=null; $this->next=null; } /** * @param null $data */ public function setData($data) { $this->data = $data; } /** * @return null */ public function getData() { return $this->data; } /** * @return null */ public function getNext() { return $this->next; } /** * @param null $next */ public function setNext($next) { $this->next = $next; } } class linkStack { //node 对象 private $obj; //count 记录总长度 private static $count; //top 始终指向栈顶元素 private $top; //初始化链栈 public function __construct() { //栈顶为空,空栈 $this->top=null; //计数器初始化为0 self::$count=0; //构造头结点 $this->pushLinkStack(); } //获取node结点函数 private function setNode() { return new node(); } //入栈操作 public function pushLinkStack($insert=null) { //添加node结点 $this->obj=$this->setNode(); //赋值数据 $this->obj->setData($insert); //“指针”后移 $this->obj->setNext($this->top); //重新定义“指针位置” $this->top=$this->obj; //var_dump($this->top); //计数器加一 if ($insert!=null) self::$count++; } //显示函数 public function out() { $oobj=$this->obj; while($oobj->getNext()!=null){ echo $oobj->getData()."<br>"; $oobj=$oobj->getNext(); } echo $this->top->getData(); } //栈顶弹出元素 public function popLinkStack() { //如果栈空,则echo提示 if ($this->obj->getNext()==null){ echo "栈以空"; }else{ //如果栈未空 $this->obj=$this->obj->getNext(); $this->top=$this->obj; } } } /*$a=new linkStack(); $a->pushLinkStack(1); $a->pushLinkStack(2); $a->pushLinkStack(3); $a->out(); $a->popLinkStack(); $a->out();*/
PHP与数据结构之带头结点的栈的链式存储结构
最新推荐文章于 2024-07-07 19:55:37 发布