栈与数组: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