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

27 June 2015

โครงสร้างข้อมูลในภาษา C

โครงสร้างข้อมูล (structure) คือกลุ่มของตัวแปรที่สามารถสร้างและเก็บไว้ในตัวแปรเดียวที่เรียกว่า data structure ในภาษา C เราสามารถสร้างและออกแบบโครงสร้างข้อมูลของเราได้ตามที่ต้องการ โดยโครงสร้างข้อมูลจะมีสมาชิกที่เป็นตัวแปร (members) และฟังก์ชันได้ในเวลาเดียวกัน

การประกาศโครงสร้างข้อมูล

ในภาษา C การประกาศโครงสร้างข้อมูลมีรูปแบบดังนี้

struct struct_name
{
    member_type1 member_name1;
    member_type2 member_name2;
    member_type3 member_name3;
    .
    .
} object_names;

เราใช้คำสั่ง struct ในการประกาศโครงสร้างข้อมูล struct_name เป็นชื่อของโครงสร้างข้อมูลโดยมีรูปแบบการตั้งชื่อเหมือนตัวแปร คือเป็นตัวอักษร ตัวเลข และเครื่องหมาย underscore (_) และต้องไม่ขึ้นต้นด้วยตัวเลข ในบล็อคของ structure จะเป็นการประกาศสมาชิก (members) ซึ่งสามารถเป็นได้ทั้งตัวแปรและฟังก์ชัน สำหรับ object_names เป็นตัวแปรออบเจ็คของโครงสร้างข้อมูล ซึ่งเป็นทางเลือกในการประกาศ มาดูตัวอย่าง

struct person
{
    char name[20];
    int age;
    float money;
} student, teacher;

ในตัวอย่าง เราได้สร้างโครงสร้างข้อมูลชื่อว่า person โดยมีสมาชิก 3 ตัว โดยเป็นตัวแปรที่เก็บข้อมูลประเภทต่างๆ ที่เป็น name, age และ money สำหรับสมาชิกของโครงสร้างข้อมูล คุณไม่สามารถกำหนดค่าเริ่มต้นเหมือนการประกาศตัวแปรได้ และเราได้สร้างตัวแปรออบเจ็คของโครงสร้างข้อมูลนี้คือ student และ teacher อย่างไรก็ตามเราสามารถสร้างตัวแปรออบเจคนี้ได้ภายหลังเมื่อตอนโปรแกรมรัน โดยใช้คำสั่ง

struct person student, teacher;

การกำหนดค่าและอ่านข้อมูลจากโครงสร้างข้อมูล

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

#include <stdio.h>

struct person
{
    char name[20];
    int age;
    float money;
};

int main()
{
    struct person student, teacher;

    strcpy(student.name, "Marcus");
    student.age = 18;
    student.money = 10.25;

    strcpy(teacher.name, "James");
    teacher.age = 20;
    teacher.money = 49.5;

    printf("%s has age %d and money %.2f usd\n", student.name, student.age, student.money);
    printf("%s has age %d and money %.2f usd\n", teacher.name, teacher.age, teacher.money);

    return 0;
}

ในตัวอย่างเราได้ประกาศตัวแปรออบเจ็คของโครงสร้างข้อมูล person มาสองตัวคือ student และ teacher โดยใช้คำสั่ง

struct person student, teacher;

หลังจากที่ประกาศแล้วเราสามารถเข้าถึงข้อมูลโดยการใช้ ชื่อของออบเจคที่สร้างขึ้น ตามด้วยเครื่องหมายจุด (.) และชื่อสมาชิก เช่น student.name เป็นการเข้าถึงตัวแปร name ของออบเจค student สำหรับการกำหนดค่าให้กับตัวแปร char array เราจะใช้ฟังก์ชัน strcpy และในตอนท้ายเราแสดงข้อมูลเหล่านั้นออกทางหน้าจอ ซึ่งจะได้ผลลัพธ์ดังนี้

Marcus has age 18 and money 10.25 usd
James has age 20 and money 49.50 usd

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

การใช้งาน structure กับอาเรย์

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

#include <stdio.h>

struct point
{
    int x;
    int y;
};

int main()
{
    const int TOTAL_POINT = 4;

    struct point p[TOTAL_POINT];
    p[0].x = 1;
    p[0].y = 2;
    p[1].x = -3;
    p[1].y = -5;
    p[2].x = 4;
    p[2].y = 8;
    p[3].x = 0;
    p[3].y = -1;

    printf("There are %d steps for robot to walk.\n", TOTAL_POINT);

    int i = 0;
    for (i = 0; i < TOTAL_POINT; i++)
    {
        printf("Step %d: walk to point %d, %d\n", i, p[i].x, p[i].y);
    }

    return 0;
}

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

p[0].x = 1;
p[0].y = 2;
p[1].x = -3;
p[1].y = -5;
p[2].x = 4;
p[2].y = 8;
p[3].x = 0;
p[3].y = -1;

หลังจากนั้นเรากำหนดค่าให้กับตำแหน่งการเดินของหุ่นยนต์ทั้งหมด 4 ตำแหน่ง ซึ่งในการเข้าถึงค่าของ struct ในอาเรย์นั้นสามารถทำได้โดยเพิ่มวงเล็บ [] หลังชื่อของอาเรย์ของ struct เพื่อเข้าถึงตำแหน่งที่ต้องการ หลังจากนั้นเราใช้คำสั่ง For loop เพื่อแสดงผลลำดับการเดินของหุ่นยนต์ของเรา

There are 4 steps for robot to walk.
Step 0: walk to point 1, 2
Step 1: walk to point -3, -5
Step 2: walk to point 4, 8
Step 3: walk to point 0, -1

นี่เป็นผลลัพธ์การทำงานของโปรแกรม ซึ่งหุ่นยนต์จะเดินไปยังจุดต่างๆ ที่เราได้กำหนดไว้ในอาเรย์ของ struct ทั้ง 4 จุด คุณสามารถเพิ่มจุดการเดินได้ในตัวแปร TOTAL_POINT และเพิ่มจุดการเดินสำหรับทุกลำดับให้กับหุ่นยนต์

ในบทนี้ คุณได้เรียนรู้เกี่ยวเกี่ยวกับวิธีการสร้างและใช้งานโครงสร้างข้อมูลพื้นฐานในภาษา C และการใช้งาน struct กับพอยน์เตอร์และอาเรย์

บทความนี้เป็นประโยชน์หรือไม่?Yes·No