โครงสร้างข้อมูลแบบอาร์เรย์ เรคคอร์ด และพอยเตอร์
1. ลักษณะของ Arrays
อะเรย์
เป็นโครงสร้างข้อมูลที่เรียกว่า Linear List
มีลักษณะคล้ายเซ็ตในคณิตศาสตร์ คือ
อะเรย์ประกอบด้วยสมาชิกที่มีจำนวนคงที่
มีรูปแบบข้อมูลเป็นแบบเดียวกันกับสมาชิกแต่ละตัวใช้เนื้อที่จัดเก็บที่มี
ขนาดเท่ากันเรียงต่อเนื่องในหน่วยความจำหลัก
อะเรย์ถือเป็นโครงสร้างข้อมูลแบบสแตติค (Static Data Structure)
โดยอะเรย์จะมีขนาดคงที่เป็นแถวลำดับแบบอันดับ
ที่ประกอบด้วยชุดตัวแปรที่เป็นช่องหลายๆช่องที่มีชื่อเดียวกัน
สำหรับใช้เก็บข้อมูลชนิดเดียวกัน โดยข้อมูลที่อยู่ในช่องเรียกว่า
เป็นสมาชิกของอะเรย์
แถวลำดับแบบอันดับ (Ordered List)
เป็นรูปแบบของการจัดเก็บข้อมูลเข้าไว้ด้วยกันแบบเรียงลำดับหรือเป็นแถวเส้น
ตรง
ตัวอย่าง
เช่น
(A,B,C,D.....Z)
เป็นแถวลำดับแบบอันดับของตัวอักษรภาษาอังกฤษ
อะเรย์มีคุณสมบัติหลักๆดังนี้
·
มีขนาดคงที่
·
ข้อมูลที่จัดเก็บแสดง ผลออกมาแบบเรียง ลำดับ
·
สามารถดึงสมาชิกลำดับ ที่ i ใดๆ ออกมาได้
·
สามารถเพิ่มสมาชิกใหม่ เข้าไปในแถวลำดับ ได้
·
สามารถแทนที่สมาชิก ลำดับที่ i ใดๆได้
·
สามารถลบสมาชิกที่มี อยู่ออกจากแถวลำดับ ได้
2. การเข้าถึงข้อมูลใน
Arrays
โครงสร้างข้อมูลแบบอะเรย์
เป็นโครงสร้างข้อมูลที่มีการจองพื้นที่หน่วยความจำ เป็นชุดๆ
แต่ละชุดประกอบด้วยจำนวนช่งข้อมูลหลายช่อง
พื้นที่แต่ละช่องข้อมูลจะอยู่ในตำแหน่งที่ต่อเนื่องกันไปตามลำดับ
การเข้าถึงข้อมูล (Access) ข้อมูลใดๆ
ในโครงสร้างสามารถกระทำได้โดยการระบุหมายเลขกำกับช่องข้อมูลที่เรียกว่า
ตัวดัชนี (Index) หรือบางครั้งเรียกว่า ตัวชี้ หรือซัปสคริปต์ (Sub
Scipt)
3. Arrays หลายมิติ
การจัดเก็บอะเรย์ในหน่วยความจำหลัก จะใช้เนื้อที่ขนาดเท่ากัน
เพื่อเก็บสมาชิกแต่ละตัว โดยเนื้อที่จะเรียงต่อเนื่องกัน
การจัดเก็บอะเรย์ในหน่วยความจำหลัก
จะพิจารณาตามประเภทของอะเรย์ในมิติต่างๆ ดังนี้
·
โครงสร้างข้อมูลอะเรย์หนึ่งมิติ (One-Dimensional
Array)
·
โครงสร้างข้อมูลอะ เรย์สองมิติ
(Two-Dimensional Array)
·
โครงสร้างข้อมูลอะเรย์สามมติ (Three-Dimensional
Array)
รูปแบบ
Array
[l...u]
แถวลำดับ 1 มิติ
Array
[l1..u1,l2...u2]
แถวลำดับ 2 มิติ
Array
[l1..u1,l2..u2,l3..u3]
แถวลำดับ 3 มิติ
3.1
โครงสร้างข้อมูลอะเรย์หนึ่งมิติ (One-Dimensional Array)
คือ
โครงสร้างข้อมูลแถวลำดับที่มีการจัดเก็บข้อมูลต่อเนื่องกันไปเป็นแถวต่อ
เนื่องกันตลอด ซึ่งเปรียบเหมือนกับตารางแถวเดียว
โดยมีดัชนีอ้างอิงเพียง 1 ตัว
รูปแบบ
·
Data-type array-name[expressino]
Data-type
คือ ประเภทของข้อมูลอะเรย์ เช่น int,char,float
array-name คือ ชื่อของอะเรย์
expression คือ
นิพจน์จำนวนเต็มซึ่งระบุจำนวนสมาชิกของอะเรย์
ตัวอย่าง char
a[4]; int
num[10];
char
a[4]]; หมายถึง
คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำสำหรับตัวแปร a
ให้เป็นตัวแปรชุดชนิด character ขนาดสมาชิก 4 สมาชิก
โดยหน่วยความจำจะเตรียมเนื้อที่ให้ 1 byte สำหรับ 1
ชื่อตัวแปร
Initialization
คือ การกำหนดค่าเริ่มต้นให้กับอะเรย์
1.
การกำหนดค่าให้กับตัวแปรชุดที่มีค่าเป็นตัวเลข
รูปแบบ data-type
array-name[n]={value1,value2...value n};
ตัวอย่าง
int
num[5] = {1,2,3,4,5}; หรือ
int
num[] = {1,2,3,4,5}; หรือ
int
x[6] =
{0,0.25,0,0.5,0,0};
2. การกำหนดค่าให้กับตัวแปรชุด
ชนิด Character
รูปแบบ char array-name[n] =
"string";
ตัวอย่าง
char
ch[9] = "SAWASDEE";
สามารถกำหนดอะเรย์ เป็นพารามิเตอร์ส่งให้กับฟังก์ชันได้ 2
ลักษณะ
1. การกำหนด
array element
เป็นพารามิเตอร์ส่งค่าให้กับฟังก์ชัน ทำได้โดยอ้างถึงชื่ออะเรย์พร้อมระบุ
subscript
ตัวอย่าง
swap(num[2],num[3]);
2.
ส่งอะเรย์ทั้งชุดให้ฟังก์ชัน ทำได้โดยอ้างถึงชื่ออะเรย์ โดยไม่มี
subscript
ตัวอย่าง
#define N
10
float a[N];
float avg;
avg =
average(N,a);
การส่งผ่านอะเรย์ให้กับฟังก์ชันเป็นการส่งผ่านโดยการอ้างอิงเรียกว่า
Pass by reference คือ
ค่าของสมาชิกแต่ละตัวจะไม่ได้ถูกส่งไปให้ฟังก์ชันแต่ชื่อของอะเรย์จะถูกมอง
เป็นตำแหน่งในหน่วยความจำที่ใช้เก็บสมาชิกตัวแรกซึ่ง address
นี้จะถูกส่งให้กับอาร์กิวเมนต์ที่ตรงกัน ดังนั้น
อาร์กิวเมนต์จึงเป็น pointer
ชี้ไปยังสมาชิกตัวแรกของอะเรย์
3.2
โครงสร้างข้อมูลแบบอะเรย์สองมิติ (Two-Dimensional Array)
คือ
โครงสร้างข้อมูลที่มีการจัดเก็บข้อมูลแบบตารางสองทางข้อมูลมีการจัดเรียงกัน
ตามแนวแถว(Row) และแนวหลัก(Column)
การอ้างถึงข้อมูลต้องระบุตำแหน่งแถวและตำแหน่งหลักที่ข้อมูลนั้นอยู่
รูปแบบ
type array-name[n] [m];
type หมายถึง
ชนิดของตัวแปรที่ต้องการประกาศเป็นอะเรย์
array-name
หมายถึง ชื่อของตัวแปรที่ต้องการประกาศเป็นอะเรย์
n หมายถึง
ตัวเลขที่แสดงตำแหน่งของแถว
m หมายถึง
ตัวเลขที่แสดงตำแหน่งของหลัก
3.3
โครงสร้างข้อมูลอะเรย์สามมิติ
(Three-Dimensional Array)
อะเรย์ 3 มิติ A[l1:u1 , l2:u2 ,
l3:u3] เป็นอะเรย์ที่มี lower bound และ upper bound
สูตรการคำนวณหาจำนวนสมาชิกของ Array 3 มิติ
A[L1...U1,L2...U2,L3...U3] =
(U1-L1+1)*(U2-L2+1)*(U3-L3+1)
4. Pointers และ Arrays ของ
Pointers
Pointer
เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่ (Address)
ของตัวแปรที่อยู่ในหน่วยความจำ
การประกาศชนิดของตัวแปรพอยน์เตอร์
รูปแบบ
type *variable-name
type
หมายถึง ชนิดของตัวแปร
*
หมายถึง
เป็นเครื่องหมายที่แสดงว่าตัวแปรที่ตามหลังเครื่องหมายนี้เป็นตัวแปร
พอยน์เตอร์
variable-name
หมายถึง เป็นชื่อของตัวแปรที่ต้องการประกาศว่าเป็นชนิด
พอยน์เตอร์
ตัวอย่าง
char
*prt; หมายความว่า ประกาศว่าตัวแปร prt
เป็นตัวแปรพอยน์เตอรที่ใช้เก็บตำแหน่งเริ่มต้นที่จะเก็บ
Character
เครื่องหมาย
ที่ใช้ทำงานกับตัวแปรพอยน์เตอร์
1.
เครื่องหมาย &
เป็นเครื่องหมายที่ใช้เมื่อต้องการให้เอาค่าตำแหน่งที่อยู่ของตัวแปรที่เก็บ
ไว้ในหน่วยความจำออกมาใช้ เช่น x = 10
2.
เครื่อง หมาย * มีการใช้งาน 2 ลักษณะ คือ ใช้ในการประกาศ parameter
ว่าเป็นแบบพอยน์เตอร์
เช่น
void swap(int
*p,int*q)
{
......................
}
ใช้เป็น
dereferencing
operator จะใช้เมื่อต้องการนำค่าที่อยู่ในตำแหน่งที่ตัวแปรพอยน์เตอร์นั้น
ชี้อยู่ออกมาแสดง
การใช้ตัวแปรพอยน์เตอร์กับอะเรย์
ตัว
แปรพอยน์เตอร์จะใช้อ้างถึงค่าที่เก็บไว้ในตัวแปรชุดได้
ดังนี้
ตัวอย่าง
char str[80],*pl;
pl =
str;
บรรทัด ที่ 1
เป็นการประกาศว่า str เป็นตัวแปรชุด ชนิด character 1 มิติ
มีขนาดสมาชิก 80 สมาชิก และ pl เป็นตัวแปรพอยน์เตอร์
บรรทัด ที่ 2
เป็นการอ้างถึงข้อมูลที่เก็บไว้ในตัวแปรชุด str
โดยการนำตำแหน่งที่อู่ของตัวแปร str[0]
ซึ่งเป็นสมาชิกตัวแรกไปเก็บไว้ใน ตัวแปรพอยน์เตอร์ pl
เหมือนกับใช้คำสั่ง pl =
&str[0];
การ
อ้างถึงตัวแปรชุด สามารถอ้างถึงโดยการเพิ่ม หรือลดตัวแปรพอยน์เตอร์ได้
เช่น ต้องการอ้างถึงตัวแปร str[4] ทำได้โดย *(pl+4)
5. Records
และโครงสร้างของ Records
เป็นโครงสร้างข้อมูลที่ประกอบขึ้นมาจากข้อมูลพื้นฐาน ต่างประเภทกัน
รวมเป็น 1 ชุดข้อมูล คือ จะประกอบด้วย data element หรือ field
ต่างประเภทกันอยู่รวมกัน ในภาษา C ก็คือ การกำหนดข้อมูล เป็นรูปแบบของ
Structure
Structure คือ
โครงสร้างที่สมาชิกแต่ละตัวมีประเภทข้อมูลแตกต่างกันได้ โดยที่ใน
structure อาจมีสมาชิกเป็นจำนวนเต็ม ทศนิยม อักขระ
อะเรย์หรือพอยน์เตอร์ หรือแม้แต่ structure ด้วยกันก็ได้
การนิยาม
structure
รูปแบบ
struct struc-name
{
type *name-1;
type
name-2;
..............................
type
name-n;
} struc-variable;
struct เป็น
คำหลักที่ต้องมีเสมอ
struc-name
ชื่อกลุ่ม
structure
type
ชนิดของตัวแปรที่อยู่ในกลุ่ม structure
name-n
ชื่อของตัวแปรที่อยู่ในกลุ่ม structure