首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 單向鏈表資料結構實作:節點定義、建立、遍歷與 Java 對照

     編輯:PHP 綜合知識

鏈表基本概念

  • 有序列表,記憶體分散儲存
  • 每節點含資料與指向下一節點的引用
  • 解決:約瑟夫問題、排序、搜尋、廣義表
  • 類型:單向、雙向、環狀

PHP 記憶體模型補充

  • 基本型別 → Stack(棧區)
  • 物件、陣列等複合型別 → Heap(堆區)
  • PHP 變數實際存的是指向堆區物件的引用

Hero 節點類別

class Hero {
    public $no;
    public $name;
    public $nickname;
    public $next = null;

    public function __construct($no='', $name='', $nickname='') {
        $this->no = $no;
        $this->name = $name;
        $this->nickname = $nickname;
    }
}

建立鏈表

$head = new Hero(); // 僅作頭節點,不存資料

$hero1 = new Hero(1, "宋江", "及時雨");
$head->next = $hero1;

$hero2 = new Hero(2, "盧俊義", "玉麒麟");
$hero1->next = $hero2;

// 可繼續串接...

遍歷鏈表

function showHeros($head) {
    $cur = $head;
    while ($cur->next !== null) {
        echo "姓名:{$cur->next->name}
"; $cur = $cur->next; } } showHeros($head);

完整可執行代碼

no=$no; $this->name=$name; $this->nickname=$nickname;
    }
}

class LinkListDemo {
    public static function main() {
        $head = new Hero();
        $hero1 = new Hero(1, "宋江", "及時雨");
        $head->next = $hero1;
        $hero2 = new Hero(2, "盧俊義", "玉麒麟");
        $hero1->next = $hero2;
        self::showHeros($head);
    }
    public static function showHeros($head) {
        $cur = $head;
        while ($cur->next !== null) {
            echo "姓名:{$cur->next->name}
"; $cur = $cur->next; } } } LinkListDemo::main(); ?>

Java 版本對照

class Hero {
    public int no; public String name, nickname; public Hero next = null;
    public Hero(int no, String name, String nickname) {
        this.no=no; this.name=name; this.nickname=nickname;
    }
}
public class LinkListDemo {
    public static void main(String[] args) {
        Hero head = new Hero();
        head.next = new Hero(1, "宋江", "及時雨");
        head.next.next = new Hero(2, "盧俊義", "玉麒麟");
        showHeros(head);
    }
    static void showHeros(Hero head) {
        for (Hero cur = head; cur.next != null; cur = cur.next) {
            System.out.println("姓名:" + cur.next.name);
        }
    }
}

PHP 實作補充

  • 插入節點:調整前後節點 next 指向
  • 刪除節點:前節點 next 指向被刪節點的 next,PHP GC 自動回收
  • 反轉鏈表:三指標法(prev、curr、next)迭代調整指向
  • 檢測環:快慢指標法(Floyd 判圈算法)

掌握鏈表指標操作,是理解樹、圖等進階資料結構的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved