韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/

堆栈——快速入门
用数组模拟栈的使用(1)

由于堆栈是一种有序列表,当然可以使用数组的结构来存储堆栈的数据内容,堆栈数组的声明如下:
$myStack=array(); //声明
$top=-1;          //当前操作的那个元素
其中MaxSize是该堆栈的最大容量。后面将会以MaxSize-1的值MaxTop作为堆栈最大顶端指针。虽然数组结构可直接使用下标来存取数据,但在此将数组视为堆栈,故只能从堆栈的顶端进行处理。所以需要一个变量来记录目前堆栈顶端的索引值。初始值设为-1表示堆栈为空,top会随着堆栈中数据量的移动改变其指向顶端的位置。

注:一般说,现在的编程语言都提供了栈的一些基本操作,比如:入栈,出栈。php的数组,本身提供入栈array_push()和出栈array_pop和print_r()的方法,但是在此我们自己来用最基础的方法来实现。

demo1.php

<?php
	$stack=array("orange","banana");
	array_push($stack,"apple","葡萄");
	echo"<pre>";
	print_r($stack);
	echo"</pre>";

	//出栈[把栈顶的数据,取出来]

	$val=array_pop($stack);
	echo '<br/>栈顶='.$val;
	$val=array_pop($stack);
	echo '<br/>栈顶='.$val;

	echo "<pre>";
	print_r($stack);
	echo "</pre>";
?>

算法和数据结构能决定你的高度

stack2.php

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
	</head>
	<body>
		<h1>使用数组来模拟栈的各种操作</h1>
		<?php
			class MyStack{
				private $top=-1; //默认是-1,表示该栈是空的
				private $maxSize=5; //$maxSize表示栈最大容量
				private $stack=array();

				//入栈的操作
				public function push($val){
					//先判断栈是否已经满了
					if($this->top==$this->maxSize-1){ //5-1=4 0 1 2 3 4
						echo'<br/>栈满,不能添加';
						return;
					}
					$this->top++; //先加再放
					$this->stack[$this->top]=$val; //就入栈了
				}

				//出栈的操作,就是把栈顶的值取出
				public function pop(){
					//判断是否栈空
					if($this->top==-1){
						echo'<br/>栈空';
						return;
					}

					//把栈顶的值,取出
					$topVal=$this->stack[$this->top];
					$this->top--;
					return $topVal;
				}

				//显示栈的所有数据的方法
				public function showStack(){
					if($this->top==-1){
						echo'<br/>栈空';
						return;
					}

					echo'<br/>当前栈的情况是...';
					for($i=$this->top;$i>-1;$i--){ //反着显示
						echo'<br/>stack['.$i.']='.$this->stack[$i]; //从栈顶开始显示
					}
				}
			}

			$mystack=new MyStack;
			$mystack->push('西瓜');
			$mystack->push('香蕉');
			$mystack->push('橘子');
			$mystack->push('苹果');
			$mystack->push('草莓');
			$mystack->push('樱桃');
			$mystack->showStack();

			$val=$mystack->pop();
			echo'<br/>pop出栈了一个数据'.$val;
			$mystack->showStack();

			$val=$mystack->pop();
			echo'<br/>pop出栈了一个数据'.$val;
			$mystack->showStack();

			$val=$mystack->pop();
			echo'<br/>pop出栈了一个数据'.$val;
			$mystack->showStack();

			$val=$mystack->pop();
			echo'<br/>pop出栈了一个数据'.$val;
			$mystack->showStack();

			$val=$mystack->pop();
			echo'<br/>pop出栈了一个数据'.$val;
			$mystack->showStack();
		?>
	</body>
</html>

总结:首先使用环形链表,解决约瑟夫问题,然后我们分析了在php对象传递的原理,后面我们自己使用数组模拟一个栈的操作==>目标使用我们自己的栈,去完成一个综合表达式的计算。

php程序员懂算法和数据结构,很不错!

韩老师推荐的书:

Java数据结构和算法中文第二版


韩顺平_PHP程序员玩转算法公开课_学习笔记_源代码图解_PPT文档整理_目录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值