初心者に共通のデータ構造に問題がありますか?[閉まっている]


17

Javaの2番目のコースを受講しています。データ構造に入ります。リンクされたリストで割り当てを行い、スタックになりました。リンクリストで苦労しました。スタックは少しトラブルを引き起こしましたが、はるかに簡単でした。

これらのアルゴリズムとデータ構造で苦労することを心配する必要がありますか?本当に把握していないように感じます。


リンクされたリストの実世界の例- stackoverflow.com/questions/644167/...
pramodc84

回答:


44

これらは本当に基本的なものであるため、理解していないことを受け入れてはならないと思います。そうは言っても、あなたがそれらを理解していなくても、何も悪く感じることはありません。リンクリストを子に説明できます。ですから、もしあなたの先生があなたにそれらを説明できなかったら、それは彼らのせいです。したがって、心配する時間を費やすのではなく、それを説明できる人を見つけるようにしてください。多くの場合、仲間の学生はフルタイムのアカデミックよりもはるかに優れた教師です。

電車を考える

鉄道車両のセットがあり、各車両が1つのデータを収容するのに十分な容量を持っているとします。各キャリッジには、端にある種のフックがあり、別のキャリッジの前面に取り付けることができます。
これにより、実際にリンクリストが表示されます。

  • 空のリスト:キャリッジを含まない(したがってデータを運んでいない)列車
  • 要素の追加:要素を含む新しいキャリッジを列車の前に追加し、列車の残りの部分にフックします
  • 要素の削除:要素を含むキャリッジを見つけます。それを取り外し(ここでクレーンが必要な場合があります:))、前にキャリッジを引っ掛け、その後にキャリッジを引っ掛けます。
  • 要素の置換:古い要素を含むキャリッジを見つけます。古い要素を新しい要素と交換します。
  • 要素の直後への挿入:挿入したい要素を含むキャリッジを見つけます。その後ろに新しいキャリッジを挿入し、それに応じてフックします(列車がバラバラにならないようにします)。そして、新しい要素をその中に入れます。

それとは対照的に、配列は、任意の数のキャリッジを備えた列車と考えることができます。できることは、その中のデータを変更することだけです。このモデルは、配列が抱える多くの問題も説明しています。

  • ある要素を別の要素の前に挿入する場合、次のすべての要素を次のキャリッジに移動する必要があります。
  • 1つの要素を削除する場合は、次のすべての要素を1キャリッジ前に移動する必要があります。
  • より多くの馬車を備えた列車が必要な場合は、馬車を追加することはできないため、新しい列車を建設する必要があります。一方、配列内でキャリッジを見つけることは、単純に永続的に番号を付けることができるため、はるかに簡単です(順序が変わることはありません)。

スタックについて:「スタック」は、アイデアというよりもデータ構造ではありません。スタックのアイデアは、それが本のスタックのように機能するということです。スタックの一番上にしか本を置くことができず、スタックから一番上の本だけを取り出すことができます(少なくとも本が十分に重い場合)。
そうは言っても、キャリッジ内のデータを本と考え、最初のキャリッジの本をスタックの最上部と考える場合、リンクリストをスタックとして使用できます。

これがあなたのお役に立てば幸いです。たぶんそうではなかった。たぶん、あなたはもっと視覚的なタイプです。その場合、視覚的な説明をするのが得意な人を見つけることをお勧めします。それほど時間はかかりませんが、絶対に価値があります。

これで今苦労しても大丈夫です。しかし、単にそれを受け入れるだけでは、長期的には選択肢になりません。


2
クールな答え!完了すべき一連の目標を設定したフラッシュ/その他のゲームを通じて、子供に基本的なデータ構造を教えることができることに気付きました。電車の同じ考えは、各電車の車が隣の車の2倍の大きさである場合、子供が2進数を把握するのにも役立ちます。
ジョブ

1
わかりました。これで、複数のリンクを持つデータ構造に移りましょう。そのため、列車の側面にはヒッチがあり、別の車に引っかかることがあります。しかし、これらの車のレールは、最初のトラックの横に沿ってスライド
フィリップ

12

「心配する必要がある」とは言いませんが、自分の弱点を認めるという単純な事実は、どこでもっと勉強するべきかを正確に知っていることを示しています。私はあなたがその態度によって十分に奉仕され、長期的には大丈夫になると思います。


6

私のお気に入りのCSCI教師を引用するには:

"Panic, but panic early."

データ構造は難しいですね。私にとっては、抽象的で少し複雑に聞こえますが、何よりも重要なことです!

データ構造は重要なコースです。そして、闘うことは一般的ですが、続けてください!あなたがあなたの小麦を食べてそれを保つ限り、あなたは 下にbag満たされた虹に達するでしょうgeneric items


早くパニックになると、中退することになるでしょうか?データ構造の後、数学の要件、アルゴリズム、OS、AI、コンパイラ、計算理論もあります...それは、母親がおかしくなりにくいことではありませんが、1年生でも2年生でもないという事実は、ものが難しくなっていますが。
仕事


3

データ構造は、私が最初に取った「ハード」クラスでした。Javaの代わりにFortran 77を使用しましたが、概念はほとんど同じです。

リンクリストの概念を理解するには、クラスメートよりも1週間かかりました。私は割り当てをビフしましたが、教授とのわずかにイライラするセッションを数回行った後、最終的にクリックしました(文字通り、最終的に理解したときに頭の中で「クリック」が聞こえました)。

誰もがCSカリキュラムのどこかに問題を抱えています(彼らがフリークでない限り)。自分の弱点がどこにあり、どのように対処するかを理解していれば、本当に心配することはありません。


1
パニックしないで、作業を続け、クリックを待つ
...-NWS

2

リンクされたリストを理解するのに問題がありましたか、それとも実装に問題がありましたか?

新しいプログラマーがそこに苦労することは珍しいことではありません。なぜなら、あなたが書くとき、それが本当に何を意味するのかを考える必要があるのは初めてだからです。

list.head = null;
Element e = new Element(...);
e.next = list.head;
list.head = e;

言語のセマンティクスを十分に理解していなかったので、同じ演習でALGOL / Wを使用してすべての問題を解決しました。1年後、なぜ私が苦労したのかほとんど思い出せませんでした。


1

ソフトウェア開発では、他の分野よりも難しいと感じる分野がいくつかあります。特定のアルゴリズムであるか、特定の設計パターンであるか、特定の手順であるかは、人によって異なります。完全に理解する前に、実際のプログラムで何かを使用する必要があることがわかりました。

誰かがそれをすべて知っていると主張し、何かを学ぶのに問題を経験したことがなかったらもっと心配だろう。

個人的にはリンクリストに問題があるようには見えませんでしたが、その後8年間プログラムを使用していたので、リンクリストをどこでも使用していたので、毎日作業していました。あなたがあなたの記憶をリフレッシュし、あなたが「問題」を抱えている領域を知るために必要な情報を見つける場所を知っている限り、あなたは大丈夫であるはずです。


また、これらのデータ構造を使用するプログラムと対話することができれば役立つと思います。私は自分自身に問いかけている段階にいます。なぜこれらが役立つのでしょうか?
ブロック

0

私は微積分学に問題があり、もう一度それを取りました。二度目に私は賢かったが、最初の数学の先生は基本的に役に立たなかった:)

IT担当者であっても、コミュニケーションがうまく取れない人がたくさんいます。一方、IT部門の一部の人は、本当に優れた作家であり、コミュニケーターの達人です。

時々外部の読書が本当に役立つことがあります。コンピューターの本は品質が大きく異なります。Amazonにアクセスして、人々が実際に好きな本を見てみましょう。

幸運を。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.