原创。 在储存字符串的PHP单链表的定义中,一种插入方法:orderInset($data)按给定字符串$data的大小,将其放到合适的位置。这样,可以保证单链表始终是有序的。无须再调用任何排序的
在储存字符串的PHP单链表的定义中,一种插入方法:orderInset( $data) 按给定字符串 $data 的大小,将其放到合适的位置。这样,可以保证单链表始终是有序的。无须再调用任何排序的方法。为英文文档的单词存储,提供一种有用的方法。
注意:仅适用于英文字母的字符串, 因为,汉字按UNICODE排序,似乎没有直观意义。
1. [代码][PHP]代码
<meta charset="utf-8" /> <? /** * The class LinkedList allows an application to store strings in * alphabetical order by calling orderInsert(). * 此处定义的 LinkedList 类,可以调用它的 方法 orderInsert(),来以字母 * 大小的顺序储存 英文字符串。 * 作者: 许同春 author Tongchun Xu * @开源中国 Open Source, China communiity * */ class Node{ public $data; public $next; function __construct($data, $next = null){ $this->data = $data; $this->next = $next; } } class LinkedList{ private $head; //单链表的头结点,不存储数据 function __construct(){//单链表的构造方法 //头结点的数据为"傀儡", 不代表 任何数据 $this->head = new Node("dummy 傀儡"); $this->first = null; } function isEmpty(){ return ($this->head->next == null); } /* orderInsert($data) 方法, * 按给定字符串 $data 的大小, 将其安插到适当的位置, * 以保证单链表中字符串的存储,始终是有序的。 */ function orderInsert($data){ $p = new Node($data); if($this->isEmpty()){ $this->head->next = $p; } else{ $q = $this->head; while($q->next != NULL && strcmp($data, $q->next->data)> 0 ){ $q = $q->next; } $p->next = $q->next; $q->next = $p; } } function insertLast($data){//将字符串插到单链表的尾部 $p = new Node($data); if($this->isEmpty()){ $this->head->next = $p; } else{ $q = $this->head->next; while($q->next != NULL) $q = $q->next; $q->next = $p; } } function find($value){//查询是否有给定的字符串 $q = $this->head->next; while($q->next != null){ if(strcmp($q->data,$value)==0){ break; } $q = $q->next; } if ($q->data == $value) return $q; else return new Node($value." 没有找到!"); } function traversal(){//遍历单链表 if(!$this->isEmpty()){ $p=$this->head->next; echo $p->data." "; while($p->next != null){ $p=$p->next; echo $p->data." "; } }else echo "链表为空!"; } } $ll = new LinkedList(); $city =array("Wuhan", "Beijing", "Shanghai", "Tianjin", "Changsha", "Kunming", "Gongyi","Tokyo","New York","Ottawa","Moskow","Edmonton","Glasgow","Thunder Bay","New Delhi"); for ($i=0;$i<count($city);$i++) $ll->orderInsert($city[$i]); $ll->traversal(); echo "<br>".$ll->find("Gongyi")->data."<br>"; echo $ll->find("Baoding")->data."<br>"; ?>