栈与数组:php数组也有压入压出的方法array_push 和array_shift。是不是数组就是栈数据结构?或者明明数组就可完成,为何还要栈

解答:去全国各地都可以用双腿走到,为何选择火车飞机?数组就是腿,栈就是火车飞机。首先不相等,其次栈可以让我们集中精力去解决更加核心的业务需求。

简单顺序栈实现

class Data{private $data; public function __construct($data){$this->data=$data;         } public function getData(){return $this->data;}
} class Stack{private $size;private $top;//栈顶的标识private $stack=array();public function __construct($size){return $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;elsereturn 0;}public function Full_Stack(){if($this->top<($this->size-1)) return 0;elsereturn 1;}
//入栈
//本来打算直接算入Data对象,后来试验了下好像有个小问题,就是单例的问题吧,看来还是需要每次都新建一个
/**
*@param $data class Data 的成员
*
**/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 "栈空无数据!";elseunset($this->stack[$this->top--]);}//读取栈顶元素public function Top_Stack(){return $this->Empty_Stack()?"栈空无数据":$this->stack[$this->top]->getData();/*return $this->Empty_Stack()?"栈空无数据!":$this->stack[$this->top]->getData(); */}
}//测试
//$data1 =new Data('hello');
$data1='mini';
$stock =new Stack(5);
$stock->Push_Stack('jack');
$stock->Push_Stack($data1);
$stock->Push_Stack($data1);
$stock->Push_Stack($data1);
$stock->Empty_Stack();
$stock->Pop_Stack();
$stock->Pop_Stack();
$stock->Pop_Stack();
//$stock->Pop_Stack();
$stock->Push_Stack('');
//$stock->
echo $stock->Top_Stack();
?>

关于循环链表和双向链表,没有再写。顺序存储还是比较好理解。

补充关于栈的软件应用:Word,PS,浏览器常用的撤销或者后退

补充栈拥有线性表的所有特性:上面是可以补充进来几个函数:DestroyStack(销毁)ClearStack(清空)StackLength(长度)。所有函数只是一次演练,熟悉下思路,下次写任何业务逻辑,符合需要的话可以直接使用该思想

转载于:https://blog.51cto.com/10725691/1948667

PHP实现简单顺序栈相关推荐

  1. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  2. 编写一个类,实现简单的栈(提示:用链表结构实现)。数据的操作按先进后出(FILO)的顺序。

    编写一个类,实现简单的栈(提示:用链表结构实现).数据的操作按先进后出(FILO)的顺序. 提示: 成员函数为 void queue::put(int item); //将数据item插入到栈中 in ...

  3. 简单用数组模拟顺序栈(c++)

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  4. C语言顺序栈简单实现

    代码实现: /*顺序栈:实现接口:创建栈判栈空判栈满返回栈顶元素入栈出栈 */ #include <stdio.h> #include <stdlib.h>#define ST ...

  5. python 顺序栈及基本操作

    顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数 ...

  6. java顺序栈和链栈_Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  7. c语言栈的实现以及操作_C++语言实现顺序栈

    在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以看看之前的文章,下面是链接C语言实现顺序栈在这 ...

  8. 数据结构 :: 顺序栈与链式栈的设计与实现

    数据结构 :: 双链表的设计与实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 前言:本文将对顺序栈与链式栈进行设计与实现!其 ...

  9. java栈实现--顺序栈

    顺序栈 一.实现过程 1.提供栈接口:IStack 2.提供顺序栈的实现:ShunxuStack 3.提供判空(isEmpty).栈深度(length)等计算方法. 4.提供清空栈的方法:clear( ...

最新文章

  1. java中strictfp关键字,java strictfp关键字用法大全详解
  2. 通过 Intent 传递类对象
  3. linux内存使用监控,如何利用Bash脚本监控Linux的内存使用情况
  4. 【ARM】ARM其它指令
  5. iOS常见问题(5)
  6. Java内存管理:深入Java内存区域
  7. 报错 ValueError: too many values to unpack (expected 2)
  8. Typora+PicGo+github搭建免费稳定图床写博客如行云流水(mac+window)
  9. matlab全景图素材,科学网—meshlab查看360度全景图像 - 王琳的博文
  10. c 复杂的前置后置面试题_练一练!3道经典嵌入式C 面试题,答案在文末
  11. android删除未知字符,如何删除Android Studio中所有配置的未使用字符串资源?
  12. Python-Cartopy制图学习02-中国2010年5月干旱情况空间制图
  13. 有没有一种让人欲罢不能的学习方法?
  14. 你一定没见过的windows操作系统——windows93
  15. Paper reading (三十二):Personalized Nutrition by Prediction of Glycemic Responses(Results)
  16. 深圳的“专精特新”实力如何?
  17. git lfs 使用
  18. 解决STM32F0/F1内部FLASH写操作导致中断程序无法响应的问题
  19. 什么是Visa payWave
  20. p标签和超链接的认识

热门文章

  1. Spring in Action 4 读书笔记之使用标签创建 AOP
  2. Java程序员从笨鸟到菜鸟全部博客目录
  3. Java之美[从菜鸟到高手演变]系列之博文阅读导航
  4. Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)
  5. Python中如何写控制台进度条的整理
  6. 压缩感知(II) A Compressed Sense of Compressive Sensing (II)
  7. iOS开发笔记 - 界面调试神器Reveal
  8. ServiceStack.Redis常用操作 - 事务、并发锁
  9. mysql性能监控指标及分析
  10. 关于Static控件背景透明时文本覆盖重影的问题