การจัดการข้อมูลเป็นหัวใจสำคัญของการเขียนโปรแกรม ไม่ว่าจะเป็นในสาขาวิทยาการคอมพิวเตอร์ หรือการใช้งานทั่วไปในอุตสาหกรรมต่างๆ วิธีการเก็บและการจัดการข้อมูลที่ได้ประสิทธิภาพนั้นมีหลายรูปแบบ หนึ่งในนั้นคือการใช้โครงสร้างข้อมูลแบบ Binary Search Tree (BST) ซึ่งเป็นโครงสร้างพื้นฐานที่มักถูกนำมาใช้ในภาษา C ด้วยความที่ C เป็นภาษาโปรแกรมที่ให้ความสามารถในการควบคุมหน่วยความจำอย่างแม่นยำ, BST จึงถูกแนะนำในการจัดการข้อมูลด้วยวิธีนี้
BST เป็นโครงสร้างข้อมูลแบบไม่เชิงเส้น (non-linear) ที่มีลักษณะเป็นต้นไม้ องค์ประกอบหลักของมันคือ node แต่ละ node มีสามส่วนประกอบหลัก:
1. Data: ข้อมูลที่ต้องการเก็บ
2. Left pointer: ชี้ไปยัง subtree ที่มีข้อมูลน้อยกว่า
3. Right pointer: ชี้ไปยัง subtree ที่มีข้อมูลมากกว่า
BST ช่วยให้การค้นหา, การแทรก (insert), และการลบข้อมูล (delete) มีประสิทธิภาพเนื่องจากการทำงานตามหลัก 'การแบ่งแยกและครอง' หรือ Divide and Conquer โดยหลักการนี้ทำให้เวลาที่ใช้ในการทำงานมีค่าเฉลี่ยเป็น O(log n)
ก่อนจะเข้าสู่ตัวอย่างโค้ด ต้องทราบว่าการจัดการ memory ในภาษา C เป็นเรื่องสำคัญ การใช้ malloc และ free จะต้องเกิดขึ้นอย่างเหมาะสมเพื่อป้องกัน memory leak ด้วยความที่ C ไม่มี garbage collector เหมือนในภาษา Java หรือ Python
#include
#include
// โครงสร้างของ node ใน BST
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// ฟังก์ชันสร้าง node ใหม่
Node* createNode(int value) {
Node* newNode = (Node*) malloc(sizeof(Node));
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// ฟังก์ชันแทรก node ใหม่
Node* insert(Node* root, int data) {
// กรณีที่ root ยังไม่มีค่า
if (root == NULL) {
return createNode(data);
}
// แทรกข้อมูลไปยัง subtree ที่เหมาะสม
if (data < root->data) {
root->left = insert(root->left, data);
} else if (data > root->data) {
root->right = insert(root->right, data);
}
return root;
}
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM