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

Data structures

Data structure เป็นกลุ่มของตัวแปรที่สามารถรวมอยู่ในตัวแปรตัวเดียว เราเรียกว่า structure ตัวแปรที่อยู่ข้างในมันเรียกว่า members members สามารถมีประเภทและขนาดต่างๆ ในภาษา C++ เราสามารถสร้างโครงสร้างข้อมูลจากรูปแบบตามนี้:

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

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

struct person {
string name;
int age;
float money;
} ;
person student, teacher, doctor;

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

struct person {
string name;
int age;
float money;
} student, teacher, doctor;

Assign and reading structure members

เราได้สร้างโครงสร้างออบเจ็คของโครงสร้างข้อมูล person ซึ่งแต่ละออบเจ็คจะมีสมาชิกของ person ข้างในมัน เราสามารถเข้าถึง member โดยการใช้เครื่องหมายจุด(.) และตามด้วยชื่อของ member เช่น student.name ต่อไปเราจะดูตัวอย่างของการใช้โครงสร้างข้อมูล

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

struct person {
string name;
int age;
float money;
} ;

int main ()
{
person student, teacher;

student.name = "Mateo";
student.age= 14;
student.money = 50.4;

cout << "Enter teacher name: ";
cin >> teacher.name;
cout << "Enter teacher age: ";
cin >> teacher.age;
cout << "Enter teacher money: ";
cin >> teacher.money;

cout << "Student's info" << endl;
cout << student.name << " is " << student.age;
cout << " year old and has $" << student.money << endl;

cout << "Teacher's info" << endl;
cout << teacher.name << " is " << teacher.age;
cout << " year old and has $" << teacher.money << endl;
return 0;
}

ในตัวอย่างนี้เราใช้โครงสร้างข้อมูลperson ที่เราเพิ่งสร้างในตัวอย่างอันก่อน และเราสร้างตัวแปรของโครงสร้างข้อมูล person สองตัวแปรคือ student และ teacher สมาชิกในตัวแปรโครงสร้างข้อมูล (structure object) สามารถเข้าถึงได้โดยชื่อของโครงสร้างข้อมูลตามด้วยเครื่องหมายจุด (.) และชื่อของ member ให้คิดเหมือนกับว่า member คือตัวแปรที่อยู่ในโครงสร้างข้อมูล ดังนั้น เราสามารถทำได้ทุกอย่างเหมือนกับตัวแปร แต่ในการเข้าถึงจะแตกต่าง ซึ่งเป็นการเข้าถึงข้อมูลแบบออบเจ็ค

Enter teacher name: John
Enter teacher age: 30
Enter teacher money: 1043
Student's info
Mateo is 14 year old and has $50.4
Teacher's info
John is 30 year old and has $1043

หลังจากนั้นเราได้ทดลองรันโปรแกรม และนี่เป็นผลลัพธ์การทำงานของโปรแกรม โดยเราได้กำหนดข้อมูลของนักเรียนในโค้ดและข้อมูลของอาจารย์นั้นรับค่าเข้ามาทางคีย์บอร์ด

การใช้ Struct กับอาเรย์และฟังก์ชัน

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

#include <iostream>
#include <cstdlib> // srand()
#include <ctime> // time()
#include <cmath> // pow(), sqrt()

using namespace std;

struct point {
int x;
int y;
int z;
};

// find distance between two points in 3D
double distance3D(point a, point b) {
return sqrt(pow(b.x - a.x, 2) +
pow(b.y - a.y, 2) +
pow(b.z - a.z, 2));
}

// random number between min and max
int getRandomNumber(int min, int max) {
return rand() % (max - min) + min;
}

int main ()
{
const int SIZE = 10;

//initialize random seed
srand(time(NULL));

// declare array of struct
point p1[SIZE];
point p2[SIZE];

for (int i = 0; i < SIZE; i++) {
p1[i].x = getRandomNumber(0, 10); // random 0 to 10
p1[i].y = getRandomNumber(0, 10);
p1[i].z = getRandomNumber(0, 10);

p2[i].x = getRandomNumber(0, 10);
p2[i].y = getRandomNumber(0, 10);
p2[i].z = getRandomNumber(0, 10);
}

for (int i = 0; i < SIZE; i++) {
cout << "[";
cout << p1[i].x << ", " << p1[i].y << ", " << p1[i].z;
cout << "] to [";
cout << p2[i].x << ", " << p2[i].y << ", " << p2[i].z;
cout << "] = " << distance3D(p1[i], p2[i]) << endl;
}

return 0;
}

ในตัวอย่าง เราได้ประกาศ struct point สำหรับเก็บพิกัดในสามมิติ และเราได้สร้างอาเรย์ของ struct มาสองตัวคือ p1 และ p2 อาเรย์เหล่านี้ถูกกำหนดขนาดให้เป็น 10 โดยโปรแกรมของจะทำการสุ่มค่าพิกัดในสามมิติจากที่มีค่าในจุดต่างๆ ระหว่าง 0 - 10 ลงในอาเรย์ทั้งสองอย่างละ 10 พิกัด หลังจากสุ่มค่าเสร็จสิ้นแล้ว เราทำการหาระยะห่างของทั้งสองจุดที่เป็นคู่อันดับกันไปในอาเรย์

double distance3D(point a, point b) {
return sqrt(pow(b.x - a.x, 2) +
pow(b.y - a.y, 2) +
pow(b.z - a.z, 2));
}

ฟังก์ชัน distance3D() เป็นฟังก์ชันในการหาระยะห่างของจุดสองจุดในสามมิติของเรา ในฟังก์ชันนั้นมีพารามิเตอร์เป็น struct โดยเราได้ให้ตัวอย่างในการใช้งาน struct กับฟังก์ชัน โดยเราได้ส่งจุดสองจุดสำหรับหาระยะห่างเข้ามาจากสูตร

[5, 7, 0] to [9, 8, 1] = 4.24264
[4, 4, 1] to [2, 5, 8] = 7.34847
[3, 8, 5] to [8, 1, 0] = 9.94987
[2, 4, 1] to [8, 0, 9] = 10.7703
[3, 3, 4] to [8, 8, 7] = 7.68115
[9, 3, 8] to [9, 4, 0] = 8.06226
[8, 7, 6] to [3, 9, 6] = 5.38516
[1, 3, 2] to [9, 5, 6] = 9.16515
[7, 7, 3] to [3, 2, 9] = 8.77496
[8, 4, 9] to [1, 6, 5] = 8.30662

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

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


บทความเกี่ยวกับ โครงสร้างข้อมูล

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

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

Structs ในภาษา C#

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับโครงสร้างข้อมูลในภาษา C# โครงสร้างข้อมูล (Struct) เป็นตัวแปรที่ใช้สำหรับเก็บข้อมูลที่มีความเกี่ยวข้องกันในรูปแบบของออบเจ็ค Stru...

Structures ในภาษา Visual Basic

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