Veri yapıları ile ilgili sorunlar yeni başlayanlar için yaygın mıdır? [kapalı]


17

Java ile ilgili ikinci dersimi alıyorum. Veri yapılarına giriyoruz. Bağlantılı bir listede bir ödev yaptım ve şimdi bir yığın. Bağlantılı listeyle zorlandım. Yığın bana biraz sıkıntı verdi, ama çok daha kolaydı.

Bu algoritmalar ve veri yapıları ile zor zaman geçirmekten endişelenmeli miyim? Sadece gerçekten anlamadım gibi hissediyorum.


Bağlantılı
Listenin

Yanıtlar:


44

Bence, bu şeyleri anlamamayı kabul etmemelisiniz, çünkü bunlar gerçekten temeldir. Bununla birlikte, onları anlamadığınız için kendinizi kötü hissetmeniz gereken bir şey yoktur. Bağlantılı bir listeyi bir çocuğa açıklayabilirsiniz. Öyleyse, öğretmeniniz bunları size açıklayamazsa, bu onların hatasıdır. Bu yüzden endişelenmek için zaman harcamamalısınız, bunun yerine size açıklayabilecek insanları bulmaya çalışın. Genellikle bir öğrenci tam zamanlı bir akademisyenden çok daha iyi bir öğretmendir.

Trenleri Düşün

Her taşıyıcının bir veri parçası içerecek kadar yeterli kapasiteye sahip olduğu bir dizi demiryolu taşıyıcınız olduğunu düşünün. Her taşıyıcının ucunda başka bir taşıyıcının önüne takılabilen bir çeşit kanca bulunur.
Bu aslında size bağlantılı bir liste verir:

  • boş liste: araba içermeyen tren (ve bu nedenle veri taşımayan)
  • bir eleman ekleme: trenin önündeki elemanı içeren yeni bir araba ekleyin ve trenin geri kalanına asın
  • bir elemanın çıkarılması: elemanı içeren taşıyıcıyı bulun. Çıkarın (burada bir vince ihtiyacınız olabilir :)), taşıyıcıyı önce taşıyıcıyla kancaya takın.
  • bir elemanın değiştirilmesi: eski elemanı içeren taşıyıcıyı bulun. Eski elemanı yeni elemanla değiştirin.
  • bir elemanın hemen arkasına eklenmesi: eklemek istediğiniz elemanı içeren taşıyıcıyı bulun. Bundan sonra yeni bir şaryo takın, buna göre kancalanır (trenin parçalanmasını istemiyoruz) ve yeni elemanı içine yerleştirin.

Bunun aksine, bir diziyi, herhangi bir şekilde yeniden düzenlenemeyen belirli sayıda taşıyıcıya sahip bir tren olarak düşünebilirsiniz. Yapabileceğiniz tek şey, içindeki verileri değiştirmek. Bu model ayrıca dizilerin sahip olduğu birçok sorunu da açıklar:

  • Bir öğeyi diğerinden önce eklemek istiyorsanız, aşağıdaki öğelerin tümünü bir sonraki taşıyıcıya taşımanız gerekir.
  • Bir elemanı kaldırmak istiyorsanız, aşağıdaki tüm elemanları bir satır başı öne taşımanız gerekir.
  • Daha fazla arabaya sahip bir trene ihtiyacınız varsa, yeni bir tren inşa etmeniz gerekecektir, çünkü sadece bir taşıyıcının başına geçemezsiniz. Öte yandan, bir dizideki taşıyıcıları bulmak çok daha kolaydır, çünkü onları kalıcı olarak numaralandırabilirsiniz (sıraları asla değişmez).

Yığına gelince: "Yığın" bir fikirden daha az bir veri yapısıdır. Yığın fikri, bir kitap yığını gibi davranmasıdır. Kitapları yalnızca yığının üstüne koyabilirsiniz ve üstteki kitabı yalnızca yığının dışına çıkarabilirsiniz (en azından kitaplar yeterince ağırsa).
Bununla birlikte, arabalardaki verileri kitap olarak ve en çok ilk satırdaki kitap yığının tepesi olarak düşünürseniz, bağlantılı bir liste yığın olarak kullanılabilir.

Umarım bu size yardımcı olmuştur. Belki de olmadı. Belki daha görsel bir türsünüz. Bu durumda, görsel açıklamalar yapmakta ve size açıklamakta iyi olan birini bulmanızı öneririm. Uzun sürmeyecek, ama kesinlikle buna değecek.

Şimdi bununla mücadele etmek sorun değil. Ancak sadece kabul etmek, uzun vadede bir seçenek değildir.


2
Güzel cevap! Birinin bir dizi hedefle tamamlanması gereken bir flash / diğer oyun yoluyla çocuklara temel veri yapılarını öğretebileceğini fark ettim. Her tren vagonu komşusundan 2 kat daha büyük ve küçükse, aynı tren fikri çocukların ikili sayıları kavramasına da yardımcı olabilir.
İş

1
Tamam, şimdi buna sahip olduğunuza göre, birden çok bağlantı içeren veri yapılarına geçelim. Yani trenin yanında başka bir araba setine bağlanabilen bir aksaklık var. Ama bu arabalar için demiryolu ilk parçanın yanında bir çeşit kayar ...
Philip

12

Bu konuda "endişelenmeniz" gerektiğini söylemem, ancak zayıf noktalarınızı kabul ettiğiniz basit gerçeği, daha çok nerede çalışacağınızı tam olarak bildiğinizi gösterir. Bence bu tavırla hizmet edeceksiniz ve uzun vadede iyi olacaksınız.


6

Favori CSCI öğretmenime alıntı yapmak için:

"Panic, but panic early."

Veri Yapıları zor geliyor, değil mi? Bana göre, soyut ve biraz karmaşık geliyor ve en önemlisi ... önemli!

Veri Yapıları yaşamsal bir derstir. Ve mücadele etmek yaygın ama devam et! Sürece Wheaties yemek ve ona tutmak gibi, bir ile gökkuşağı ulaşacak bagdolu generic items ve alt kısımda.


Panik erken ayrılmak anlamına mı gelir? Veri yapılarından sonra matematik gereksinimleri, algoritmalar, işletim sistemi, yapay zeka, derleyiciler, hesaplama teorisi de var ... herhangi bir anne düşkününü daha kolay hale getirmiyor, ama belki de artık bir birinci sınıf öğrencisi veya ikinci sınıf öğrencisi olmama bile yardımcı oluyor ama işler zorlaşıyor.
Meslek

3

Diğer cevaplarda çok iyi noktalar, eklemek için sadece bir not: IMO bağlantılı listeler, örneğin birçok kişi için yığınlardan daha zor olabilir, çünkü dolaylı olarak inşa ederler ( referanslar / işaretçiler aracılığıyla ifade edilir ). Ve bu temel kavramları kavramak zor olabilir .


3

Veri Yapıları aldığım ilk "zor" sınıftı; Java yerine Fortran 77 kullandık, ancak kavramlar büyük ölçüde aynı.

Bağlantılı liste kavramını incelemek benim sınıf arkadaşlarımdan bir hafta daha uzun sürdü; Görevi sertleştirdim, ancak profesörümle birkaç sinir bozucu oturumdan sonra nihayet tıkladı (kelimenin tam anlamıyla; sonunda anladığımda kafamda bir "tık" duydum).

Herkes CS müfredatında bir yerde sorun yaşıyor (ucube olmadıkça). Zayıflıklarınızın nerede olduğunu ve nasıl ele alınacağını anlarsanız, endişelenecek hiçbir şeyiniz yoktur.


1
Panik yapma, çalışmaya devam et ve tıklamayı bekle ...
NWS

2

Bağlantılı listeyi anlamada veya uygulamanızla ilgili sorun yaşadınız mı?

Yeni bir programcının orada zorluk çekmesi olağandışı değil, çünkü yazarken gerçekten ne anlama geldiğini ilk kez düşünmeniz gerekebilir :

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

Aynı egzersize ALGOL / W'de kıvrıldım, çünkü dil anlambilimini tam olarak anlamadım. Bir yıl sonra neden zorluk çektiğimi neredeyse hiç hatırlamıyordum.


1

Diğerlerinden daha zor bulduğunuz bazı yazılım geliştirme alanları vardır. Belirli algoritmalar veya belirli tasarım kalıpları veya belirli prosedürler kişiden kişiye değişir. Tam olarak anlamadan önce gerçek bir programda bir şey kullanmam gerektiğini fark ettim.

Birisi her şeyi bildiğini iddia ettiyse ve bir şey öğrenmekte hiç problem yaşamamış olsaydı daha fazla endişelenirdim.

Şahsen ben bağlantılı listelerle hiç sorun yaşamadım, ama sonra 8 yıl boyunca her yerde onları kullanan bir program üzerinde çalıştım, bu yüzden onlarla günlük olarak çalışıyordum. Sürece bildiğiniz gibi nereye sen Hafızanızı tazelemek ve "sorun" var alanlarını bilmesi gereken bilgileri bulmak Tamam olmalıdır.


Ayrıca bu veri yapılarını kullanan bir programla etkileşime girebilmemin de yardımcı olacağını düşünüyorum. Kendime sorduğum aşamadayım, bunlar neden faydalı olacak?
Brock

0

Matematik ile ilgili sorunum vardı ve ikinci kez almak zorunda kaldım. İkinci kez zeki olduğumu keşfettim ama ilk matematik öğretmeni işe yaramadı :)

BT'de iyi iletişim kuramayan çok sayıda insan bulacaksınız, öğretmenler bile. Öte yandan BT'deki bazı insanlar gerçekten harika yazarlar ve usta iletişimciler.

Bazen dışarıda okumak gerçekten yardımcı olabilir. Bilgisayar kitaplarının kalitesi büyük farklılıklar gösterir. Amazon'a binin ve insanların hangi kitabın gerçekten hoşlandığını görün.

İyi şanslar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.