ประเภทข้อมูลบทคัดย่อและโครงสร้างข้อมูล


32

มันค่อนข้างยากสำหรับฉันที่จะเข้าใจเงื่อนไขเหล่านี้ ฉันค้นหาใน google และอ่านวิกิพีเดียเล็กน้อย แต่ก็ยังไม่แน่ใจ ฉันตัดสินใจแล้วว่า:

Abstract Data Typeเป็นคำนิยามของชนิดใหม่อธิบายคุณสมบัติและการดำเนินงานของมัน

โครงสร้างข้อมูลเป็นการใช้งาน ADT ADT หลายตัวสามารถนำไปใช้กับโครงสร้างข้อมูลเดียวกันได้

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


3
ก่อนอื่นคุณอาจต้องการอ่านอาเรย์กับสแต็คแตกต่างกันอย่างไร?
chrisaycock


คำตอบ:


24

พูดง่ายๆคือ ADT (Abstract Data Type) เป็นคำอธิบายที่สมเหตุสมผลมากกว่าในขณะที่โครงสร้างข้อมูลเป็นรูปธรรม

คิดว่า ADT เป็นภาพของข้อมูลและการดำเนินการเพื่อจัดการและเปลี่ยนแปลง

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


แต่ฉันสามารถใช้ Stack และ Queue ด้วย (นั่นคือ ADT) ภายในอัลกอริทึม ไม่ได้หรือไม่
FedericoCapaldo

Stack และ Queue เป็นการนำเสนอแบบลอจิคัลพร้อมความหมายเฉพาะด้านวิทยาการคอมพิวเตอร์ อย่างไรก็ตามการใช้คิวใน C #, Java, Go หรือ [ชื่อภาษาของคุณ] จะแตกต่างกันเล็กน้อย คิวแนวคิดคือ ADT, Java Queue เป็นโครงสร้างข้อมูล เหมือนกับการใช้ C # Stack
Berin Loritsch

53

ADT คือการอินเตอร์เฟซ ( สิ่งที่มันไม่ ) สิ่งที่โครงสร้างข้อมูลคือการชั้นเรียน ( ว่ามันไม่ได้ )

ตัวอย่างบางส่วน:

ADT: List
DS:  ArrayList, LinkedList...

ADT: Map
DS:  HashMap, TreeMap...

ฉันเดาว่าคุณเข้าใจ


ADT สามารถพูดได้ว่าเป็นโครงสร้างข้อมูลทั่วไป?
Owais Qureshi

1
นี่ควรเป็นคำตอบที่ทำเครื่องหมายไว้ ไม่สามารถพูดได้ง่ายกว่านี้สำหรับคนธรรมดา
deppfx

ขอบคุณ @dagnelies สำหรับคำตอบที่ง่ายและมีประสิทธิภาพ ควรทำเครื่องหมายเป็นคำตอบ
Sarun UK

1
ไม่แน่ใจว่าทำไม ADT is to a Data Structure, what an Interface (what it does) is to a Class (how it does it)แต่ฉันชอบที่มีขนาดเล็กอีกครั้งในการจัดเรียงถ้อยคำที่นี่: ตัวอย่างคือจุดที่
Aditya MP

10

Abstract Data Type: ADT อาจถูกกำหนดให้เป็นชุดของค่าข้อมูลและการดำเนินการที่เกี่ยวข้องซึ่งมีการระบุอย่างแม่นยำโดยไม่ขึ้นกับการใช้งานใด ๆ ดังนั้น Abstract Data Type จึงเป็นการรวบรวมข้อมูลและชุดของการดำเนินการที่ใช้ในการจัดการข้อมูลนั้น ชุดของการดำเนินการกำหนดอินเทอร์เฟซของ ADT ตราบใดที่ ADT ปฏิบัติตามเงื่อนไขของอินเทอร์เฟซก็ไม่สำคัญว่าจะใช้ ADT อย่างไร เนื่องจากใน ADT ค่าข้อมูลและการดำเนินการถูกกำหนดด้วยความแม่นยำทางคณิตศาสตร์แทนที่จะเป็นการใช้งานในภาษาคอมพิวเตอร์เราอาจมีเหตุผลเกี่ยวกับผลกระทบของการดำเนินงานความสัมพันธ์กับชนิดข้อมูลนามธรรมอื่น ๆ ไม่ว่าโปรแกรมจะใช้ชนิดข้อมูลเป็นต้นหรือไม่

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

ADT ที่อัปเดตได้คือการดำเนินการบางอย่างที่เปลี่ยนค่าของ ADT ตัวอย่างเช่นสมมติว่าเรามีการดำเนินการที่เรียกว่า 'ป๊อป' ที่ใช้สแต็กเป็นอาร์กิวเมนต์และแก้ไข (“ เข้าที่”,“ ทำลายล้าง”) โดยลบรายการที่มีลำดับความสำคัญสูงสุด การดำเนินการนี้จะถือว่าไม่บริสุทธิ์และ ADT ทั้งหมดก็จะไม่บริสุทธิ์ด้วย ADT อาจเป็น ADT ที่ผู้ใช้กำหนด

เรารู้ว่า Abstract Data Type เป็นชนิดข้อมูลที่ตรงตามเงื่อนไขสองข้อต่อไปนี้:

  1. การเป็นตัวแทนหรือคำจำกัดความของประเภทและการดำเนินงานที่มีอยู่ในหน่วยไวยากรณ์เดียว

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

ผู้ใช้กำหนดประเภทข้อมูลนามธรรมควรจัดเตรียม:

  1. นิยามชนิดที่อนุญาตให้หน่วยโปรแกรมประกาศตัวแปรประเภท แต่ซ่อนการแสดงตัวแปรเหล่านี้

  2. ชุดของการดำเนินการสำหรับจัดการกับวัตถุประเภท

ตัวอย่างของชนิดข้อมูลนามธรรมที่ผู้ใช้กำหนดคือโครงสร้าง 'C' มีสี่ประเภทพื้นฐาน: int, char, float และ double อย่างไรก็ตาม 'C' ยังช่วยให้โปรแกรมเมอร์สามารถกำหนดประเภทของตนเองได้ โครงสร้างเป็นตัวอย่างหนึ่ง โครงสร้างคือการรวมส่วนต่าง ๆ โดยที่แต่ละส่วนมีชนิดที่มีอยู่บางส่วน

struct abc

{int x;

float y;

};

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

struct abc a;

คำหลัก typedef ช่วยให้เราสามารถสร้างชื่อประเภทใหม่สำหรับประเภทใหม่ของเรา

ตัวอย่างเช่น:

typedef struct abc AB;

โดยที่ AB เป็นชื่อประเภทใหม่ที่สามารถใช้สร้างประเภทใหม่ได้

AB b;

โครงสร้างข้อมูล: ต่อไปนี้เป็นคุณสมบัติลักษณะของโครงสร้างข้อมูล:

  1. มันมีรายการข้อมูลส่วนประกอบซึ่งอาจเป็นอะตอมหรือโครงสร้างข้อมูลอื่น (ยังคงเป็นโดเมน)

  2. ชุดของการดำเนินการกับหนึ่งในองค์ประกอบของรายการ

  3. กำหนดกฎว่าส่วนประกอบเกี่ยวข้องกันอย่างไรและกับโครงสร้างโดยรวม (การยืนยัน)

โครงสร้างข้อมูล:

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

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


0

ประการแรกศัพท์ในโครงสร้างข้อมูลอาจสร้างความสับสนได้

ADTเป็นเหมือนทฤษฎีหรือแบบจำลองหรือแนวทางอื่น ๆ ที่บอกว่าโครงสร้างข้อมูลควรทำงานอย่างไรการดำเนินการที่ควรสนับสนุน ฯลฯประเภทข้อมูลนามธรรมพื้นฐานสามประเภทคือคอนเทนเนอร์พจนานุกรมและคิวลำดับความสำคัญ ตัวอย่างเช่นพจนานุกรมมันบอกเราว่าทุกโครงสร้างข้อมูลซึ่งใช้พจนานุกรมนี้ ADT จะต้องสนับสนุนคู่ของคีย์ - ค่า, การค้นหาตามคีย์, การแทรกของไอเท็ม, การค้นหาผู้สืบทอดและบรรพบุรุษของคีย์ที่กำหนดเป็นต้น

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

ฉันคิดว่าความสับสนที่แท้จริงเกิดขึ้นเมื่อมีคนตั้งชื่อ DS เป็น ADT ตัวอย่างเช่นบางคนจะเรียก DS ดังกล่าวเป็น 'พจนานุกรม' แทนที่จะเป็น DictImplementation ซึ่งถูกกฎหมายอย่างสมบูรณ์มันแค่ทำให้เกิดความสับสน

Ref: Skiena: คู่มือการออกแบบอัลกอริทึม

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