素晴らしい記事をありがとう!
のような不完全なアイデアだ。
つまり、二重リンク・リストのノードの能力は、前のノードへのポインタを処理する必要があることを除けば、単一リンク・ノードの能力と同じようなものになります。
シングル・リンク・ノードの能力を持つためには、前のノードへのポインタを 処理する必要があるの だろうか?筆者が伝えたいことは伝わっているが、表現自体があまりよくない......。
図.3 リング型バイリンクリストのノード
1) 一番上のポインタ - 矢印が少し曲がっている
2) これは記事のスタイルかもしれないが、図の説明が非常に小さなフォントで、かなり薄暗い(目が悪いという個人的な意見)。
このような2重リンク・リストのニーズに応えるノードも必要です。 前の 形とは異なり、前の ノードを参照する別のポインタを保持します。 そして当然ながら、 リストの先頭要素の このような ノードはNULLに等しくなります。
1)前の形式から - 何から、どのくらい前から?筆者の言うpreviousとは「単一リンクリストのノード」のこと なのだろうか?
2) 「 リストの先頭 要素のノードは NULLに 等しくなる」。 ノードかポインタか?おそらく、先ほどの「リストには要素ではなくノードを格納することができる:
「二重にリンクされたリストの 先頭ノードのポインタの 1 つは NULLに等しい 。
しかし、末尾のノードでは、次のノードへのリンクは 空ではなく、先頭のポインターで満たされるから だ。
1)参照は 存在しない- 誰が、何を ?のケースは成立しない。
2) しかし、最後尾のノードでは、次の空(who-what ?????)への 参照は ない。
3)それ(参照)はインデックスで埋められる。 リンクはポインターによって埋められるのか、それともポインターはまだどこかで参照を持っているのか?
削除操作については、追加操作と ほぼ同じです:
- 先頭ノードを削除;
- 末尾のノードを削除する;
- リストの指定された場所からノードを削除します;
- デストラクタ。
1)これらは addグループの類似の (誰が何を?)ものと 実質的に 重複して いる。
2)指定されたリストの位置からノードを 削除することは、「先頭のノードを削除する」「末尾のノードを削除する」ことの一般的なケースではないか。
3)「 削除操作について 」、その前は「追加操作の方法として次のようなものがある」(theremethods, hereoperations - 同じ形式が欲しい)。
これは、まさにこのような記事の導入部分が作られた無知な人間の、導入部分についての個人的な意見である。
気に入ったよ。ありがとう。読んだ後に、自分のところで応用できるようなアイディアが浮かぶといいよね。)
tol64 さん、 、権威ある専門家のご意見ありがとうございます :-)。
私は自分のことを専門家だとは思っていないし、権威だとも思っていない。それは謙遜からではなく、本当にそうなんだ。)))ここには、プログラミング、数学、トレードにおいて何倍も経験豊富なプログラマーがいる。そして私はまだ泳いで泳いで泳がなければならない。)))
権威とは 主観的なものだと思います。ある国の主権を他の国が認めるようなものだ...。
引用
ということは、あなたのは私が認めたということですね :-)
tol64、あなたの新しい記事を待っています。
- ru.wikipedia.org
、データセットの要素にアクセスする例を示す:
log2(N)の複雑さでCList要素へのバイナリアクセスをどこで見つけたのですか?
CListはリストであり、log2(N)の複雑さを持つバイナリ・アクセスは、インデックスCurrentIndex +/- (CurrentIndex/2)のノードへの瞬間的なジャンプを必要とします。
CListの実装では、標準のQuickSearch()を使用しており、ソートの場合、確かにCurrentIndex +/- (CurrentIndex/2)ノードを参照して項目を検索します。しかし、このノード自体はGetNodeAtIndex()関数によって検索され、奇跡は起こらない。アクセス操作の複雑さはすべてこの関数、特にこれらの文字列にかかっている:
if(revers) { //--- 右から左へ検索 for(;i>index;i--) { result=result.Prev(); if(result==NULL) return(NULL); } } else { //--- 左から右へ検索 for(;i<index;i++) { result=result.Next(); if(result==NULL) return(NULL); } }
これを見ると、ある要素を検索する複雑さは、極限ではO(N/2) であることがわかる。なぜなら、リストは双方向なので、端から端へのアクセスはN/2の遷移を超えないからである。著者は、このアルゴリズムについて記事を書く前に、もっと徹底的に理解することをお勧めする。
私自身の経験から言えることは、データを扱うということは、ほとんどの場合、検索やソートと結びついているので、実際のタスクに古典的なCListを 使うのは非効率的だということだ。リストは、インデックスによるアクセスとリストによるアクセスが組み合わされたコレクションでは、まず強い。
なぜか、ポインタ遷移がインデックスによる直接アドレス指定よりもずっとずっと遅いという事実を考える人はほとんどいない。result.Next()を1000回通過するのは、forでインデックスを1000回通過するよりもはるかに遅い。
昏睡状態。
画像から始める。ポインターはデータではなくノードに行き、データはノードの一部でしかない。
テキストは、公正を期すために、ほとんど正常です。
実装について。そのようなものはテンプレートによって実装される。STLにおけるコンテナの最適な表現方法は、イテレータとファンクタであるが、ここでは失敗である。
その結果、空っぽの仮想メソッドは理解できないだけでなく、ただのヴリヴィグラズに見えてしまう。)シートの並べ替えが実現した。いくつかのメソッドの実装や宣言にさえ疑問があり、当惑さえする。
カプセル化ゼロ。
リスト(! gg)での複雑さとバイナリ(!)サーチについての暴露は終わった。
その結果、現在のEVERYTHINGは理解不能で不便ながらくたであり、学習のための例としてさえ使えない(と思う)。
プログラマーになりたいのなら、普通にプログラミングを学びましょう。その方が、ずっとうまく実装できる。
リストが双方向なので、一方の端から要素にアクセスしてもN/2の遷移を超えることはない。著者はこのアルゴリズムについて記事を書く前に、もっと徹底的に理解した方がいいだろう。
上に書いたOというのは、第一に計算が間違っており、第二に書いてあることも間違っている。
_____________________________________
最も興味深いのは、これが最悪のリソース記事とは程遠いということだ。
...
悪気はないのだが)プログラマーになりたいのなら、普通にプログラミングを学ぼう。その方がずっとよく理解できる。
あなたはまた、あなたの記憶をリフレッシュすることをお勧めします、O、上に書かれていることは、第一に、間違って計算され、第二に、間違って書かれています。
...
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 MQL5プログラミングベージックス:リスト はパブリッシュされました:
作者: Dennis Kirichenko