一、栈的定义及知识

  1.定义:栈又称为栈或者堆叠,是计算机科学中的一种特殊的串列形式的抽象数据类型,特殊之处在于只允许在链表或者数组的一端(堆栈顶端指针,又称 "top")加入数据push(压栈)和输出数据pop(弹栈),另外栈也可以使用一维数组和链表来实现。

  2.栈的特点:

    a.先进后出(后进先出),也就是说,我们只能在栈顶端push(压栈)加入数据,也只能在栈顶端pop(弹栈)删除数据;

    b.栈除了top(栈顶)和base(栈底)之外,其他的每个元素都有一个前驱和后继;

二、php简单实现栈结构

<?php
class HeapStack{
private $stackArr = array();
private $stackMaxTop = 10; // 栈顶最大值(用于控制栈长度,是否栈满)
private $top = -1; // 栈顶(会随着push或pop的操作而变化)
private $out; /**
* 入栈
*
*/
public function pushValue($value='')
{
if(empty($value))
return '压入的值不能为空'; if($this->top == $this->stackMaxTop)
return '栈内已满';
array_push($this->stackArr, $value);
++$this->top;
return '入栈成功,栈顶值:'.$this->top;
} /**
* 出栈
*
*/
public function popValue()
{
if($this->top == -1)
return '栈内没有数据'; $this->out = array_pop($this->stackArr);
--$this->top;
return '出栈成功,当前栈顶值:'.$this->top.'出栈值:'.$this->out;
} /**
* 获取栈内信息
*/
public function getSatck()
{
return $this->stackArr;
} public function __destruct()
{
echo 'over ';
}
} $stack = new HeapStack();
echo $stack->pushValue('stackValue')."\n";
echo $stack->pushValue('stackValue2')."\n";
var_dump($stack->getSatck());
echo $stack->popValue()."\n";
var_dump($stack->getSatck());

php 实现栈结构的更多相关文章

  1. 数据结构笔记--栈的总结及java数组实现简单栈结构

    杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...

  2. javascript使用栈结构将中缀表达式转换为后缀表达式并计算值

    1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达 ...

  3. javascript中的栈结构

    1.栈的定义 栈是一种和列表类似的数据结构,可以用它来解决很多的编程问题,栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 栈是一种特殊的列表,站内的元素只 ...

  4. 用C++类模板实现栈结构出现的问题以及思考

    C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题.这里主要说说类模板   类模板的定义:   template<TYPENAME Type>   clas ...

  5. 用Java实现栈结构

    栈是一种先进后出的数据结构,出栈入栈都是操作的栈顶元素,下面是利用Java语言实现的一个简单的栈结构 class MyStack{ private int size;//栈大小 private Obj ...

  6. 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)

    第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...

  7. Java使用泛型实现栈结构

    泛型是Java SE5.0的重要特性,使用泛型编程可以使代码获得最大的重用.由于在使用泛型时要指明泛型的具体类型,这样就避免了类型转换.本实例将使用泛型来实现一个栈结构,并对其进行测试. 思路分析:既 ...

  8. Java之链表实现栈结构

    package com.wzlove.stack; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...

  9. js实现栈结构

    实现栈结构 //创建栈 function Stack (){ let items = [] this.push = function(element){ items.push(element) } t ...

随机推荐

  1. 用JAVA发送一个XML格式的HTTP请求

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStr ...

  2. 【代码审计】BootCMS v1.1.3 文件上传漏洞分析

      0x00 环境准备 BootCMS官网:http://www.kilofox.net 网站源码版本:BootCMS v1.1.3  发布日期:2016年10月17日 程序源码下载:http://w ...

  3. Splash evaljs() 方法

    evaljs() 方法可以执行 JavaScript 代码并返回最后一条 JavaScript 语句的返回结果 function main(splash, args) splash:go(" ...

  4. React Native(十)——TextInput一点小结

    11.24(后续的道路会更加漫长,一点一点总结上去吧~): 从昨天开始接触Mac,实在让自己有点“奔溃”的赶脚……老大说,“不要紧,多接触接触就好了.” 于是,我就开始了跟Mac死磕到底的准备……就先 ...

  5. 32位win7+vs2008编译mysql 5.6.22源码并安装

    以下这部分安装说明是来自http://www.2cto.com/database/201407/316681.html的win7+vs2010源码编译mysql,文章最后会说明用vs2008编译遇见的 ...

  6. myeclipse环境优化

    在项目右键打开Project > Properties > BUILDERS,打开source的tab,选择你的目录,删之~重启myeclipse 以下转载自百度知道 优化一下,下面内容都 ...

  7. Thinkphp 去除bom头 解决模版空输出问题

    <?php if (isset($_GET['dir'])){ //config the basedir $basedir=$_GET['dir']; }else{ $basedir = '.' ...

  8. 【转】C/C++函数调用过程分析

    转自:here 这里以一个简单的C语言代码为例,来分析函数调用过程 代码: #include <stdio.h> int func(int param1 ,int param2,int p ...

  9. QT开发之旅四邮件发送工具

    终于有了一个晚上安静的写写程序,最近一直忙着公司商务上的事情,一直想用QT实现一个调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法 ...

  10. 【Java基础】System的arraycopy方法拷贝数组

    一.在System类中查看方法的定义 二.示例 public class SystemArrayCopyTest { /** * @Description: System的arrayCopy方法测试 ...