data=$data;
$this->next=null;
}
}
class LinkStack{
private $top;
//用于指向棧頂結(jié)點(diǎn),也就是第一個(gè)結(jié)點(diǎn)。相對(duì)于頭指針.此時(shí)或許有人有疑問(wèn)了,你之前不是說(shuō)this代表頭指針嗎?為什么現(xiàn)在有變成top為頭指針了呢?
// 答:
// 之所以之前this代表頭指針,是因?yàn)樗赶蛄艘粋€(gè)和其它結(jié)點(diǎn)一樣的結(jié)點(diǎn)——頭結(jié)點(diǎn)(實(shí)例化后的對(duì)象即為頭結(jié)點(diǎn),因?yàn)槠涑跏蓟臄?shù)據(jù)域自始至終都為null)。而此處的this并沒(méi)有指向和其它結(jié)點(diǎn)一樣的結(jié)點(diǎn)(即頭結(jié)點(diǎn)),也不指向第一個(gè)結(jié)點(diǎn),另外,因?yàn)閷?duì)沒(méi)有頭結(jié)點(diǎn)的鏈表的操作(比如清空鏈表),需要判斷當(dāng)前的指針是否為空,而此時(shí)若是this指向第一個(gè)結(jié)點(diǎn),那么這個(gè)鏈表將永遠(yuǎn)不會(huì)為空(因?yàn)閠his代表兩個(gè)一個(gè)實(shí)例化的對(duì)象,始終是一個(gè)內(nèi)存地址)。所以此處的this不是且不能是頭指針。因而需要單獨(dú)指定一個(gè)成員屬性top,用于指向第一個(gè)結(jié)點(diǎn),因?yàn)槠淇梢詾閚ull,所以top就是我們定義的頭指針。此處的關(guān)鍵點(diǎn)在于,是否在類(lèi)中要聲明和結(jié)點(diǎn)類(lèi)(即LNode)一樣的成員屬性,若一樣則就是包含頭結(jié)點(diǎn)的鏈?zhǔn)浇Y(jié)構(gòu),若是僅包含一個(gè)指針域的屬性則就是不包含頭結(jié)點(diǎn)的鏈?zhǔn)浇Y(jié)構(gòu)。由此,我們可以知道,關(guān)于一些邊界判斷的條件,是由我們編程者自己來(lái)決定的,不需要拘泥于形式,只要滿(mǎn)足操作要求即可。
private $length;//用于指定鏈棧的長(zhǎng)度
public function __construct(){
$this->top=null;
$this->length=0;
}
//銷(xiāo)毀鏈棧
public function DestroyStack(){
while($this->top){
$p=$this->top->next;
unset($this->top);
$this->top=$p;
}
$this->length=0;
}
//清空鏈棧
public function ClearStack(){
$p=$this->top;
while($p){
$q=$p->next;
unset($p);
$p=$q;
}
$this->top=null;
$this->length=0;
}
//鏈棧是否為空
public function StackEmpty(){
if($this->top==null){
return 'Null';
}else{
return 'NO Null';
}
}
//鏈棧的長(zhǎng)度
public function StackLength(){
return $this->length;
}
//取得棧頂?shù)脑? public function GetTop(){
if($this->top!=null){
return $this->top->data;
}
}
//插入新的棧頂結(jié)點(diǎn)
public function Push(){
$node=new LNode(mt_rand(10,20));
$node->next=$this->top;
$this->top=$node;
$this->length++;
}
//刪除棧頂元素
public function Pop(){
if($this->top!=null){
$p=$this->top->next;
unset($this->top);
$this->top=$p;
$this->length--;
}
}
//遍歷棧元素
public function StackTraverse(){
$arr=array();
if($this->top !=null){
$p=$this->top;
while($p){
$arr[]=$p->data;
$p=$p->next;
}
}
return $arr;
}
}
網(wǎng)頁(yè)題目:數(shù)據(jù)結(jié)構(gòu)之?!?zhǔn)酱鎯?chǔ)結(jié)構(gòu)(php代碼實(shí)現(xiàn))
網(wǎng)站URL:
http://weahome.cn/article/jpjeji.html