php栈的定义及入栈出栈的实现 算法
栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去就必须把上层的先拿开才行。
介绍代码:
data类:就是存放数据的类。()就是要放入栈的东西
stack类:是栈的类,整个对栈就在这个类中
主要方法:
入栈push_stack($data)检测栈是否已满,如果没满就让数据入栈。
出栈pop_stack($data)检测栈是否为空,如果不空可以出栈
读取栈顶元素top_stack()如果栈不空,返回当前栈顶部的数据。
下边是代码:
<?php
/**
* Create On 2010-6-12
* Author Been
* QQ:281443751
* Email:binbin1129@126.com
**/
class data{
//数据
private $data; public function __construct($data){
$this->data=$data;
echo $data.":哥入栈了!<br>";
} public function getData(){
return $this->data;
}
public function __destruct(){
echo $this->data.":哥走了!<br>";
}
}
class stack{
private $size;
private $top;
private $stack=array();
public function __construct($size){
$this->Init_Stack($size);
}
//初始化栈
public function Init_Stack($size){
$this->size=$size;
$this->top=-1;
}
//判断栈是否为空
public function Empty_Stack(){
if($this->top==-1)return 1;
else return 0;
}
//判断栈是否已满
public function Full_Stack(){
if($this->top<$this->size-1)return 0;
else return 1;
}
//入栈
public function Push_Stack($data){
if($this->Full_Stack())echo "栈满了<br />";
else $this->stack[++$this->top]=new data($data);
}
//出栈
public function Pop_Stack(){
if($this->Empty_Stack())echo "栈空着呢<br />";
else unset($this->stack[$this->top--]);
}
//读取栈顶元素
public function Top_Stack(){
return $this->Empty_Stack()?"栈空无数据!":$this->stack[$this->top]->getData();
} }
$stack=new stack(4);
$stack->Pop_Stack();
$stack->Push_Stack("aa");
$stack->Push_Stack("aa1");
$stack->Pop_Stack("aa1");
$stack->Push_Stack("aa2");
$stack->Push_Stack("aa3");
$stack->Push_Stack("aa4");
echo $stack->Top_Stack(),'<br />';
$stack->Push_Stack("aa5");
$stack->Push_Stack("aa6");
$stack->Pop_Stack();
$stack->Pop_Stack();
$stack->Pop_Stack();
$stack->Pop_Stack();
$stack->Pop_Stack();
$stack->Pop_Stack();
php栈的定义及入栈出栈的实现 算法的更多相关文章
- c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)
//c语言描述 将2进制转化为10进制 #include <stdio.h> #include <stdlib.h> #include <math.h> #defi ...
- 剑指Offer20 栈的压入弹出序列是否正确
/************************************************************************* > File Name: 20_IsPopO ...
- 剑指offer-面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
技术之瞳 阿里巴巴技术笔试心得习题2.65: 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D) A.DEFCBA B.DCEFBA C.FEDCBA D.FECDBA E.ABCDEF ...
- 牛客网剑指offer第21题——判断出栈序列是否是入栈序列
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 出栈顺序 与 卡特兰数(Catalan)的关系
一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3 ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...
- pat--7-11 出栈序列的合法性(25 分)
7-11 出栈序列的合法性(25 分) 给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, ..., N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5 ...
- HDU 4283 You Are the One(区间DP(最优出栈顺序))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283 题目大意:有一群屌丝,每个屌丝有个屌丝值,如果他第K个上场,屌丝值就为a[i]*(k-1),通过 ...
随机推荐
- 编写Java程序,使用循环结构打印出九九乘法表
编写Java程序,使用循环结构打印出九九乘法表 效果如下: 实现代码: public class Multiplication99 { public static void main(String[] ...
- 深入 Laravel 内核之观察者模式
装饰模式核心内容: 观察者模式又称为发布订阅模式,定义了对象间的一对多依赖关系,当一个对象状态发生改变时,其相关依赖的其他对象都能接收到通知: 观察者模式的核心在于目标(Subject)和观察者(Ob ...
- awk 内置变量
awk 内置变量 FS 设置输入域分隔符,等价于命令行 -F选项 OFS 输出域分隔符 NF 浏览记录的域的个数NR 已读的记录数RS 控制记录分隔符 ORS 输出记录分隔符 substr 截取指定的 ...
- 年功序列c++游戏
题目描述 在虚拟国度里多了很多 Virtual oier,为了树立对后辈的威信,从第 11 个 Virtual oier 开始的 oier 们搞起了年功序列的制度. 虚拟国度的创始人 oier Cht ...
- laravel源码分析-队列Queue
laravel 源码分析具体注释见 https://github.com/FX-Max/source-analysis-laravel 前言 队列 (Queue) 是 laravel 中比较常用的一个 ...
- java 线程 总结
1.前言 (1)线程的上一级是进程,进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的. (2)线程与进程相似,但线程是一个比进程更小的执行单位,也被称为轻量级进程.一个进程在其执行 ...
- 拓展 Array 方法
为 Array 对象扩展了一个迭代器之后,就可以利用这个法代器进一步拓展 Array 的方法,使其能够完成更多的实用功能. Array.prototype.each = function( f ) { ...
- Android官方文档翻译 三 1.1Creating an Android Project
Creating an Android Project 创建一个Android项目 An Android project contains all the files that comprise th ...
- Docsify使用指南(打造最快捷、最轻量级的个人&团队文档)
前言 网上关于动态文档生成工具有很多如:Docsify. VuePress.Docute .Hexo这些都是一些非常优秀的文档生成工具,本章主要介绍如何快速使用Docsify搭建一个快捷.轻量级的个人 ...
- android ndk下没有pthread_yield,好在std::this_thread::yield()可以达到同样的效果
一个多线程的算法中,发现线程利用率只有47%左右,大量的处理时间因为usleep(500)而导致线程睡眠: 性能始终上不去. 把usleep(500)修改为std::this_thread::yiel ...