亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP雙向鏈表定義與用法示例php技巧

2020-03-22 20:07:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP雙向鏈表定義與用法,涉及php使用雙向鏈表類封裝雙向鏈表定義、讀取、刪除、插入等相關操作技巧,需要的朋友可以參考下

本文實例講述了PHP雙向鏈表定義與用法。分享給大家供大家參考,具體如下:

由于需要對一組數據多次進行移動操作,所以寫個雙向鏈表。但對php實在不熟悉,雖然測試各個方法沒啥問題,就是不知道php語言深層的這些指針和unset有什么注意的地方,貼出來讓大家教育吧。效率沒測試....求諒解~

 ?php * **雙向鏈表 * @author zhiyuan12@ * 鏈表元素結點類html' target='_blank'>class Node_Element { public $pre = NULL; // 前驅 public $next = NULL; // 后繼 public $key = NULL; // 元素鍵值 public $data = NULL; // 結點值 function __Construct($key, $data) { $this- key = $key; $this- data = $data; * 雙向鏈表類class DoubleLinkedList { private $head; // 頭指針 private $tail; // 尾指針 private $current; // 當前指針 private $len; // 鏈表長度 function __Construct() { $this- head = self::_getNode ( null, null ); $this- curelement = $this- head; $this- tail = $this- head; $len = 0; * @ desc: 讀取鏈表全部結點 public function readAll() { $tmp = $this- head; while ( $tmp- next !== null ) { $tmp = $tmp- next; var_dump ( $tmp- key, $tmp- data ); public function move($pos1, $pos2) { $pos1Node = $this- findPosition ( $pos1 ); $pos2Node = $this- findPosition ( $pos2 ); if ($pos1Node !== null $pos2Node !== null) { $tmpKey = $pos1Node-  $tmpData = $pos1Node- data; $pos1Node- key = $pos2Node-  $pos1Node- data = $pos2Node- data; $pos2Node- key = $tmpKey; $pos2Node- data = $tmpData; return true; return false; * @ desc: 在指定關鍵詞刪除結點 * @param : $key * 指定位置的鏈表元素key public function delete($key) { $pos = $this- find ( $key ); if ($pos !== null) { $tmp = $pos; $last = null; $first = true; while ( $tmp- next !== null $tmp- next- key === $key ) { $tmp = $tmp- next; if (! $first) { $this- delNode ( $last ); } else { $first = false; $last = $tmp; if ($tmp- next !== null) { $pos- pre- next = $tmp- next; $tmp- next- pre = $pos-  } else { $pos- pre- next = null; $this- delNode ( $pos ); $this- delNode ( $tmp ); * @ desc: 在指定位置刪除結點 * @param : $key * 指定位置的鏈表元素key public function deletePosition($pos) { $tmp = $this- findPosition ( $pos ); if ($tmp === null) { return true; if ($tmp === $this- getTail ()) { $tmp- pre- next = null; $this- delNode ( $tmp ); return true; $tmp- pre- next = $tmp- next; $tmp- next- pre = $tmp-  $this- delNode ( $tmp ); * @ desc: 在指定鍵值之前插入結點 * @param : $key * //指定位置的鏈表元素key * @param : $data * //要插入的鏈表元素數據 * @param : $flag * //是否順序查找位置進行插入 public function insert($key, $data, $flag = true) { $newNode = self::_getNode ( $key, $data ); $tmp = $this- find ( $key, $flag ); if ($tmp !== null) { $newNode- pre = $tmp-  $newNode- next = $tmp; $tmp- pre = $newNode; $newNode- pre- next = $newNode; } else { $newNode- pre = $this- tail; $this- tail- next = $newNode; $this- tail = $newNode; $this- len ++; * @ desc: 在指定位置之前插入結點 * @param : $pos * 指定插入鏈表的位置 * @param : $key * 指定位置的鏈表元素key * @param : $data * 要插入的鏈表元素數據 public function insertPosition($pos, $key, $data) { $newNode = self::_getNode ( $key, $data ); $tmp = $this- findPosition ( $pos ); if ($tmp !== null) { $newNode- pre = $tmp-  $newNode- next = $tmp; $tmp- pre = $newNode; $newNode- pre- next = $newNode; } else { $newNode- pre = $this- tail; $this- tail- next = $newNode; $this- tail = $newNode; $this- len ++; return true; * @ desc: 根據key值查詢指定位置數據 * @param : $key * //指定位置的鏈表元素key * @param : $flag * //是否順序查找 public function find($key, $flag = true) { if ($flag) { $tmp = $this- head; while ( $tmp- next !== null ) { $tmp = $tmp- next; if ($tmp- key === $key) { return $tmp; } else { $tmp = $this- getTail (); while ( $tmp- pre !== null ) { if ($tmp- key === $key) { return $tmp; $tmp = $tmp-  return null; * @ desc: 根據位置查詢指定位置數據 * @param : $pos * //指定位置的鏈表元素key public function findPosition($pos) { if ($pos = 0 || $pos $this- len) return null; if ($pos ($this- len / 2 + 1)) { $tmp = $this- head; $count = 0; while ( $tmp- next !== null ) { $tmp = $tmp- next; $count ++; if ($count === $pos) { return $tmp; } else { $tmp = $this- tail; $pos = $this- len - $pos + 1; $count = 1; while ( $tmp- pre !== null ) { if ($count === $pos) { return $tmp; $tmp = $tmp-  $count ++; return null; * @ desc: 返回鏈表頭節點 public function getHead() { return $this- head- next; * @ desc: 返回鏈表尾節點 public function getTail() { return $this- tail; * @ desc: 查詢鏈表節點個數 public function getLength() { return $this-  private static function _getNode($key, $data) { $newNode = new Node_Element ( $key, $data ); if ($newNode === null) { echo new node fail!  return $newNode; private function delNode($node) { unset ( $node ); $this- len --;$myList = new DoubleLinkedList ();$myList- insert ( 1, test1 );$myList- insert ( 2, test2 );$myList- insert ( 2b , test2-b );$myList- insert ( 2, test2-c );$myList- insert ( 3, test3 );$myList- insertPosition ( 5, t , testt );$myList- readAll ();echo +++ $myList- deletePosition(0);$myList- readAll ();echo ... . $myList- getLength ();var_dump ( $myList- findPosition ( 3 )- data );? 

運行結果:

int(1)string(5) test1 int(2)string(7) test2-c int(2)string(5) test2 string(2) 2b string(7) test2-b string(1) t string(5) testt int(3)string(5) test3 +++int(1)string(5) test1 int(2)string(7) test2-c int(2)string(5) test2 string(2) 2b string(7) test2-b string(1) t string(5) testt int(3)string(5) test3 ...6string(5) test2 

您可能感興趣的文章:

PHP運用foreach神奇的轉換數組(實例講解)php實例

基于php雙引號中訪問數組元素報錯的解決方法php技巧

php 刪除一維數組中某一個值元素的操作方法php技巧

以上就是PHP雙向鏈表定義與用法示例php技巧的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69av视频在线播放| 热re91久久精品国99热蜜臀| 精品福利在线看| 欧美日韩国产限制| 日本午夜精品理论片a级appf发布| 性欧美xxxx视频在线观看| 亚洲美女黄色片| 国产亚洲精品va在线观看| 精品亚洲一区二区三区在线播放| 日韩av在线网页| 亚洲欧美日韩直播| 日韩精品极品视频免费观看| 日韩久久精品成人| 国产一区欧美二区三区| 日韩av高清不卡| 日本aⅴ大伊香蕉精品视频| 亚洲综合中文字幕在线观看| 日韩美女视频在线观看| www.日韩免费| 日韩在线视频中文字幕| 不用播放器成人网| 欧美日韩性视频| 日韩不卡在线观看| 日韩在线观看精品| 日本成人精品在线| 欧美日韩免费在线观看| 欧美激情网站在线观看| 亚洲精品国产福利| 亚洲国产高潮在线观看| 狠狠色噜噜狠狠狠狠97| 欧美激情亚洲精品| 久久久999国产精品| 国产精品久久久久久久久久久久久久| 欧美日韩中文在线观看| 中文字幕在线精品| 日韩美女视频免费在线观看| 91地址最新发布| 日韩大片免费观看视频播放| 国产精品日韩在线播放| 日韩av一卡二卡| 日韩日本欧美亚洲| 精品亚洲一区二区三区| 国产精品久久久久久一区二区| 精品久久久久久国产91| 国产精品1234| www欧美xxxx| 国产成人免费av电影| 久久综合免费视频影院| 国产精品久久久久久久美男| 欧美性猛交xxxx乱大交3| 亚洲香蕉成人av网站在线观看| 国产精品入口夜色视频大尺度| 中日韩美女免费视频网址在线观看| 成人春色激情网| 欧美电影在线观看网站| 最近2019中文字幕大全第二页| 91久久在线视频| 亚洲va欧美va国产综合久久| 国产精品99久久久久久白浆小说| 午夜精品视频在线| 国产精品第七十二页| 亚洲自拍高清视频网站| 日韩欧美在线国产| 国产成人精品在线观看| 亚洲成人免费在线视频| 亚洲成人精品视频| 91精品国产自产在线观看永久| 国产精品日本精品| 亚洲欧洲在线看| 欧美午夜激情在线| 日韩精品福利网站| 九九九热精品免费视频观看网站| 亚洲一区二区精品| 亚洲a在线观看| 97视频人免费观看| 日韩欧美精品在线观看| 欧美成人sm免费视频| 国产精品免费视频久久久| 国产欧美精品一区二区三区-老狼| 亚洲综合精品伊人久久| 青青久久av北条麻妃海外网| 超碰97人人做人人爱少妇| 九九久久久久久久久激情| 九九久久精品一区| 国产精品视频一区二区高潮| 69久久夜色精品国产69乱青草| 国产精品亚洲аv天堂网| 久久69精品久久久久久国产越南| 国产成人精品国内自产拍免费看| 不卡中文字幕av| 按摩亚洲人久久| 欧美精品中文字幕一区| 国产精品白丝jk喷水视频一区| 97超级碰碰碰久久久| 中文国产成人精品久久一| 黄色成人在线免费| 亚洲va久久久噜噜噜久久天堂| 久热在线中文字幕色999舞| 久久精品国产96久久久香蕉| 欧美风情在线观看| 日韩欧美一区二区三区久久| 亚洲第一视频网| 韩国精品久久久999| 91亚洲精品在线| 国产日韩欧美日韩| 欧美激情欧美激情| 日本免费一区二区三区视频观看| 97超碰国产精品女人人人爽| 亚洲欧美国产一本综合首页| 深夜福利亚洲导航| 国产精品免费看久久久香蕉| 57pao成人永久免费视频| 欧洲午夜精品久久久| 国产欧美日韩视频| 免费91在线视频| 美日韩在线视频| 最近日韩中文字幕中文| 91av免费观看91av精品在线| 国产午夜精品一区理论片飘花| 欧美亚洲国产视频| 亚洲欧美一区二区三区在线| 久久福利网址导航| 久久国产精品偷| 中文字幕欧美日韩va免费视频| 国产精品老女人精品视频| 欧美日韩精品二区| 亚洲综合社区网| 亚洲男人天天操| 国产色综合天天综合网| 日韩在线观看高清| 欧美大肥婆大肥bbbbb| 久久伊人精品一区二区三区| 92看片淫黄大片看国产片| 日韩欧美在线网址| 久久成人这里只有精品| 国产精品吹潮在线观看| 亚洲欧美国产va在线影院| 精品视频在线播放| 精品久久久av| www.欧美三级电影.com| 日韩在线观看免费高清完整版| 色偷偷综合社区| 欧美自拍视频在线| 亚洲自拍偷拍一区| 成人国产精品久久久久久亚洲| 亚洲视频网站在线观看| 日韩欧美在线中文字幕| 日韩69视频在线观看| 国产丝袜一区二区三区| 国产99在线|中文| 欧美成人激情在线| 麻豆国产va免费精品高清在线| 97视频免费在线看| 亚州精品天堂中文字幕| 韩国视频理论视频久久| 日韩有码视频在线| 国产精品日韩专区| 中文字幕亚洲情99在线| 美女视频黄免费的亚洲男人天堂| 97国产suv精品一区二区62| 狠狠躁夜夜躁久久躁别揉| 国产精品亚洲激情| 亲爱的老师9免费观看全集电视剧| 国产精品aaa|