มีปัญหากับโครงสร้างข้อมูลทั่วไปสำหรับผู้เริ่มต้นหรือไม่ [ปิด]


17

ฉันกำลังเรียนหลักสูตรที่สองทาง Java เรากำลังเข้าสู่โครงสร้างข้อมูล ฉันได้ทำการมอบหมายให้กับรายการที่เชื่อมโยงและตอนนี้สแต็ก ฉันมีปัญหากับรายการที่เชื่อมโยง สแต็คทำให้ฉันมีปัญหาเล็กน้อย แต่ก็ง่ายขึ้นมาก

ฉันควรกังวลเกี่ยวกับช่วงเวลาที่ยากลำบากกับอัลกอริทึมและโครงสร้างข้อมูลเหล่านี้หรือไม่? ฉันแค่รู้สึกว่าฉันไม่เข้าใจจริงๆ


ตัวอย่างโลกแห่งความจริงของรายการที่เชื่อมโยง - stackoverflow.com/questions/644167/…
pramodc84

คำตอบ:


44

ฉันคิดว่าคุณต้องไม่ยอมรับไม่เข้าใจสิ่งเหล่านี้เพราะมันเป็นพื้นฐานจริงๆ ที่ถูกกล่าวว่าคุณไม่เข้าใจพวกเขาคืออะไรที่จะรู้สึกไม่ดีเกี่ยวกับ คุณสามารถอธิบายรายการที่เชื่อมโยงกับเด็กได้ ดังนั้นหากครูของคุณไม่สามารถอธิบายให้พวกเขาฟังได้นั่นเป็นความผิดของพวกเขา ดังนั้นคุณไม่ควรใช้เวลากังวล แต่พยายามหาคนที่สามารถอธิบายให้คุณได้ บ่อยครั้งที่เพื่อนนักเรียนเป็นครูที่ดีกว่านักวิชาการเต็มเวลา

นึกถึงรถไฟ

ลองนึกภาพคุณมีชุดตู้รถไฟซึ่งแต่ละตู้มีความจุเพียงพอในการเก็บข้อมูลหนึ่งชิ้น รถม้าแต่ละคันมีตะขอบางอย่างที่ปลายของมันซึ่งสามารถติดกับด้านหน้าของรถม้าอีกคัน
ในความเป็นจริงนี้จะช่วยให้คุณเชื่อมโยงรายการ:

  • รายการว่างเปล่า: รถไฟที่ไม่มีรถม้า (ดังนั้นจึงไม่มีข้อมูล)
  • เพิ่มองค์ประกอบ: เพิ่มรถใหม่ที่มีองค์ประกอบด้านหน้าของรถไฟและขอไปที่ส่วนที่เหลือของรถไฟ
  • ลบองค์ประกอบ: ค้นหาสายการบินที่มีองค์ประกอบ นำมันออก (คุณอาจต้องใช้เครนที่นี่ :)) ติดตั้งแคร่ตลับหมึกไว้ก่อนด้วยแคร่หลัง
  • แทนที่องค์ประกอบ: ค้นหาสายการบินที่มีองค์ประกอบเก่า แลกเปลี่ยนองค์ประกอบเก่าด้วยองค์ประกอบใหม่
  • แทรกองค์ประกอบทันทีหลังจากที่อื่น: ค้นหาแคร่ที่มีองค์ประกอบหลังจากที่คุณต้องการแทรก ใส่สายการบินใหม่หลังจากนั้นซึ่งติดอยู่ตามนั้น (เราไม่ต้องการให้รถไฟแตกออก) และใส่องค์ประกอบใหม่เข้าไป

ในทางตรงกันข้ามคุณอาจคิดว่าอาเรย์เป็นรถไฟที่มีรถม้าจำนวนหนึ่งซึ่งไม่สามารถจัดเรียงใหม่ได้ในทุกทาง สิ่งที่คุณทำได้คือการเปลี่ยนข้อมูลภายใน รุ่นนี้ยังอธิบายถึงปัญหาต่าง ๆ ที่เกิดขึ้นในอาร์เรย์ด้วย:

  • หากคุณต้องการแทรกองค์ประกอบหนึ่งไว้ข้างหน้าคุณจะต้องย้ายองค์ประกอบต่อไปนี้ทั้งหมดไปยังแคร่ถัดไป
  • หากคุณต้องการลบองค์ประกอบหนึ่งคุณจะต้องย้ายองค์ประกอบต่อไปนี้ทั้งหมดหนึ่ง carriage ไปข้างหน้า
  • หากคุณต้องการรถไฟที่มีรถม้าเพิ่มคุณจะต้องสร้างรถไฟใหม่เพราะคุณไม่สามารถเตรียมสายการบินไว้ล่วงหน้าได้ ในทางกลับกันการค้นหารถม้าในอาเรย์นั้นง่ายกว่ามากเพราะคุณสามารถกำหนดหมายเลขได้อย่างถาวร (ลำดับของพวกเขาจะไม่เปลี่ยนแปลง)

สำหรับสแต็ก: "สแต็ก" เป็นโครงสร้างข้อมูลน้อยกว่าความคิด ความคิดของกองคือว่ามันทำหน้าที่เหมือนกองหนังสือ คุณสามารถวางหนังสือไว้บนสุดของสแต็กได้และคุณสามารถนำหนังสือยอดนิยมออกจากสแต็กได้ (อย่างน้อยถ้าหนังสือมีน้ำหนักมากพอ)
ที่ถูกกล่าวว่ารายการที่เชื่อมโยงสามารถใช้เป็นสแต็คถ้าคุณคิดว่าข้อมูลในรถม้าเป็นหนังสือและหนังสือในการขนส่งมากที่สุดครั้งแรกเป็นด้านบนของสแต็ค

ดังนั้นฉันหวังว่านี่จะช่วยคุณได้ อาจจะไม่ได้ บางทีคุณอาจเป็นประเภทภาพมากกว่า ในกรณีนี้ฉันขอแนะนำให้คุณหาใครสักคนที่เก่งในการให้คำอธิบายภาพและอธิบายให้คุณ มันใช้เวลาไม่นาน แต่มันจะคุ้มค่าอย่างแน่นอน

มันโอเคที่จะต่อสู้กับเรื่องนี้ในตอนนี้ แต่เพียงยอมรับมันไม่ใช่ตัวเลือกในระยะยาว


2
คำตอบที่ยอดเยี่ยม! ทำให้ฉันรู้ว่าเราสามารถสอนโครงสร้างข้อมูลพื้นฐานให้กับเด็ก ๆ ผ่านเกมแฟลช / เกมอื่น ๆ ที่มีเป้าหมายมากมาย แนวคิดแบบเดียวกันของรถไฟสามารถช่วยให้เด็ก ๆ เข้าใจเลขฐานสองได้ถ้ารถขบวนแต่ละขบวนมีขนาดใหญ่กว่าและเล็กกว่าเพื่อนบ้าน
งาน

1
ตกลงตอนนี้คุณก็มีแล้วลองมาที่โครงสร้างข้อมูลที่มีหลายลิงก์ ดังนั้นรถไฟจึงผูกปมไว้ด้านข้างซึ่งสามารถเชื่อมต่อกับรถยนต์อีกชุดหนึ่งได้ แต่รถไฟสำหรับรถยนต์ที่ชนิดของภาพนิ่งพร้อมติดกับแทร็คแรก ...
ฟิลิป

12

ฉันจะไม่พูดว่าคุณ "ควรกังวล" เกี่ยวกับเรื่องนี้ แต่ความจริงง่ายๆที่คุณยอมรับจุดอ่อนของคุณแสดงให้เห็นว่าคุณรู้ว่าจะเรียนยากขึ้น ฉันคิดว่าคุณจะได้รับการบริการที่ดีจากทัศนคตินั้นและจะโอเคในระยะยาว


6

ในการอ้างอิงครู CSCI ที่ฉันชอบ:

"Panic, but panic early."

โครงสร้างข้อมูลฟังดูยากใช่มั้ย สำหรับฉันแล้วมันฟังดูเป็นนามธรรมและซับซ้อนเล็กน้อยและที่สำคัญที่สุด ... สำคัญ!

โครงสร้างข้อมูลเป็นหลักสูตรที่สำคัญ และเป็นเรื่องปกติที่จะต้องดิ้นรน แต่ยังคงเดินหน้าต่อไป! ตราบใดที่คุณกิน Wheaties ของคุณและเก็บมันไว้คุณจะไปถึงรุ้งที่bagเต็มไปด้วยgeneric items ข้างใต้


ความตื่นตระหนกในช่วงต้นจะหมายความว่าหลุดออกมาไหม หลังจากโครงสร้างข้อมูลยังมีข้อกำหนดทางคณิตศาสตร์, อัลกอริทึม, ระบบปฏิบัติการ, AI, คอมไพเลอร์, ทฤษฎีการคำนวณ ... มันไม่ได้ทำให้แม่งุนงงได้ง่ายขึ้น แต่บางทีความจริงที่ว่าไม่มีใครเป็นน้องใหม่หรือนักเรียนอีกต่อไป แม้ว่าสิ่งต่าง ๆ จะเริ่มยากขึ้น
งาน

3

คะแนนที่ดีมากในคำตอบอื่น ๆ เพียงหนึ่งบันทึกที่จะเพิ่ม: รายการที่เชื่อมโยง IMO อาจจะยากกว่าเช่นสแต็คสำหรับผู้คนจำนวนมากเพราะพวกเขาสร้างทางอ้อม (แสดงผ่านการอ้างอิง / ตัวชี้ ) และแนวความคิดพื้นฐานเหล่านี้อาจจะยากที่จะเข้าใจ


3

โครงสร้างข้อมูลเป็นคลาส "ยาก" ตัวแรกที่ฉันใช้ เราใช้ Fortran 77 แทน Java แต่แนวคิดส่วนใหญ่เหมือนกัน

ฉันใช้เวลานานกว่าเพื่อนร่วมชั้นของฉันหนึ่งสัปดาห์เพื่อค้นหาแนวคิดของรายการที่เชื่อมโยง ฉันได้รับมอบหมาย biffed แต่หลังจากสองสามช่วงเวลาที่น่าผิดหวังเล็กน้อยกับอาจารย์ของฉันในที่สุดก็คลิก (แท้จริง; ฉันได้ยิน "คลิก" ในหัวของฉันเมื่อฉันเข้าใจในที่สุด)

ทุกคนมีปัญหาบางอย่างในหลักสูตร CS ของพวกเขา (เว้นแต่พวกเขาจะประหลาด) หากคุณเข้าใจว่าจุดอ่อนของคุณอยู่ที่ใดและจะจัดการกับสิ่งเหล่านั้นได้อย่างไรคุณก็ไม่มีอะไรต้องกังวล


1
อย่าตื่นตระหนกทำงานต่อไปและรอให้คลิก ...
NWS

2

คุณมีปัญหาในการทำความเข้าใจกับรายการที่เชื่อมโยงหรือมีปัญหากับการติดตั้งใช้งานของคุณหรือไม่?

ไม่ใช่เรื่องผิดปกติสำหรับโปรแกรมเมอร์ใหม่ที่จะมีปัญหาเพราะอาจเป็นครั้งแรกที่คุณต้องคิดเกี่ยวกับความหมายที่แท้จริงเมื่อคุณเขียน:

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

ฉันทั้งหมดบิดตัวใน ALGOL / W ในการออกกำลังกายเดียวกันเพราะฉันไม่เข้าใจความหมายของภาษา หนึ่งปีต่อมาฉันจำไม่ได้ว่าทำไมฉันถึงมีปัญหา


1

มีขอบเขตที่จะมีบางส่วนของการพัฒนาซอฟต์แวร์ที่คุณพบว่าหนักกว่าคนอื่น ๆ ไม่ว่าจะเป็นอัลกอริธึมบางอย่างหรือรูปแบบการออกแบบบางอย่างหรือขั้นตอนบางอย่างจะแตกต่างกันไปในแต่ละบุคคล ฉันพบว่าฉันต้องใช้บางสิ่งบางอย่างในโปรแกรมจริงก่อนที่ฉันจะเข้าใจอย่างถ่องแท้

ฉันจะกังวลมากขึ้นถ้ามีคนอ้างว่ารู้ทุกอย่างและไม่เคยมีปัญหาในการเรียนรู้อะไรเลย

โดยส่วนตัวฉันไม่เคยมีปัญหากับรายการที่เชื่อมโยง แต่จากนั้นฉันทำงานในโปรแกรมเป็นเวลา 8 ปีที่ใช้มันทุกที่ดังนั้นฉันจึงทำงานกับพวกเขาทุกวัน ตราบใดที่คุณรู้ที่จะหาข้อมูลที่คุณจำเป็นต้องฟื้นฟูความทรงจำของคุณและรู้พื้นที่ที่คุณมี "ปัญหา" คุณควรจะตกลง


ฉันก็คิดว่ามันจะช่วยถ้าฉันสามารถโต้ตอบกับโปรแกรมที่ใช้โครงสร้างข้อมูลเหล่านี้เช่นกัน ฉันอยู่ในระยะที่ฉันถามตัวเองว่าทำไมสิ่งเหล่านี้ถึงมีประโยชน์
เบอร์ทรัมออบรีย์

0

ฉันมีปัญหากับแคลคูลัสและต้องใช้มันเป็นครั้งที่สอง ครั้งที่สองที่ฉันค้นพบว่าฉันฉลาด แต่ครูคณิตศาสตร์คนแรกไม่มีประโยชน์ :)

คุณกำลังจะพบผู้คนจำนวนมากในด้านไอทีที่ไม่สามารถสื่อสารได้ดีแม้แต่ครู ในทางกลับกันบางคนใน IT เป็นนักเขียนและผู้สื่อสารหลักที่ยอดเยี่ยมอย่างแท้จริง

บางครั้งการอ่านนอกบ้านสามารถช่วยได้จริงๆ หนังสือคอมพิวเตอร์มีคุณภาพแตกต่างกันมาก ไปที่อเมซอนแล้วดูว่าคนที่ชอบหนังสือเล่มไหนชอบจริงๆ

โชคดี.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.