ホームページ  >  記事  >  バックエンド開発  >  単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル

単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:07:321040ブラウズ

singleLink.php
[php]
//まず基礎知識が必要です。変数とは何かを理解し、オブジェクト指向プログラミングの基本をいくつか理解します。
// しばらくの間、3 つの主要な制御ステートメントを知っておいてください
//定義ヒーロークラス
クラスヒーロー{
public $no;//ランキング
'' '' '' '' '' '' '' '' '' '' '' '' '' 'at out out out out out out out out out out out out to so so so so so so so so so so so so so so so so so so so so so so so so so so so soそうそうそうそうそう...
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
_
パブリック関数 __construct($no='',$name='',$nickname=''){
アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウトアウト--
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを作成する
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
// リンク
$head->next=$hero;
$hero2=新しいヒーロー(2,'ルー・ジュンイー','ユウ・チーリン');
// リンク
$hero->next=$hero2;
singにリンクされたリストを横断するために使用します A // 先頭から開始します。$ HEAD 先頭の値は変更してはなりません。変更後は、単一チェーン リストを横断することはできません。
関数 showHeros($head){
必须 // トラバース [いつリンクされたリストの最後まで確認する必要がある場合]
’ ’ ’ ’ ’ ’ アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトC's
'-- s------'s,
'
$cur=$head;
while($cur->next!=null){
//最初のノードはヘッドノードなので、 $cur->next を使用しますヘッドノードには何もなく、空です
エコー「& lt; br/& gt; ネクスト-& gt; ニックネーム」
'' '' '' '' sut out out out out out out out out out out out out out out out out out out out ow ow oft ittowuth oftogetはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはい
移動する
$cur=$cur->next;
}
}
echo'
****************現在のヒーローランキングは**************です
;
showHeros($head);
?>
上記のコードでは、ヒーローを追加するときに比較的愚かな方法が使用されていましたが、今ではより良い方法がヒーローの追加に使用されています。
1. リンクされたリストの最後に
を直接追加します。
singleLink2.php
[php]
//ヒーロークラスを定義します
クラスヒーロー{
public $no;//ランキング
公開 $ 名前 // 本名
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
使用
パブリック関数 __construct($no='',$name='',$nickname=''){
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを追加するための特別な関数を作成します
function addHero($head,$hero){
へ linkedリンクリストの最後を見なければならず、$ headを動かしてはなりません
$cur=$head;
while($cur->next!=null){
$cur=$cur->next;
}
H // WHILE サイクルを終了するとき、この時点では $ Cur がリンク リストの最後です
//ヒーローに参加します
$cur->next=$hero;
to
}
singにリンクされたリストを横断するために使用します A // 先頭から開始します。$ HEAD 先頭の値は変更してはなりません。変更後は、単一チェーン リストを横断することはできません。
関数 showHeros($head){
必须 // トラバース [いつリンクされたリストの最後まで確認する必要がある場合]
改 // ここで $head の方向を変えないようにするために、一時変数を使用できます
$cur=$head;
while($cur->next!=null){
//最初のノードはヘッドノードなので、 $cur->next を使用しますヘッドノードには何もなく、空です
エコー「& lt; br/& gt; ネクスト-& gt; ニックネーム」
'' '' '' '' sut out out out out out out out out out out out out out out out out out out out ow ow oft ittowuth oftogetはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはいはい
移動する
$cur=$cur->next;
}
}
//
を追加
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
$hero=new Hero(6,'Lin Chong','Leopard Head');
addHero($head,$hero);
$hero=new Hero(3,'Wu Yong','Zhi Duo Xing');
addHero($head,$hero);
// 出力時、Lin Chong は Wu Yong の前にランクされ、Lin Chong は 6 位であり、Wu Yong の後ろにランクされる必要があります。これは、リンクされたリストの最後に直接追加する場合の欠点です。
echo'
****************現在のヒーローランキングは**************です
;
showHeros($head);
?>
2. ヒーローのランキングに従って参加します(ここではリンクリストの順序を保証したいと思います)
将来仕事をするとき、誰かがあなたに大量の文字列を渡し、その文字列の特定の属性に従ってそれらを並べ替えるように依頼すると、その並べ替えはメモリ内で行われるかもしれません。
順番に追加するにはどうすればよいですか?
★必ず最初にアイデアについて話し、それからコードを書いてください。分析チャート
画像が大きいので、新しいウィンドウで画像を開いて全体像を表示してください
非常に極端な例を挙げてみましょう。
(1) 最初に文字 1 を追加します。最初の cur はヘッド ノードを指します。cur->next は空です。文字 1 をヘッド ノードの直後に追加します。
(2) 文字番号 2 を追加します。最初の cur はヘッド ノードを指し、cur->next は文字ノード 1 番を指します。cur->next->no は 1、$hero->no は2. 比較の結果、1 は 2 より大きくないので、cur は 1 ステップ下に進みます。このとき、cur は文字ノード 1 を指し、cur->next-> no かどうかを判断します。は 2 より大きいです。この時点では cur-> next が空であり、文字ノード No. 1 の後に文字 No. 2 を追加するしかありません。
(3) キャラクター No. 6 を追加します。最初の cur はヘッド ノードを指します。cur->next は今度はキャラクター ノード No. 1 を指します。cur->next->no は 1 で、$hero->next です。比較の結果、1は6より大きくないので、curは1段下に進む。このとき、curは文字ノード1番を指し、cur->next->noと判定する。比較すると、2は6より大きくないので、curは1ステップ下に進む。このとき、curは2番の文字ノードを指して判定する。 cur->next->no が 6 より大きいかどうか。現時点では cur-> Next が空であり、文字ノード 2 の後に文字 6 を追加することしかできません。
(4) キャラクター No. 3 を追加します。最初の cur はヘッド ノードを指します。cur->next はキャラクター ノード No. 1 を指します。cur->next->no は 1 で、$hero->next です。比較の結果、1は3より大きくないので、curは1段下に進む。このとき、curは文字ノード1番を指しているので、cur->next->noと判定する。比較すると、2は3より大きくないので、curは1ステップ下に進む。このとき、curは2番の文字ノードを指して判定する。 cur->next->no は 6、$hero->no は 3 です。比較後、6 は 3 より大きいことがわかりました。位置を見つけて、演算によって文字 3 番を追加する方法を見つけました。 。
singleLink3.php
[php]
//定義ヒーロークラス
クラスヒーロー{
public $no;//ランキング
'' '' '' '' '' '' '' '' '' '' '' '' '' 'at out out out out out out out out out out out out to so so so so so so so so so so so so so so so so so so so so so so so so so so so soそうそうそうそうそう...
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
_
パブリック関数 __construct($no='',$name='',$nickname=''){
アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウトアウト--
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを追加するための特別な関数を作成します
function addHero($head,$hero){
へlinkedリンクリストの最後を見なければならず、$ headを動かさないでください
$cur=$head;
to 要 // 考え方: 必ず最初に話してからコードを書いてください
while($cur->next!=null){
️ if($cur->next->no>=$hero->no){
' ' ' に来る ' 来る
に ' 出て出て出て出て出て出て出て
️休憩 ️
// 続ける
$cur=$cur->next;
}
’ to は決して口に出さない ’ を
’ ‐ 1 1 1- それは
見つけられること
//参加
//ヒーローを参加させます
$cur->next=$hero;
}
singにリンクされたリストを横断するために使用します A // 先頭から開始します。$ HEAD 先頭の値は変更してはなりません。変更後は、単一チェーン リストを横断することはできません。
関数 showHeros($head){
必须 // トラバース [いつリンクされたリストの最後まで確認する必要がある場合]
’ ’ ’ ’ ’ ’ アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトC's
'-- s------'s,
'
$cur=$head;
while($cur->next!=null){
// 最初のノードはヘッドですノードなので、$cur->next を使用して次のノードを指します。ヘッド ノードには何もなく、空です
エコー「& lt; br/& gt; ネクスト-& gt; ニックネーム」
「」 ' アウト' アウト' アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウト「- さん」から
$ // すべては $ CUL を動かす必要があります
$cur=$cur->next;
}
}
//
を追加
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
$hero=new Hero(6,'Lin Chong','Leopard Head');
addHero($head,$hero); = $ ヒーロー = 新しいヒーロー (3、「呉勇」、「志多興」);
addHero($head,$hero);
// 出力時、Lin Chong は Wu Yong の前にランクされ、Lin Chong は 6 位であり、Wu Yong の後にランク付けされる必要があります。これは、リンクされたリストの最後に直接追加する場合の欠点です。
echo'
****************現在のヒーローランキングは**************です
;
showHeros($head);
?>
実行プロセス分析図
画像が大きいので、新しいウィンドウで画像を開いて全体像を表示してください
上図のように、キャラクター3番を追加する場合、curはキャラクターノード2番を指し、cur->nextはキャラクターノード6番のアドレス0x1234を指します。キャラクタNo.3のアドレスは0x345です。 $hero->next=$cur->next; を実行します。つまり、①の青い点線で示すように、キャラクタ番号 3 のノードのネクストがキャラクタ番号 6 のノード アドレス 0x1234 を指すようにします。図中; then $cur->next= $hero; つまり、図の③の青い点線に示すように、文字ノード 2 の次をアドレス 0x1234 を指すものから文字ノード アドレス 0x345 を指すものに変更します。図では、元の②の実線が切断されています。
このように、キャラクターNo.2の後ろにキャラクターNo.3が挿入されます。
ただ見ているだけでは学べません。自分でコードを入力し、絵を描き、分析して理解を深めてください。
改善機能の追加: 同じランキングのヒーローをリンクリストに追加することを許可しません。
singleLink3.php の while ループ コードを次のように変更します:単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル
singleLink4.php
[html]
//ヒーロークラスを定義します
クラスヒーロー{
public $no;//ランキング
'' '' '' '' '' '' '' '' '' ''はout out out out out out out out out out out out out so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so soそうそうそうそうそう...
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
使用
パブリック関数 __construct($no='',$name='',$nickname=''){
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを追加するための特別な関数を作成します
function addHero($head,$hero){
へ linkedリンクリストの最後を見なければならず、$ headを動かしてはなりません
$cur=$head;
to要 // 考え方: 必ず最初に話してからコードを書いてください
$ Flag = false // 繰り返し番号がないことを意味します
;
while($cur->next!=null){
を通じて、一緒に' ' の方法を介して ‐ ‐ ‐ ‐ ‐ ‐If(o
' ' ' に来る ' 来る
に ' 出て出て出て出て出て出て出て
休憩。
}else if($cur->next->no==$hero->no){
$ Flag = true // この場所を入力すると、true に設定された反復可能項目があることを意味します
;
アウトアウトアウトアウト
アウトアウトアウトアウトアウトアウトアウトアウトスルー'''s'''s''''back''''''''''''''''自体''自体''、、、、 、、'、、、、、、、 --、100m相当のラプスユースミット。 ️
// 続ける
$cur=$cur->next;
}
’ to は決して口に出さない ’ を
’ ‐ 1 1 1- それは
見つけられること
//参加
//ヒーローを参加させます
L If ($ FLAG == FALSE) {// $ flag が false の場合のみ、挿入が繰り返されずに実行されることを意味します。 $flag フラグが追加されていない場合、上記の else if 判定が行われて重複が見つかったとしても、それらは挿入されます。
$hero->next=$cur->next;
$cur->next=$hero;
}
}
singにリンクされたリストを横断するために使用します A // 先頭から開始します。$ HEAD 先頭の値は変更してはなりません。変更後は、単一チェーン リストを横断することはできません。
関数 showHeros($head){
必须 // トラバース [いつリンクされたリストの最後まで確認する必要がある場合]
’ ’ ’ ’ ’ ’ アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトC's
'-- s------'s,
'
$cur=$head;
while($cur->next!=null){
// 最初のノードはヘッドですノードなので、$cur->next を使用して次のノードを指します。ヘッド ノードには何もなく、空です
echo'
主人公の番号は'.$cur->next->no.'Name'.$cur->next->name.'Nickname='.$cur-> ;次->ニックネーム;
「」 ' アウト' アウト' アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウト「- さん」から
移動する
$cur=$cur->next;
}
}
//
を追加
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
$hero=new Hero(6,'Lin Chong','Leopard Head');
addHero($head,$hero);
$hero=new Hero(3,'Wu Yong','Zhi Duo Xing');
addHero($head,$hero);
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
// 出力時、Lin Chong は Wu Yong の前にランクされ、Lin Chong は 6 位であり、Wu Yong の後ろにランクされる必要があります。これは、リンクされたリストの最後に直接追加する場合の欠点です。
echo'
****************現在のヒーローランキングは**************です
;
showHeros($head);
?>
上記は追加機能です。
==============
削除機能を追加します:
分析チャート
画像が大きいので、新しいウィンドウで画像を開いて全体像を表示してください
現在、キャラクターノードは 3 つあり、キャラクターノード No.3 を削除する必要があります。
(1) まず、先頭ノードを指す変数 cur がある、つまり $cur=$head; $cur->next!=null が成立し、while ループに入り、if 判定を行う $cur ->next->no 1 の場合、$herono の 3 と等しくないため、cur は 1 ステップ下に進みます。
(2) このとき、curは文字ノード1番を指しており、$cur->next!=nullが成立し、whileループに入り、if判定を行う、
$cur->next->no は 3 であり、$herono が 3 であることと同じです。位置が見つかったら、while ループから抜け出します。この No.3 の文字ノードを削除する必要があります。どうすればよいでしょうか?文字ノード No. 3 のアドレスが 0x123、文字ノード No. 7 のアドレスが 0x456 であるとします。次に、文字ノード No. 1 の次の値を 0x456 に変更して、文字ノード No. 3 が存在しないようにする必要があります。この単一リンクリストにあります。疑問に思う人もいるかもしれません。文字ノード 3 にも、0x456 を指す次の値があるのではないか? つまり、文字ノード 7 を指しているのではありません。心配しないでください。文字ノード 3 はすでにゴミです。現時点では、このオブジェクトは php、java、および C# で使用できるため、オブジェクトがそれを指す参照を持たない場合、そのオブジェクトはガベージ コレクション メカニズムによってリサイクルされることが規定されています。 3. キャラクターノード3番を削除するアイデアです。
コードを削除する単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル
$cur->next=$cur->next->next;
注:末尾だけを削除しても問題ありませんか?
最後のノード、つまり文字7番を削除すると、curは文字ノード3番を見つけます。このとき、$cur->next->nextは文字ノードの次の属性値です。 7 番目の文字ノードは、最後のノードであり、その次の属性値が null である場合、$cur->next=$cur->next->next; の次の属性値を設定します。文字ノード3番をnullにすると今度は3番の文字ノードが最後のノードとなり終点となります。
singleLink5.php
[html]
単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル
//ヒーロークラスを定義します
クラスヒーロー{
public $no;//ランキング
'' '' '' '' '' '' '' '' '' ''はout out out out out out out out out out out out out so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so soそうそうそうそうそう...
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
使用
パブリック関数 __construct($no='',$name='',$nickname=''){
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを追加するための特別な関数を作成します
function addHero($head,$hero){
へ linkedリンクリストの最後を見なければならず、$ headを動かしてはなりません
$cur=$head;
to 要 // 考え方: 必ず最初に話してからコードを書いてください
$ Flag = false // 繰り返し番号がないことを意味します
;
while($cur->next!=null){
を通じて、一緒に' ' の方法を介して ‐ ‐ ‐ ‐ ‐ ‐If(o
' ' ' ' アウト スルー ' アウト アウト アウト アウト ウェイ ウェイ ウェイ ウェイ ウェイ ウェイ ウェイ アウト''''''''''''''''''''
に出かけよう
休憩。
}else if($cur->next->no==$hero->no){
$ Flag = true // この場所を入力すると、true に設定された反復可能項目があることを意味します
;
アウトアウトアウトアウト
アウトアウトアウトアウトアウトアウトアウトアウトスルー'''s'''s''''back''''''''''''''''自体''自体''、、、、 、、'、、、、、、、 --、100m相当のラプスユースミット。 ️
// 続ける
$cur=$cur->next;
}
// while ループを終了すると、位置が見つかります
//参加
//ヒーローを参加させます
L If ($ FLAG == FALSE) {// $ flag が false の場合のみ、挿入が繰り返されずに実行されることを意味します。 $flag フラグが追加されていない場合、上記の else if 判定が行われて重複が見つかったとしても、それらは挿入されます。
$hero->next=$cur->next;
$cur->next=$hero;
}
}
singにリンクされたリストを横断するために使用しますA // 先頭から開始します。$ HEAD 先頭の値は変更してはなりません。変更後は、単一チェーン リストを横断することはできません。
関数 showHeros($head){
必须 // トラバース [いつリンクされたリストの最後まで確認する必要がある場合]
’ ’ ’ ’ ’ ’ アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトC's
'-- s------'s,
'
$cur=$head;
while($cur->next!=null){
// 最初のノードはヘッドですノードなので、$cur->next を使用して次のノードを指します。ヘッド ノードには何もなく、空です
echo'
主人公の番号は'.$cur->next->no.'Name'.$cur->next->name.'Nickname='.$cur-> ;次->ニックネーム;
「」 ' アウト' アウト' アウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウトアウト「- さん」から
移動する
$cur=$cur->next;
}
}
//リンクされたリストからヒーローを削除します
function delHero($head,$herono){
最初にヒーローを見つけなければなりません
$cur=$head; // $cur が $head を指すようにします。
while($cur->next!=null){
️ {
$ FLAG = TRUE; // if ステートメントを入力して検索します。
’ to ’ ’ ’ out ‐ together 1 1 1 ‐ 1 ‐ ‐ ‐ · // $cur で見つかった次のノードが削除されるノードです。
休憩。 ️
$cur=$cur->next;
}
L if ($ flag) {// flag が true の場合、削除
を使用して
$cur->next=$cur->next->next;
}その他{

削除したいヒーローの番号はありません。$her小野
}
}
//
を追加
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
$hero=new Hero(6,'Lin Chong','Leopard Head');
addHero($head,$hero); = $ ヒーロー = 新しいヒーロー (3、「呉勇」、「志多興」);
addHero($head,$hero);
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
            addHero($head,$hero);  
            $hero=new Hero(2,'卢俊义','玉麒麟');  
            addHero($head,$hero);  
            //在输出的时候,林冲就排在了吴用的前面了,而林冲是6号,应当排在吴用的后面,这就是直接在链表最后添加的弊端。  
  
            echo'
***********当前的英雄排行情况是**************';  
            showHeros($head);  
            echo'
***********删除后的英雄排行情况是**************';  
            delHero($head,1);  
            delHero($head,21); //删除一个不存在的  
            showHeros($head);  
        ?>  
     
 
========
继续添加修改功能:
単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル
singleLink6.php
[php]  
 
     
         
     
     
       

单向链表完成英雄排行管理

 
       
 
        查询英雄  
        添加英雄  
        删除英雄  
        修改英雄  
          
       
//定义英雄类
class Hero{
public $no;//排名
'' '' '' '' '' '' '' '' '' ''はout out out out out out out out out out out out out so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so so soそうそうそうそうそう...
public $nickname;//ニックネーム
public $next=null;//$next は、別の Hero オブジェクト インスタンスを指す参照です。
使用
パブリック関数 __construct($no='',$name='',$nickname=''){
$this->no=$no;
$this->name=$name;
}
}
H // ヘッドを作成します。ヘッドは単なるヘッドであり、データは入力されません
$head=新しいヒーロー();
//ヒーローを追加するための特別な関数を作成します
function addHero($head,$hero){
へ linkedリンクリストの最後を見なければならず、$ headを動かしてはなりません
$cur=$head;
to 要 // 考え方: 必ず最初に話してからコードを書いてください
$ Flag = false // 繰り返し番号がないことを意味します
;
while($cur->next!=null){
を通じて、一緒に' ' の方法を介して ‐ ‐ ‐ ‐ ‐ ‐If(o
' ' ' ' アウト スルー ' アウト アウト アウト アウト ウェイ ウェイ ウェイ ウェイ ウェイ ウェイ ウェイ アウト''''''''''''''''''''
に出かけよう
休憩。
}else if($cur->next->no==$hero->no){
$ Flag = true // この場所を入力すると、true に設定された反復可能項目があることを意味します
;
アウトアウトアウトアウト
アウトアウトアウトアウトアウトアウトアウトアウトスルー'''s'''s''''back''''''''''''''''自体''自体''、、、、 、、'、、、、、、、 --、100m相当のラプスユースミット。 ️
// 続ける
$cur=$cur->next;
}
// while ループを終了すると、位置が見つかります
//参加
//ヒーローを参加させます
L If ($ FLAG == FALSE) {// $ flag が false の場合のみ、挿入が繰り返されずに実行されることを意味します。 $flag フラグが追加されていない場合、上記の else if 判定が行われて重複が見つかったとしても、それらは挿入されます。
$hero->next=$cur->next;
$cur->next=$hero;
}
}
singにリンクされたリストを横断するために使用します
            //是从head开始遍历的,$head头的值千万不能变,变化后就不能遍历我们的单链表了  
            function showHeros($head){  
                //遍历[必须要知道什么时候,到了链表的最后]  
                //这里为了不去改变$head的指向,我们可以使用一个临时的变量  
                $cur=$head;  
                while($cur->next!=null){  
                    //第一个节点为头结点,所以用$cur->next指向下一个节点,头结点里什么都没有是空的  
                    echo'
英雄的编号是'.$cur->next->no.'名字'.$cur->next->name.'外号='.$cur->next->nickname;  
                    //如果只写到这里,就会是死循环了  
                    //所有要让$cul移动  
                    $cur=$cur->next;  
                }  
            }  
  
            //从链表中删除某个英雄  
            function delHero($head,$herono){  
                //首先要找到这个英雄在哪里  
                $cur=$head; //让$cur指向$head;  
while($cur->next!=null){
U If ($ Cur-& GT; Next-& GT; No == $ Herono) {
$ FLAG = TRUE; // if ステートメントを入力して検索します。
’ to ’ ’ ’ out ‐ together 1 1 1 ‐ 1 ‐ ‐ ‐ · // $cur で見つかった次のノードが削除されるノードです。
休憩。 ️
$cur=$cur->next;
}
cuseed使用の使用
$cur->next=$cur->next->next;
}その他{

削除したいヒーローの番号はありません。$her小野
}
}
//ヒーローを変更する
function updateHero($head,$hero){
// まずこのヒーローを探しましょう
= $ Cur = $ head // $ Cur は走るドラゴンです。
while($cur->next!=null){
️ if($cur->next->no==$hero->no){
休憩。 ️
アウト アウト” ' s through ' ' s through ' way ' ‐ to to
$cur=$cur->next;
}
out out out out out out out out out outmb outallowce out Through out through out through out through over through over over over over over'''' through'''' through'''' through‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
//while ループを終了した後、$cur->next==null の場合は、cur がキューの最後に到達し、見つからなかったことを意味します
if($cur->next==null){
echo'
修正する必要がある '.$hero->no.' が存在しません。
}その他{
修 // 番号は変更できません、名前とニックネームのみ変更可能です
$cur->next->name=$hero->name; ️ $cur->next->nickname=$hero->nickname;
}
}
//
を追加
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
$hero=new Hero(6,'Lin Chong','Leopard Head');
addHero($head,$hero);
$hero=new Hero(3,'Wu Yong','Zhi Duo Xing');
addHero($head,$hero);
$hero=new Hero(1,'ソン・ジャン','タイムリー・レイン');
addHero($head,$hero);
$hero=new Hero(2,'Lu Junyi','Yu Qilin');
addHero($head,$hero);
// 出力時、Lin Chong は Wu Yong の前にランクされ、Lin Chong は 6 位であり、Wu Yong の後ろにランクされる必要があります。これは、リンクされたリストの最後に直接追加する場合の欠点です。
echo'
****************現在のヒーローランキングは**************です
;
showHeros($head);
with with with echo '
削除後のヒーローランキング状況************* の *************** です。
//delHero($head,1);
delHero($head,21) // 存在しない
を削除します。
showHeros($head);
エコー '
$hero=新しい英雄(1,'胡漢山','楊梅胡');
updateHero($head,$hero);
showHeros($head);
?>
重要なのは、ハンカチをなくす問題を解決するために循環リンクリストを使用するなど、応用です。
なぜアイデアがないのか、アルゴリズムやデータ構造がなく、始める方法がありません。
この単一リンクのリストのケースを自分で分解してみると、それほど難しくないことがわかるでしょう。
ヘッダー付き双方向リンクリストを使用して実装 - 水滸伝英雄ランキング管理
一方向リンクリストの欠点分析: 自身を削除できず、補助ノードに依存する必要があります。
同時に、バイナリ ツリーと一般化テーブルでは、2 つ以上のノードの適用を実行するために 1 つのノードを使用する必要があります。
http://www.bkjia.com/PHPjc/477873.html
www.bkjia.com単一リンクリストのクラッド操作_水滸伝ヒーローランキングアルゴリズム_学習ノート_ソースコードイラスト_PPT文書構成_PHPチュートリアル
本当
http://www.bkjia.com/PHPjc/477873.html
技術記事
singleLink.php [php] html ヘッドメタ http-equiv=Content-Type content=text/html;
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。