數據結構--鏈表/棧/隊列

<?php
class Node {
	public $val;
	public $next;
	
	public function __construct($val=null,$next=null){
		$this->val = $val;
		$this->next = $next;
	}
}

class LinkList {
	public $head;
	public $size;
	
	public function __construct(){
		$this->head = new Node();
		$this->size = 0;
	}
	
	public function add ($index,$value){
		if($index > $this->size){
			throw new Exception("超出鏈表長度");
		}
		$prev = $this->head;
		for($i=0;$i<$index;$i++){
			$prev = $prev->next;
		}
		$prev->next = new Node($value, $prev->next);
		$this->size++;
	}
	
	public function addFirst($value){
		$this->add(0,$value);
	}
	
	public function addLast($value){
		$this->add($this->size,$value);
	}
	
	public function edit($index,$value){
		if($index > $this->size-1){
			throw new Exception("超出鏈表範圍");
		}
		
		$prev = $this->head->next;
		for($i=0;$i<=$index;$i++){
			if($i == $index){
				$prev->val = $value;
			}
			$prev=$prev->next;
		}
	}
	
	public function findByIndex($index){
		if($index>$this->size-1){
			throw new Exception("超出鏈表範圍");
		}
		$prev = $this->head->next;
		for($i=0;$i<=$index;$i++){
			if($i == $index){
				return $prev->val;
			}
			$prev = $prev->next;
		}
		return false;
	}
	
	public function findByValue($value){
		if($index>$this->size-1){
			throw new Exception("超出鏈表範圍");
		}
		$prev = $this->head->next;
		while($prev){
			if($prev->val == $value){
				return true;
			}
			$prev = $prev->next;
		}
		return false;
	}
	
	public function delete($index){
		if($index>$this->size-1){
			throw new Exception("超出鏈表範圍");
		}
		$prev = $this->head;
		for($i=0;$i<=$index;$i++){
			if( $i==$index ){
				$prev->next = $prev->next->next;
			}
			$prev = $prev->next;
		}
	}
}

// $obj = new LinkList();
// $obj->add(0,10);
// $obj->add(1,20);
// var_dump($obj);
// $obj->add(2,30);
// var_dump($obj);

// $obj->addFirst(1);
// var_dump($obj);
// $obj->addLast(40);
// var_dump($obj);

// $obj->edit(4,50);
// var_dump($obj);

// $tmp = $obj->findByIndex(4);
// var_dump($tmp);

// $tmp = $obj->findByValue(30);
// var_dump($tmp);

// $obj->delete(4);
// var_dump($obj);

class LinkListStack extends LinkList {
	public function push($value){
		$this->addFirst($value);
	}
	
	public function pop(){
		$tmp = $this->head->next->val;
		$this->delete(0);
		return $tmp;
	}
}

// $obj = new LinkListStack();
// $obj->push(1);
// $obj->push(2);
// $obj->push(3);
// var_dump($obj);
// $tmp = $obj->pop();
// var_dump($tmp);
// var_dump($obj);

class LinkListQueue extends LinkList {
	public $tail;
	
	public function push($value){
		if( $this->head->val == null ){
			$this->tail = new Node($value);
			$this->head = $this->tail;
		}else{
			$this->tail->next = new Node($value);
			$this->tail = $this->tail->next;
		}
		$this->size++;
	}
	
	public function pop(){
		if( $this->size<=0 ){
			throw new Exception("超出鏈表範圍");
		}
		
		$val = $this->head->val;
		$this->head = $this->head->next;
		
		$this->size--;
		return $val;
	}
}

$obj = new LinkListQueue();
$obj->push(1);
$obj->push(2);
$obj->push(3);
var_dump($obj);
$tmp = $obj->pop();
var_dump($tmp);
var_dump($obj);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章