โครงสร้างข้อมูล
Data structures
Data structure หรือโครงสร้างข้อมูลเป็นกลุ่มของตัวแปรที่สามารถรวมอยู่ในตัวแปรตัวเดียว เราเรียกว่า structure ตัวแปรที่อยู่ข้างในประเภทข้อมูลนี้เรียกว่า members หรือสมาชิกของ structure ซึ่งสมาชิกของมันสามารถเป็นประเภทอื่นๆ และมีขนาดต่างๆ ในภาษา 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 ข้างในมัน เราสามารถเข้าถึงสมาชิกของ structure ได้โดยการใช้เครื่องหมายจุด (.)
และตามด้วยชื่อของสมาชิก เช่น 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) สามารถเข้าถึงได้โดยชื่อของโครงสร้างข้อมูลตามด้วยเครื่องหมายจุด (.) และตามด้วยชื่อตัวแปรสมาชิกที่อยู่ในโครงสร้างข้อมูล ดังนั้น เราสามารถทำได้ทุกอย่างเหมือนกับตัวแปร แต่ในการเข้าถึงจะแตกต่าง ซึ่งเป็นการเข้าถึงข้อมูลแบบออบเจ็ค
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++ ซึ่งโครงสร้างข้อมูลนั้นเป็นประเภทข้อมูลของมันเอง ที่ประกอบสมาชิกหรือข้อมูลอื่นอยู่ภายใน และนอกจากนี้ คุณยังได้เห็นตัวอย่างในการใช้งานโครงสร้างข้อมูลกับอาเรย์กับการส่งเข้าไปยังฟังก์ชัน