Monday, July 4, 2011

ตอนที่ 6: โครงสร้างข้อมูล

. . . . . . . .วันนี้เป็นเรื่องโครงสร้างช้อมูล ถ้าเราเคยใช้ระบบ record ของฐานข้อมูล DBASE, Foxpro หรือ ฐานข้อมูลอื่นๆ จะเห็นโครงสร้างข้อมูล จะมีรายละเอียดย่อยที่เราเรียกว่า ฟิลด์ และการใช้งานในลักษณะนั้น สามารถทำได้แบบนี้
#include <stdio.h>#include <conio.h>
typedef struct TRecord //<------ วิธีกำหนดโครงสร้าง
{ //<--- ขอบเขตของโครงสร้าง
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
char name[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ name
}; //<--- สิ้นสุดขอบเขตของโครงสร้าง
int main( )
{
struct TRecord rec1; //<------ ตัวแปรโครงสร้างของ TRecord ชื่อ rec1
strcpy( rec1.data, "Sawasdee" ); //<----- copy ข้อความให้ฟิลด์ data ของ rec1
printf( "%s\n", rec1.data ); //<----- พิมพ์ข้อมูล
return 0;
}
Sawasdee
. . . . . . . .จากตัวอย่างข้างบน วิธีการกำหนดโครงสร้างให้ทำแบบนี้
typedef struct TRecord //<------ วิธีกำหนดโครงสร้าง
{
//...... ข้างในนี้คือรายการย่อยเรียกว่า ฟิลด์
};
การกำหนดตัวแปรโครงสร้างให้ทำแบบนี้
struct TRecord rec1; //<------ ตัวแปรโครงสร้างของ TRecord ชื่อ rec1
การใช้งานฟิลด์ในโครงสร้างให้ทำแบบนี้
rec1.data //<------- ให้ใส่จุดไช่ปลาแล้วตามด้วยชื่อฟิลด์
ดูแล้วไม่ยากเลยใช่ไหม กลับไปดูใหม่ได้นะครับ ต่อไปเป็นโครงสร้างแบบซ้อน
#include <stdio.h>#include <conio.h>
typedef struct TSubRecord
{
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
};
typedef struct TRecord //<------ วิธีกำหนดโครงสร้าง
{ //<--- ขอบเขตของโครงสร้าง
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
struct TSubRecord sub1; //<----- ตัวแปรโครงสร้างซ้อน
}; //<--- สิ้นสุดขอบเขตของโครงสร้าง
int main( )
{
struct TRecord rec1; //<------ ตัวแปรโครงสร้างของ TRecord ชื่อ rec1
strcpy( rec1.data, "Sawasdee" ); //<----- copy ข้อความให้ฟิลด์ data ของ rec1
strcpy( rec1.sub1.data, "Sawasdee2" ); //<----- copy ข้อความให้ฟิลด์ data ของ sub1
printf( "%s\n", rec1.data ); //<----- พิมพ์ข้อมูล
printf( "%s\n", rec1.sub1.data ); //<----- พิมพ์ข้อมูล
return 0;
}
SawasdeeSawasdee2
. . . . . . . .จากตัวอย่างข้างบน เป็นการกำหนดฟิลด์แบบโครงสร้าง แต่การเข้าถึงฟิลด์ก็เหมือนเดิม คือ ต้องมีจุดไข่ปลาขั้นแล้วตามด้วยชื่อฟิลด์ที่จะใช้งานการใช้งานฟิลด์ในโครงสร้างแรก
rec1.data //<------- ให้ใส่จุดไช่ปลาแล้วตามด้วยชื่อฟิลด์
การใช้งานฟิลด์ในโครงสร้างที่สอง
rec1.sub1.data //<------- ให้ใส่จุดไช่ปลาแล้วตามด้วยชื่อฟิลด์
ไม่ยากอะไรใช่ไหม ลองเพิ่มฟิลด์สิครับ ไม่จำกัดรูปแบบ แต่อย่าลืมการอ้างถึงต้องมีจุดไข่ปลาเสมอ ลองดูอีกแบบนะครับ เป็นการกำหนดฟิลด์แบบต่างๆในโครงสร้าง
#include <stdio.h>#include <conio.h>
typedef struct TSubRecord
{
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
};
typedef struct TRecord //<------ วิธีกำหนดโครงสร้าง
{ //<--- ขอบเขตของโครงสร้าง
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
int value1; //<------ กำหนดแบบ Integer
long value2; //<--- กำหนดแบบ long
struct TSubRecord sub1; //<----- ตัวแปรโครงสร้างซ้อน
}; //<--- สิ้นสุดขอบเขตของโครงสร้าง
int main( )
{
struct TRecord rec1;
strcpy( rec1.data, "Sawasdee" );
rec1.value1 = 100;
rec1.value2 = 200;
strcpy( rec1.sub1.data, "Sawasdee2" ); //<----- copy ข้อความให้ฟิลด์ data ของ sub1
printf( "%s\n", rec1.data );
printf( "%i\n", rec1.value1 );
printf( "%i\n", rec1.value2 );
printf( "%s\n", rec1.sub1.data );
return 0;
}
Sawasdee100
200
Sawasdee2

วันนี้ได้อะไรหว่า ???

typedef struct TSubRecord{
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
};
typedef struct TRecord //<------ วิธีกำหนดโครงสร้าง
{ //<--- ขอบเขตของโครงสร้าง
char data[80]; //<----- รายการย่อยเรียกว่า ฟิลด์ชื่อ data
int value1; //<------ กำหนดแบบ Integer
long value2; //<--- กำหนดแบบ long
struct TSubRecord sub1; //<----- ตัวแปรโครงสร้างซ้อน
}; //<--- สิ้นสุดขอบเขตของโครงสร้าง
strcpy( rec1.data, "Sawasdee" );
rec1.value1 = 100;
rec1.value2 = 200;
strcpy( rec1.sub1.data, "Sawasdee2" ); //<----- copy ข้อความให้ฟิลด์ data ของ sub1

No comments:

Post a Comment