โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
ความหมายของแถวลำดับ
ชนิดของอาร์เรย์
อาร์เรย์หนึ่งมิติ (One Dimension Array)
num[0]
num[1]
num[2]
num[3]
num[4]
อาร์เรย์หนึ่งมิติ (ต่อ)
name[0]
name[1]
name[2]
name[9]
int num[20];
char grade[10];
ขอบเขตของอาร์เรย์ 1 มิติ
num[0]
num[1]
num[2]
num[3]
num[4]
num
Array name
Lower Bound
Upper Bound
ดังนั้น num(5) สามารถเขียนเป็น num[1:5]
การคำนวณหาจำนวนสมาชิกของอาร์เรย์หนึ่งมิติ
โดย ArrayName คือ ชื่อของอาร์เรย์
L คือ ขอบเขตล่างสุด (Lower Bound)
U คือ ขอบเขตบนสุด (Upper Bound)
การคำนวณหาตำแหน่ง(Address)ในหน่วยความจำของอาร์เรย์ 1 มิติ
Loc(A[i]) = B + w * (i – L)
โดยที่
i : ตำแน่งที่ต้องการ
B : ตำแหน่งเริ่มต้นในหน่วยความจำ
L : ตำแหน่งเริ่มต้น
w : ขนาดความกว้างของชนิดข้อมูลของข้อมูล (byte)
ตัวอย่าง การหาตำแหน่งในหน่วยความจำ ของอาร์เรย์หนึ่งมิติ
กำหนด อาร์เรย์ Data[1:5] เก็บข้อมูลชนิดตัวอักษร ซึ่งใช้เนื้อที่ในการเก็บข้อมูล
2 bytes ต่อชุด โดยมีตำแหน่งเริ่มต้นในหน่วยความจำอยู่ที่ 1000
จงหาตำแหน่งที่ใช้เก็บข้อมูลของ Data[2]
แทนค่าดังนี้
i = 2, B = 1000, L = 1, w = 2
จะได้ Loc(Data[2]) = 1000 + 2 * (2 – 1)
= 1000 + 2 * 1
= 1000 + 2
= 1002
Address Data
1000 Data[1]
1001
1003
Data[3] Data[4] Data[5]
1009
.
.
.
ตัวอย่าง การหาตำแหน่งในหน่วยความจำ ของอาร์เรย์หนึ่งมิติ (ต่อ)
ต้องการประกาศตัวแปรอาร์เรย์ income เพื่อจัดเก็บยอดรายได้ของ ปี พ.ศ. 2541-2550
ซึ่งเป็นไปตามรูปแบบ income[2541:2550] ถ้าข้อมูลที่จัดเก็บกินเนื้อที่ 4 ไบต์ต่อสมาชิก1ตัว
และสมาชิกตัวแรกจัดเก็บในตำแหน่งที่ 7000 จงคำนวณหาแอดเดรสที่จัดเก็บยอดรายได้ของปี
2549
แทนค่าดังนี้
i = 2549, B= 7000, L = 2541, w = 4
จะได้ Loc(income[2549]) = 7000 + 4 * (2549 – 2541)
= 7000 + 4 * 8
= 7000 + 32
= 7032
อาร์เรย์ 2 มิติ (Two Dimension Array)
Col 1
Col 2
Col 3
Col 4
Row 1
Row 2
Row 3
Row 4
รูปแบบทั่วไปของโครงสร้างข้อมูลอาร์เรย์ 2 มิติ�
ArrayName[L1 : U1 , L2 : U2]
เมื่อ ArrayName คือ ชื่อของโครงสร้างข้อมูลอาร์เรย์
L1 คือ ค่าขอบเขตล่างสุด (Lower Bound) ของแถว
U1 คือ ค่าขอบเขตสูงสุด (Upper Bound) ของแถว
L2 คือ ค่าขอบเขตล่างสุด (Lower Bound) ของคอลัมน์
U2 คือ ค่าขอบเขตสูงสุด (Upper Bound) ของคอลัมน์
อาร์เรย์ 2 มิติ
10 | 5 | 3 |
2 | 1 | 9 |
11 | 6 | 7 |
0 | 4 | 3 |
Row
Column
0
1
2
0
1
2
3
Columns
Rows
การคำนวณหาจำนวนสมาชิกของอาร์เรย์สองมิติ
โดย U1 = ขอบเขตบนสุด ของแถว
L1 = ขอบเขตล่างสุด ของแถว
U2 = ขอบเขตบนสุด ของคอลัมน์
L2 = ขอบเขตล่างสุด ของคอลัมน์
เช่น A[1:2,1:3] มีจำนวนสมาชิก = (2-1+1)*(3-1+1)
= 2*3
= 6
A[1:2,1:3]
1
2
1
2
3
มีจำนวนสมาชิกเท่ากับ 6 ช่อง
การประกาศอาร์เรย์ 2 มิติในภาษาคอมพิวเตอร์
จากนั้นต้องจองหน่วยความจำด้วยคำสั่ง new และระบุสมาชิกในอาร์เรย์
นอกจากนี้สามารถประกาศตัวแปรพร้อมกับจองพื้นที่หน่วยความจำ
การจัดเก็บอาร์เรย์สองมิติในหน่วยความจำ
ทำได้ 2 แบบ
1. การจัดเก็บด้วยการเรียงแถวเป็นหลัก (Row Major Order)
2. การจัดเก็บด้วยการเรียงคอลัมน์เป็นหลัก (Column Major Order)
สูตรการคำนวณหาตำแหน่งที่ใช้เก็บข้อมูลในอาร์เรย์สองมิติ
1. แบบการเรียงแถวเป็นหลัก
สูตร
LOC( K[i,j] ) = B+w[C(i-L1) + (j-L2)]
โดยที่
LOC(K[i,j]) = ตำแหน่งแอดเดรสที่เก็บ K[i,j] ในหน่วยความจำ
B = แอดเดรสเริ่มต้น (Base Address)
w = จำนวนช่องของหน่วยความจำที่จัดเก็บข้อมูลต่อหนึ่งสมาชิก
i = ตำแหน่งของแถวในอาร์เรย์
j = ตำแหน่งของคอลัมน์ในอาร์เรย์
L1 = ค่าขอบเขตล่างสุด (lower Bound) ของคอลัมน์
L2 = ค่าขอบเขตล่างสุด (lower Bound) ของคอลัมน์
C = จำนวนคอลัมน์ของแถวลำดับ
ตัวอย่าง
ต้องการทราบตำแหน่งแอดเดรสที่เก็บข้อมูลอาร์เรย์ K แถวที่ 2 คอลัมน์ 1 (K[2,1]) กำหนดให้ B = 500 W = 4 ไบต์
K[3,2]
K[3,1]
K[3,0]
K[2,2]
K[2,1]
K[2,0]
K[1,2]
K[1,1]
K[1,0]
K[0,2]
K[0,1]
K[0,0]
0
1
2
0
1
2
3
Columns
Rows
K[0:3 , 0:2]
การคำนวณ
สูตร
LOC(K[ i, j ]) = B+w[C(i-L1) + (j-L2)]
LOC(K[ 2, 1 ]) = 500+4[3(2-0) + (1-0)]
= 500+4[6+1]
= 500+28
= 528
ดังนั้นอาร์เรย์ K แถวที่ 2 คอลัมน์ 1 จะจัดเก็บอยู่ในตำแหน่งแอดเดรสที่ 528
อาร์เรย์สามมิติ (Three Dimension Array)
0
1
2
Row
0
Row
1
Row
2
Row
3
Column
0
Column
1
Column
2
Column
3
Column
4
Page
2
Page
1
Page
0
รูปแบบทั่วไปของโครงสร้างข้อมูลอาร์เรย์ 3 มิติ
ArrayName[L1 : U1 , L2 : U2 , L3 : U3]
เมื่อ ArrayName คือ ชื่อของโครงสร้างข้อมูลอาร์เรย์
L1 คือ ค่าขอบเขตล่างสุด (Lower Bound) ของแถว
U1 คือ ค่าขอบเขตสูงสุด (Upper Bound) ของแถว
L2 คือ ค่าขอบเขตล่างสุด (Lower Bound) ของคอลัมน์
U2 คือ ค่าขอบเขตสูงสุด (Upper Bound) ของคอลัมน์
L3 คือ ค่าขอบเขตล่างสุด (Lower Bound) ของความลึก
U3 คือ ค่าขอบเขตสูงสุด (Upper Bound) ของความลึก
การหาจำนวนสมาชิกของอาร์เรย์ 3 มิติ
จำนวนสมาชิก = (U1-L1+1) * (U2-L2+1) *(U3-L3+1)
จำนวนสมาชิก = (1-0+1)*(2-0+1)*(3-0+1)
= 2*3*4
= 24