今天开始进阶自己的PHP,首先一切的编程语言都需要修炼自己的“内功”,何为程序员的“内功”,我想大概就是数据结构和算法了吧 ,毕竟是灵魂,是普通程序员到高级程序员的进阶。
不多说,直接说主题——“栈”。
什么是栈,所谓栈就是遵循“后进先出”的原则。
先进栈的最后出栈。用PHP实现栈无需考虑栈溢出的情况,相对来说比较容易实现,如下是经过学习和参考后的代码。
<?php
class Stack{
private $data=array();//定义栈
private $end=NULL;//定义栈指针,也成为栈顶。
//定义入栈操作
public function push($data){
if($this->end===NULL)
$this->end=0;
else
$this->end++;
$this->data[$this->end]=$data;
//php为弱类语言,不用考虑溢出情况
}
//出栈
public function pop(){
if(empty($this->data))
return false;
$ret=$this->data[$this->end];
array_splice($this->data,$this->end);//弹出后数组前移一位
$this->end--;
return $ret;
}
//取栈
public function get_stack(){
return $this->data;
}
}
?>
以上就是栈的基本操作,然后顺便利用写出来的栈实现了一个在线十进制转换N工具。(N小于等于10.如果需要进行十进制以上的进制转换需要增加功能)
<?php
class Stack{
private $data=array();//定义栈
private $end=NULL;//定义栈指针,也成为栈顶。
//定义入栈操作
public function push($data){
if($this->end===NULL)
$this->end=0;
else
$this->end++;
$this->data[$this->end]=$data;
//php为弱类语言,不用考虑溢出情况
}
//出栈
public function pop(){
if(empty($this->data))
return false;
$ret=$this->data[$this->end];
array_splice($this->data,$this->end);//弹出后数组前移一位
$this->end--;
return $ret;
}
//取栈
public function get_stack(){
return $this->data;
}
//定义进制转换函数
public function transform($num,$to_num){
$result=NULL;//定义结果
while($num!=0){
$num_y=$num%$to_num;
$num=$num/$to_num;
$this->push($num_y);
if($num<$to_num){
$this->push(intval($num));
$num=0;
}
}
while(!empty($this->get_stack())){
echo $this->pop();
}
return true;
}
}
$a=new Stack;
$b=10;//需要转换的十进制数
$c=5;//需要转换的进制
$result=$a->transform($b,$c);
?>
以下为运行结果为20,测试成功。
小弟只是浅谈,如果哪里不到位还希望请教。
class Stack{
private $data=array();//定义栈
private $end=NULL;//定义栈指针,也成为栈顶。
//定义入栈操作
public function push($data){
if($this->end===NULL)
$this->end=0;
else
$this->end++;
$this->data[$this->end]=$data;
//php为弱类语言,不用考虑溢出情况
}
//出栈
public function pop(){
if(empty($this->data))
return false;
$ret=$this->data[$this->end];
array_splice($this->data,$this->end);//弹出后数组前移一位
$this->end--;
return $ret;
}
//取栈
public function get_stack(){
return $this->data;
}
}
?>
以上就是栈的基本操作,然后顺便利用写出来的栈实现了一个在线十进制转换N工具。(N小于等于10.如果需要进行十进制以上的进制转换需要增加功能)
<?php
class Stack{
private $data=array();//定义栈
private $end=NULL;//定义栈指针,也成为栈顶。
//定义入栈操作
public function push($data){
if($this->end===NULL)
$this->end=0;
else
$this->end++;
$this->data[$this->end]=$data;
//php为弱类语言,不用考虑溢出情况
}
//出栈
public function pop(){
if(empty($this->data))
return false;
$ret=$this->data[$this->end];
array_splice($this->data,$this->end);//弹出后数组前移一位
$this->end--;
return $ret;
}
//取栈
public function get_stack(){
return $this->data;
}
//定义进制转换函数
public function transform($num,$to_num){
$result=NULL;//定义结果
while($num!=0){
$num_y=$num%$to_num;
$num=$num/$to_num;
$this->push($num_y);
if($num<$to_num){
$this->push(intval($num));
$num=0;
}
}
while(!empty($this->get_stack())){
echo $this->pop();
}
return true;
}
}
$a=new Stack;
$b=10;//需要转换的十进制数
$c=5;//需要转换的进制
$result=$a->transform($b,$c);
?>
以下为运行结果为20,测试成功。
小弟只是浅谈,如果哪里不到位还希望请教。