Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

อาร์เรย์ผสม (Heterogeneous Arrays) ในโครงสร้างข้อมูล


ปัญหาของอาร์เรย์ทั่วไป

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

วิธีที่ 1: ใช้ Union ในภาษา C

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

struct Vehicle {
    int id;
    union {
        Bus b;
        Bike c;
        Car d;
    };
};

โปรแกรมเมอร์ต้องกำหนดข้อตกลงเองว่า id tag จะใช้อย่างไร เช่น id = 0 หมายถึง Bus เป็นต้น Union จะจัดสรรหน่วยความจำตามขนาดของชนิดที่ใหญ่ที่สุดระหว่าง Bus, Bike, Car ซึ่งอาจ造成การสูญเสียหน่วยความจำหากขนาดต่างกันมาก

วิธีที่ 2: ใช้การสืบทอด (Inheritance) ในภาษาเชิงวัตถุ

ในภาษาเชิงวัตถุ (Object-Oriented) สามารถใช้แนวคิดการสืบทอด (Inheritance) สมมติมีคลาส Vehicle และ Bus, Bike, Car เป็นคลาสลูก (Subclass) หากสร้างอาร์เรย์สำหรับ Vehicle จะสามารถเก็บอ็อบเจกต์ของคลาสลูกทั้งหมดได้ วิธีนี้ช่วยให้เก็บข้อมูลหลายชนิดในอาร์เรย์เดียวได้อย่างมีประสิทธิภาพ