最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助

栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去就必须把上层的先拿开才行。

介绍代码:

data类:就是存放数据的类。()就是要放入栈的东西

stack类:是栈的类,整个对栈就在这个类中

主要方法:

入栈push_stack($data)检测栈是否已满,如果没满就让数据入栈。

出栈pop_stack($data)检测栈是否为空,如果不空可以出栈

读取栈顶元素top_stack()如果栈不空,返回当前栈顶部的数据。

下边是代码:

<?php
class data{
private $data; public function __construct($data){
$this->data = $data;
echo $data.":入栈成功!";
} public function getDate(){
return $this->data;
} public function __destruct(){
echo $data.":出栈!";
} } 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 "栈满了!";
else $this->stack[++$this->top] = new data($data);
}
//出栈
public function Pop_Stack(){
if($this->Empty_Stack()) echo "栈空";
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();

本帖并非原创,来源:https://blog.csdn.net/binbin1129/article/details/5667255

php 栈、 出栈、入栈的更多相关文章

  1. 8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的

    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的

  2. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  3. HDU 1022 Train Problem I[给出两个长n的串,入栈和出栈顺序,判断入栈顺序是否可以匹配出栈顺序]

    Train Problem I 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...

  4. Python模拟入栈出栈操作

    目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...

  5. 剑指Offer:面试题22——栈的压入,弹出序列(java实现)

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  6. 剑指OFFER之栈的压入、弹出序列(九度OJ1366)

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  7. 剑指offer-面试题22.栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...

  8. 写一个栈,实现出栈、入栈、求最小值,时间复杂度为O(1)

    #-*-coding:utf-8-*- ''' 需求:写一个栈,实现出栈.入栈.求最小值,时间复杂度为O(1) 思路:通过两个栈实现,一个栈stack,一个辅助栈min_stack,记录stack中的 ...

  9. 【剑指Offer学习】【面试题22:栈的压入、弹出序列】

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请推断二个序列是否为该栈的弹出顺序.假设压入栈的全部数字均不相等. 解题思路: 解决问题非常直观的想法就是建立一个辅助栈.把输入的第一个序列中的数字 ...

  10. 【剑指offer】栈的压入弹出序列,C++实现(举例)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...

随机推荐

  1. 能不能支持在线查看word,excel这样的文件?还有拖拽上传功能?

    https://forum.enhancer.io/topic/5adea0cdce69735af635fcd8 方法1. 用一个自定义窗口, 自定义窗口里放一个iframe 假设你的 word 的地 ...

  2. qt 创建及调用QT的 DLL

    先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数 ...

  3. 调用subprocess 使用logging打印日志

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Henry 17607168727@163.com import sys import lo ...

  4. ThinkPHP6.0学习之项目安装页面的开发

    在我们做一个项目的时候,如果是自己用或者是给同行用的话往往不需要做一个安装页面的,但是如果是将项目给一些不怎么会操作服务器,不怎么会程序的人用的时候,我们就需要一个安装页面来帮助他们更好的将项目安装好 ...

  5. git如何配置邮箱和用户名?

    答: 1. 配置邮箱 git config --global user.email "jello_smith@163.com" 2. 配置用户名 git config --glob ...

  6. Android自定义控件之基本图形绘制

    入门示例代码 在Android中Paint类就是画笔,Canvas 就是画布 对于画笔的大小,粗细,颜色,透明度都在paint类中设置,对于画出的成品,比如圆,方形,等在canvas类中的函数生成 入 ...

  7. oracle相关知识点

    oracle数据库,实例名和数据库是一一对应的,oracle服务端可以启动多个实例,对应于多个数据库. 数据库可以通过sqlplus / as sysdba 进入默认SID的实例, 查看当前的实例名: ...

  8. mongo 4.2版本注意事项

    参考文章: 4.0的安装 https://blog.csdn.net/qq_26896281/article/details/81203687 MongoDB4.0.0 远程连接及用户名密码认证登陆配 ...

  9. dbtreeview

    http://www.delphipages.com/comp/dynamic_dbtreeview-6302.html https://files.cnblogs.com/files/jijm123 ...

  10. Spring Boot连接DB2查询结果时报错“java.lang.AbstractMethodError: com.ibm.db2.jcc.t4.b.isValid(I)Z”的解决办法

    关于在maven项目中如何添加DB2的坐标的详细,见:https://www.cnblogs.com/zifeiy/p/7918554.html Spring Boot项目中的application. ...