画江湖之数据结构 [第二话:队列和栈] 栈

队列和栈

1 栈简介

概括:

  • 栈(stack),它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。允许操作的一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称为压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素被称作出栈或退栈,就是把栈顶元素删除掉,使其相邻的下个元素成为新的栈顶元素。
    file

完整代码块

<?php

class Node{
    public $data = null;
    public $prev = null;

    public function __construct($data){
        $this->data = $data;
    }
}

class stack{
    private $top = null;
    public $size = 0;

    public function push($data)
    {
        if($this->top == null){
            $this->top = new Node($data);
        }else{
            $n = new Node($data);
            $n->prev = $this->top;
            $this->top = $n;
        }
        $this->size++;
    }

    public function pop()
    {
        $data = $this->top->data;
        $this->top = $this->top->prev;
        $this->size--;
        return $data;
    }

    public function getAll(){
        $result = [];
        while($this->top){
            $result[]=$this->top->data;
            $this->top = $this->top->prev;
        }
        return $result;
    }

}

// $s = new stack();
// $s->push("aaaa");
// $s->push("bbb");
// $s->push("dddddd");
// $s->push("cc");
// $s->push("eeee");
// echo '<pre>';
// echo $s->pop();

// var_dump($s->getAll());

//数组模拟栈

// $stack = [];
// array_push($stack,"aaa");
// array_push($stack,"bbb");
// array_push($stack,"ccc");
// array_push($stack,"ddd");
// array_push($stack,"eee");
// echo array_pop($stack);
// echo array_pop($stack);

2 分析代码块 具体分析到代码注释哦 ~ 栈是先进后出的结构哦

先定义一个节点对象

class Node{
    public $data = null;
    public $prev = null;

    public function __construct($data){
        $this->data = $data;
    }
}

压入栈

private $top = null;//尾部
    public $size = 0;//栈的大小

    public function push($data)
    {
        if($this->top == null){//如果还没有栈进去
            $this->top = new Node($data);//就把压入生成的栈给到尾部
        }
        //如果已经存在栈的话
        else{
            $n = new Node($data);//先定义一个节点对象
            $n->prev = $this->top;//把尾部的栈变成当前插入的栈的上一个
            $this->top = $n;//把尾部栈为当前栈
        }
        $this->size++;//栈的大小+++
    }
     $s = new stack();
     $s->push("aaaa");
     $s->push("bbb");
     $s->push("dddddd");
     $s->push("cc");
     $s->push("eeee");

出栈

public function pop()
    {
        $data = $this->top->data;//直接输出尾部的栈
        $this->top = $this->top->prev;//把尾部的栈的拉到上一个节点
        $this->size--;//栈的大小--
        return $data;//返回栈的数值
    }
    // echo $s->pop();

3 利用php的自带的数组实现栈

代码段 和分析代码~

//数组模拟栈
 $stack = [];
 array_push($stack,"aaa");//插入到栈
 array_push($stack,"bbb");
 array_push($stack,"ccc");
 array_push($stack,"ddd");
 array_push($stack,"eee");
 echo array_pop($stack);//从数组尾部出来一个栈
 echo array_pop($stack);
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 5年前 加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1
guanhui07

栈, 压子弹,小时候加煤球
队列,饭堂,银行 排队 :joy:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!