php 08_stack
This commit is contained in:
parent
ce72454dcb
commit
7540c6c23f
@ -133,7 +133,7 @@ class SingleLinkedList
|
|||||||
$preNode = $this->head;
|
$preNode = $this->head;
|
||||||
// 遍历找到前置节点 要用全等判断是否是同一个对象
|
// 遍历找到前置节点 要用全等判断是否是同一个对象
|
||||||
// http://php.net/manual/zh/language.oop5.object-comparison.php
|
// http://php.net/manual/zh/language.oop5.object-comparison.php
|
||||||
while ($curNode !== $node) {
|
while ($curNode !== $node && $curNode != null) {
|
||||||
$preNode = $curNode;
|
$preNode = $curNode;
|
||||||
$curNode = $curNode->next;
|
$curNode = $curNode->next;
|
||||||
}
|
}
|
||||||
|
0
php/08_stack/.gitkeep
Normal file
0
php/08_stack/.gitkeep
Normal file
159
php/08_stack/StackOnLinkedList.php
Normal file
159
php/08_stack/StackOnLinkedList.php
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* User: lide01
|
||||||
|
* Date: 2018/10/11 19:37
|
||||||
|
* Desc:
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Algo_08;
|
||||||
|
|
||||||
|
|
||||||
|
use Algo_06\SingleLinkedListNode;
|
||||||
|
|
||||||
|
class StackOnLinkedList
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 头指针
|
||||||
|
*
|
||||||
|
* @var SingleLinkedListNode
|
||||||
|
*/
|
||||||
|
public $head;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 栈长度
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
*/
|
||||||
|
public $length;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* StackOnLinkedList constructor.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->head = new SingleLinkedListNode();
|
||||||
|
$this->length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出栈
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function pop()
|
||||||
|
{
|
||||||
|
if (0 == $this->length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->head->next = $this->head->next->next;
|
||||||
|
$this->length--;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入栈
|
||||||
|
*
|
||||||
|
* @param $data
|
||||||
|
*
|
||||||
|
* @return SingleLinkedListNode|bool
|
||||||
|
*/
|
||||||
|
public function push($data)
|
||||||
|
{
|
||||||
|
return $this->pushData($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入栈 node
|
||||||
|
*
|
||||||
|
* @param SingleLinkedListNode $node
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function pushNode(SingleLinkedListNode $node)
|
||||||
|
{
|
||||||
|
if (null == $node) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$node->next = $this->head->next;
|
||||||
|
$this->head->next = $node;
|
||||||
|
|
||||||
|
$this->length++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入栈 data
|
||||||
|
*
|
||||||
|
* @param $data
|
||||||
|
*
|
||||||
|
* @return SingleLinkedListNode|bool
|
||||||
|
*/
|
||||||
|
public function pushData($data)
|
||||||
|
{
|
||||||
|
$node = new SingleLinkedListNode($data);
|
||||||
|
|
||||||
|
if (!$this->pushNode($node)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $node;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取栈顶元素
|
||||||
|
*
|
||||||
|
* @return SingleLinkedListNode|bool|null
|
||||||
|
*/
|
||||||
|
public function top()
|
||||||
|
{
|
||||||
|
if (0 == $this->length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->head->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打印栈
|
||||||
|
*/
|
||||||
|
public function printSelf()
|
||||||
|
{
|
||||||
|
if (0 == $this->length) {
|
||||||
|
echo 'empty stack' . PHP_EOL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'head.next -> ';
|
||||||
|
$curNode = $this->head;
|
||||||
|
while ($curNode->next) {
|
||||||
|
echo $curNode->next->data . ' -> ';
|
||||||
|
|
||||||
|
$curNode = $curNode->next;
|
||||||
|
}
|
||||||
|
echo 'NULL' . PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取栈长度
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getLength()
|
||||||
|
{
|
||||||
|
return $this->length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断栈是否为空
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isEmpty()
|
||||||
|
{
|
||||||
|
return $this->length > 0 ? false : true;
|
||||||
|
}
|
||||||
|
}
|
32
php/08_stack/main.php
Normal file
32
php/08_stack/main.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* User: lide01
|
||||||
|
* Date: 2018/10/11 20:01
|
||||||
|
* Desc:
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Algo_08;
|
||||||
|
|
||||||
|
require_once '../vendor/autoload.php';
|
||||||
|
|
||||||
|
$stack = new StackOnLinkedList();
|
||||||
|
$stack->pushData(1);
|
||||||
|
$stack->pushData(2);
|
||||||
|
$stack->pushData(3);
|
||||||
|
$stack->pushData(4);
|
||||||
|
var_dump($stack->getLength());
|
||||||
|
$stack->printSelf();
|
||||||
|
|
||||||
|
$topNode = $stack->top();
|
||||||
|
var_dump($topNode->data);
|
||||||
|
|
||||||
|
$stack->pop();
|
||||||
|
$stack->printSelf();
|
||||||
|
$stack->pop();
|
||||||
|
$stack->printSelf();
|
||||||
|
|
||||||
|
var_dump($stack->getLength());
|
||||||
|
|
||||||
|
$stack->pop();
|
||||||
|
$stack->pop();
|
||||||
|
$stack->printSelf();
|
@ -1,16 +1,20 @@
|
|||||||
## 数据结构与算法之美PHP实现
|
## 数据结构与算法之美PHP实现
|
||||||
|
|
||||||
### 项目运行
|
### 项目运行
|
||||||
* 依赖composer自动加载,php目录下执行`composer dump-autoload`
|
* 依赖composer自动加载,php目录下执行`composer dump-autoload` || `sh buildAutoLoad.sh`
|
||||||
* 项目代码均在mac&php7环境下跑通
|
* 项目代码均在mac&php7环境下跑通
|
||||||
|
|
||||||
### 项目实现
|
### 项目实现
|
||||||
#### 06
|
#### 06_linkedlist
|
||||||
* 单链表php实现
|
* 单链表php实现
|
||||||
* 回文判断
|
* 回文判断
|
||||||
#### 07
|
|
||||||
|
#### 07_linkedlist
|
||||||
* reverse 单链表反转
|
* reverse 单链表反转
|
||||||
* checkCircle 链表中环的检测
|
* checkCircle 链表中环的检测
|
||||||
* mergerSortedList 两个有序的链表合并
|
* mergerSortedList 两个有序的链表合并
|
||||||
* deleteLastKth 删除链表倒数第n个结点
|
* deleteLastKth 删除链表倒数第n个结点
|
||||||
* findMiddleNode 求链表的中间结点
|
* findMiddleNode 求链表的中间结点
|
||||||
|
|
||||||
|
#### 08_stack
|
||||||
|
* 链栈实现
|
@ -6,7 +6,8 @@
|
|||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Algo_06\\": "06_linkedlist/",
|
"Algo_06\\": "06_linkedlist/",
|
||||||
"Algo_07\\": "07_linkedlist/"
|
"Algo_07\\": "07_linkedlist/",
|
||||||
|
"Algo_08\\": "08_stack/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user