PHP实现简单顺序栈

简介:

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

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


简单顺序栈实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;
         else
             return  0;
     }
 
     public  function  Full_Stack(){
         if ( $this ->top<( $this ->size-1))  return  0;
         else
             return  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  "栈空无数据!" ;
         else
             unset( $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(长度)。所有函数只是一次演练,熟悉下思路,下次写任何业务逻辑,符合需要的话可以直接使用该思想


本文转自 jackdongting 51CTO博客,原文链接:http://blog.51cto.com/10725691/1948667


相关文章
|
存储 Java PHP
PHP的堆和栈使用场景是什么?底层原理是什么?
PHP的堆和栈使用场景是什么?底层原理是什么?
123 0
|
存储 Java PHP
PHP的堆和栈是干什么的?
PHP的堆和栈是干什么的?
155 0
|
存储 PHP
PHP的执行栈是干什么的?底层原理是什么?
PHP的执行栈是干什么的?底层原理是什么?
|
PHP
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
188 0
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
359 0
|
消息中间件 PHP Windows
PHP实现php-amqplib/php-amqplib实例RabbitMq
PHP实现php-amqplib/php-amqplib实例RabbitMq
123 0
|
XML 移动开发 JSON
PHP使用yansongda/pay实现支付宝和微信的支付
PHP使用yansongda/pay实现支付宝和微信的支付
847 0
|
NoSQL PHP Redis
PHP结合redis实现点赞功能
PHP结合redis实现点赞功能
107 0
|
消息中间件 缓存 JSON
PHP实现think-queue介绍
PHP实现think-queue介绍
329 0
|
PHP
php实现定时任务hellogerard/jobby
php实现定时任务hellogerard/jobby
113 0