เมื่อโปรแกรมเมอร์พูดถึง "โครงสร้างข้อมูล" พวกเขาจะอ้างถึงอะไร


18

เมื่อโปรแกรมเมอร์พูดคุยเกี่ยวกับ "โครงสร้างข้อมูล" ที่พวกเขาเพียงพูดคุยเกี่ยวกับชนิดข้อมูลนามธรรมเช่นรายการ , ต้นไม้ , แฮช , กราฟฯลฯ ?

หรือคำนั้นรวมถึงโครงสร้างใด ๆ ที่เก็บข้อมูลเช่นประเภทคอมโพสิต (วัตถุคลาส, structs, enums ฯลฯ ) และประเภทดั้งเดิม (บูลีน, int, ถ่าน ฯลฯ )?

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

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

โครงสร้างข้อมูลเป็นการใช้งานจริงของชนิดข้อมูลนามธรรมเฉพาะ

หรือwikibook นี้กับโครงสร้างข้อมูลซึ่งใช้คำในประโยคเช่นนี้

เนื่องจากโครงสร้างข้อมูลเป็น abstractions ระดับที่สูงกว่าจึงมีการดำเนินการกับกลุ่มข้อมูลเช่นการเพิ่มรายการลงในรายการหรือค้นหารายการที่มีลำดับความสำคัญสูงสุดในคิว

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


1
คำนี้พัฒนาไปตามกาลเวลา ซีฝูงชนตามปกติใช้คำประเภททั่วไปของโครงสร้างที่สามารถถือหลายรายการของข้อมูลที่เกี่ยวข้องกัน (เชื่อมโยงรายการต้นไม้ ฯลฯ ... )
Oded

1
มันไม่ใช่แค่คำศัพท์ใช่ไหม? สตริงเป็นจริงอาร์เรย์ของตัวอักษรและมันเป็นโครงสร้างข้อมูลซึ่งหมายถึงลำดับของ charachters บุคคล
Mithir

3
ไม่ใช่ "โครงสร้างข้อมูล" เป็นคำที่กำหนดเองหรือไม่ มันเป็นโครงสร้างใด ๆ สำหรับการจัดเก็บข้อมูล! มันยากที่จะตอบคำถามอย่างจริงจัง
Michael K

1
@ ราเชลดังนั้นคำถามของคุณคือว่าประเภทข้อมูลดั้งเดิมเป็นโครงสร้างข้อมูลหรือไม่? if programmers mean something different when they talk about data structuresยังคงสำรวจความคิดเห็น
yannis

2
"ดั้งเดิม" สมบูรณ์ขึ้นอยู่กับขอบเขต ในระดับไบนารีไม่มีสิ่งเช่น int เช่น ในระดับที่ต่ำกว่าไม่มีบิตแม้แต่เพียงอคติไฟฟ้า นี่เป็นคำที่นิยามตัวเอง - ไม่ใช่คำถามที่ดีเลย
Michael K

คำตอบ:


20

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

อย่างไรก็ตามคำนี้ยังมีความหมายอื่นสำหรับโปรแกรมเมอร์

เนื่องจากคำว่า "โครงสร้างข้อมูล" นั้นกว้างนักพัฒนาจึงมักใช้คำเฉพาะเพื่อระบุสิ่งที่พวกเขากำลังพูดถึงเช่นclassหรือdata objectหรือprimitive typeและคำเฉพาะที่ใช้สำหรับประเภทข้อมูลที่ซับซ้อนหรือนามธรรมส่วนใหญ่คือ "โครงสร้างข้อมูล"

นี่คือเหตุผลที่คุณได้ยิน "โครงสร้างข้อมูล" ที่ใช้บ่อยที่สุดสำหรับชนิดข้อมูลนามธรรมเช่นอาร์เรย์รายการต้นไม้และแฮชเทเบิลและไม่ใช่สำหรับสิ่งต่าง ๆ เช่นชนิดข้อมูลดั้งเดิม


4
ฉันคิดว่ากราฟเป็นเรื่องธรรมดามาก แต่ก็ไม่ค่อยมีในห้องสมุดมาตรฐานเพราะมันยากที่จะสร้างด้วยวิธีทั่วไปและมีประสิทธิภาพ
Klaim

ดังนั้นเมื่อโปรแกรมเมอร์พูดถึง "โครงสร้างข้อมูล" พวกเขามักจะพูดถึงประเภทข้อมูลนามธรรม ? และแม้ว่าประเภทดึกดำบรรพ์ (เช่น int, bool หรือ char) และคอมโพสิตประเภท (เช่น class, struct หรือ enum) ก็ยังถือว่าเป็นโครงสร้างข้อมูลโดยโปรแกรมเมอร์
Rachel

1
@ ราเชลในทางเทคนิคแล้วโครงสร้างข้อมูลอาจเป็นการนำ homebrewed มาใช้โดยใช้พอยน์เตอร์ / คลาส ฯลฯ ฉันสร้าง "data structure" ที่น่าเกลียดคล้ายกับรายการซึ่งเป็นส่วนหนึ่งของการบ้าน C ++ เราไม่เรียกโครงสร้างข้อมูลของคลาสบ่อย ๆ เพราะโดยทั่วไปมักจะมีความเฉพาะเจาะจงมากกว่า
Ben Brocka

@BenBrocka Ahhh ดังนั้น "data structure" เป็นคำที่กว้างมากซึ่งครอบคลุมวัตถุอื่น ๆ เหล่านี้อย่างไรก็ตามโดยทั่วไปแล้วมันจะดีกว่าเฉพาะเมื่อพูดถึงโครงสร้างข้อมูลและใช้คำเช่น "data data ดั้งเดิม" หรือ "data object" แทนที่จะเป็น "โครงสร้างข้อมูล". และคำเฉพาะที่ใช้กันทั่วไปสำหรับวัตถุที่ชอบLists, Trees, Graphsฯลฯ เพิ่งเกิดขึ้นเป็น "โครงสร้างข้อมูล"
ราเชล

1
@ ราเชลใช่แม้ว่าทุกอย่างจะเป็นโครงสร้างข้อมูล (พูดอย่างเคร่งครัด) คำว่า 'โครงสร้างข้อมูล' มักจะหมายถึงประเภทข้อมูลนามธรรมเหล่านั้น ฉันว่าคำว่า 'โครงสร้างข้อมูล' จากมุมมองของนักพัฒนาหมายถึงวิธีที่เขาเก็บข้อมูล อาจเป็นรายการในหน่วยความจำไฟล์ในดิสก์หรืออาจเป็นโครงสร้างข้อมูลแบบกำหนดเองที่เขานำมาใช้เอง
อเล็กซ์

5

คำนี้หมายถึงทั้งสองอย่าง แต่สิ่งที่ชอบintsและbooleansถือเป็นประเภทข้อมูลดั้งเดิม (หรือโครงสร้างข้อมูลดั้งเดิม) คำนี้อ้างถึงสิ่งใดก็ตามที่เก็บข้อมูลในลักษณะเฉพาะ แน่นอนintตรงตามคำจำกัดความนี้เช่นเดียวกับบางสิ่งบางอย่างเช่นตารางแฮชเท่านั้นมันง่ายกว่า

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


2
ฉันไม่คิดว่าฉันเคยได้ยินใครบางคนอ้างถึงintว่าเป็น "โครงสร้างข้อมูล"
Qwertie

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

0

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

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

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

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