Transcript Array.pptx
โครงสร้ างข้ อมูลแบบแถวลาดับ
อาจารย์ พิศิษฐ์ นาคใจ
มหาวิทยาลัยราชภัฏอุตรดิตถ์
ความรู้เกี่ยวกับชนิดข้ อมูล
• สมัยก่อน การเขียนโปรแกรมคอมพิวเตอร์ จะมีความซับซ้ อนไม่เป็ น
ระเบียบ จึงมีแนวคิดการเขียนโปรแกรมเชิงโครงสร้ างขึ ้นมา แบ่ง
ออกเป็ น
ข้ อมูลเชิงเดี่ยว
ข้ อมูลเชิงประกอบ
ข้ อมูลเชิงเดี่ยว
• เป็ นข้ อมูลที่ประกอบด้ วยค่าค่าเดียวไม่สามารถแบ่งส่วนของข้ อมูล
ออกไปได้ อีก
ตัวอย่างเช่น
เลขจานวนเต็ม หมายถึง เลขจานวนเต็มเพียง 1 ค่าเท่านัน้
ตัวอักษร
หมายถึง ตัวอักษร 1 ตัว
ข้ อมูลเชิงประกอบ
• หมายถึงข้ อมูลที่สามารถแตกออกเป็ นส่วนย่อย ได้ อีก สาหรับส่วนที่
แตกออกไปนันจะสามารถมี
้
ความหมายในตัวได้ ด้วย
ตัวอย่างเช่น
หมายเลขโทรศัพท์
ประกอบไปด้ วย ตัวเลข 10 ตัว
สามารถแยกออกเป็ นเลขเดี่ยวได้
ชื่อนักศึกษา
ประกอบไปด้ วย ตัวอักษรเรี ยงต่อกัน
สามารถแยกออกเป็ นตัวอักษร 1 ตัวได้
ชนิดของข้ อมูล
• ชนิดของข้ อมูลประกอบไปด้ วย 2 ส่วนคือ
กลุม่ ของข้ อมูล
โอเปอเรชัน่ (Operation)
ตัวอย่างกลุม่ ข้ อมูล คือ ข้ อมูลแบบจานวนเต็ม คือเลขของจานวนเต็ม
ในช่วงต่างๆ นี ้คือกลุม่ ข้ อมูล
โอเปอเรชัน่ คือตัวดาเนินการจัดการกับกลุม่ ข้ อมูล คือ การบวก การลบ
การคูณ การหาร หรื อรวมถึง โอเปอเรชัน่ อื่นๆ ได้ อีก
ตารางแสดงชนิดข้ อมูล
ชนิ ดข้อมู ล
Integer
Floating Point
Character
Value
…,-3,-2,1,0,1,2,3,…
…, -0.9, 0.8,…,0.0,…,1.
1
\0,…,’A’, ’B’, …
, ’a’, ’b’
Operation
*,+,-,%,/,
mod
*,+,-,%,/
<, >, concat
โครงสร้ างข้ อมูล
• โครงสร้ างข้ อมูล คือการรวมกันของข้ อมูลเชิงเดียวและ ข้ อมูลเชิง
ประกอบเข้ าไว้ ด้วยกัน พร้ อมกับกาหนดความสัมพันธ์
ตัวอย่างข้ อมูลแบบโครงสร้ าง
ชนิดข้ อมูลแบบนามธรรม
• การเขียนโปรแกรมโดยใช้ ข้อมูลแบบนามธรรม จะพบมากในการเขียน
แบบ Object Oriented Programmin OOP โดยใช้
หลักการ Reused มาใช้ โดยผู้ใช้ ไม่จาเป็ นต้ องทราบว่า จะทาการ
สร้ างข้ อมูลอย่างไร ทราบเพียงแต่ทาอะไรได้ บ้าง ผู้ใช้ สนใจแค่ Input
และ Output ที่ได้ Process ด้ านในไม่จาเป็ นต้ องรู้
ลักษณะโครงสร้ างข้ อมูลแบบแถวลาดับ
• ปรกติแล้ วโครงสร้ างข้ อมูลแบ่งออกเป็ น 2 ประเภทคือ
โครงสร้ างข้ อมูลแบบเชิงเส้ น
คือมีโครงสร้ างที่เป็ นรายการต่อเนื่อง ข้ อมูลที่เก็บมีลกั ษณะเป็ น
แถวลาดับเรี ยงต่อกันไป มีลกั ษณะเหมือนเส้ นตรง เช่นโครงสร้ างข้ อมูล
แบบแถวลาดับ(Array) แบบแถวซ้ อน(Stacks) แบบแถวคอย
(Queues)
โครงสร้ างข้ อมูลแบไม่เป็ นเชิงเส้ น
คือโครงสร้ างที่ไม่เป็ นแบบเชิงเส้ นมีการเชื่อมโยงแบบหลายทิศทาง
ตัวอย่างเช่น โครงสร้ างข้ อมูลแบบต้ นไม้ (Tree) แบบกราฟ
(Graphs)
โครงสร้ างข้ อมูลแบบแถวลาดับ
• อะเรย์หรื อแถวลาดับ คือการรวมกลุม่ ของชุดข้ อมูลที่ใช้ ชื่อตัวแปรชื่อ
เดียวกัน และจะใช้ เลขดัชนี ในการเข้ าถึงข้ อมูลแต่ละตัว
ตัวอย่าง หากต้ องการเก็บข้ อมูล 50 ข้ อมูล เราจาเป็ นต้ องสร้ างพื ้นที่วา่ ง
หรื อทาการจองหน่วยความจาจานวน 50 ช่อง และต้ องใช้ ชื่อตัวแปร
50 ตัว
Data1,Data2,Data3,…,Data50
หากเราใช้ โครงสร้ างแบบ อะเรย์ จะใช้ ชื่อตัวแปลเพียงตัวเดียว
0
1 2
3 4
47 48
49
ชนิดของอะเรย์
อะเรย์หมายถึงแถวของลาดับข้ อมูล อาจะถูกแบบออกเป็ น
อะเรย์ 1 มิติ
อะเรย์ หลายมิติ
คุณสมบัติของอะเรย์
• สมาชิกในอะเรย์จะมีคณ
ุ สมบัติเหมือนกัน หมายถึง ชนิดข้ อมูลที่อยู่
ในอะเรย์ ต้ องเป็ นชนิดเดียวกัน
• ขนาดของอะเรย์ต้องมีลกั ษณะคงที่หากถูกสร้ างขึ ้นแล้ ว
• อะเรย์ สามารถเข้ าข้ อมูลได้ โดยตรง โดยไม่จาเป็ นต้ องผ่านข้ อมูลก่อน
หน้ ามาก่อน การเข้ าถึงข้ อมูลในลาดับต้ น กับลาดับปลายไม่มีผลต่อ
เวลา
การอ้ างอิงตาแหน่งในอะเรย์
• การเข้ าถึงสมาชิกในอะเรย์ เริ่มจากบอกชื่อของอะเรย์และตามด้ วยเลข
ลาดับของข้ อมูลหรื อเลขดัชนี โดยเลขลาดับข้ อมูลจะอยูภ่ ายใน
เครื่ องหมาย [ ] หรื อ ( ) ขึ ้นอยูก่ บั ภาษาที่เขียน
• ลาดับข้ อมูลเริ่มต้ นของอะเรย์แต่ละภาษาจะมีลาดับข้ อมูลเริ่มต้ นไม่
เหมือนกัน ในภาษาซีและภาษาจาวา จะเริ่มต้ นที่ 0 แต่ในภาษา
Fortarn จะเริ่มต้ นที่ 1
ตัวอย่างการใช้ อะเรย์
int score[12] =
{5,7,9,11,13,15,16,17,18,19,10,11};
score
0 1 12 1 3 1 41 15 1 6 1 71 18 9 10
11
5 7 9
1 3 5 6 7 8 9 0 1
หากต้ องการเลข 16 ในอะเรย์ สาหรับภาษาซีอะเรย์เริ่มต้ นที่ตาแหน่ง 0
ดังนันสามารถใช้
้
สตู รเพื่อเข้ าถึงข้ อมูลในอะเรย์ได้ เป็ น
score[i-1] โดยที่ i แทนลาดับที่ข้อมูลนันอยู
้ ่ ดังนัน้ i มีคา่ เท่ากับ 7
จะได้ เป็ น
score[7-1] = score[6] = 16
ขอบเขตของอะเรย์
• การใช้ อะเรย์จาเป็ นต้ องทราบถึงของเขตล่างสุด(Lower
Bound) และขอบเขตบนสุด(Upper Bound) ของอะเรย์
สาหรับขอบเขตล่างตัวภาษาเป็ นตัวกาหนดไว้ อยูแ่ ล้ วภาษาซีจะถูก
กาหนดขอบเขตล่างไว้ ที่ 0 ส่วนขอบเขตบน ผู้พฒ
ั นาโปรแกรมจะต้ อง
ทาการกาหนดเอง
ตัวอย่างการกาหนดขอบเขต
int a[5]; หมายความว่
ื่อ a เป็
a ากาหนดอะเรย์
0 ช1
2 นชนิ3ดจานวนเต็มมี
ขนาด 5 ช่อง 4
การคานวณหาสมาชิกของอะเรย์ 1 มิติ
สูตรการหาจานวนสมาชิกในอะเรย์
จานวนสมาชิก = U – L + 1
U = ขอบเขตบนสุด
L = ขอบเขตล่างสุด
ตัวอย่างการคานวณ
a
จานวนสมาชิก = 4 – 40 + 1
=5
0
lower
upper
1
2
3
การจัดเก็บอะเรย์ในหน่วยความจา
การจัดเก็บอะเรย์ในคอมพิวเตอร์ จะมีลกั ษณะที่ตอ่ เนื่งอกันและใช้ พื ้นที่แต่
ละตัวมีขนาดเท่าๆ กัน ทาให้ คอมพิวเตอร์ เข้ าถึงอะเรย์โดยตรงได้ โดย
การอ้ าง Address ของแต่ละตัว
การหา Address
สาหรับการหา Address ของลาดับภายในอะเรย์ เราจาเป็ นต้ อง
ทราบ Address เริ่มต้ นของอะเรย์เสียก่อน
ใช้ สตู รการหา Address
LOC(a[i]) = B +w( i – L )
LOC
คือ ตาแหน่ง Address
B
คือ Address เริ่มต้ นของอะเรย์
w
คือ ขนาดของหน่วยความจาในแต่ละช่อง
ตัวอย่าง กาหนดให้ Address เริ่มต้ นที่ 1000 ขนาดของ
หน่วยความจา คือ 1 byte หา Address ของอะเรย์ a[10]
LOC(a[10])
= 1000 + 1(10-0)
= 1010
แผนภาพ
Base Address
B
1000
B+w
1001
B+2w
1002
…
B + w(i-L)
…
B+19
1019
Memory
Array
a[0]
a[1]
a[2]
…
…
…
a[19]
อะเรย์ แบบ 2 มิติ
เป็ นอะเรย์ที่มีสว่ นประกอบด้ วยแถวและคอลัมน์ ในการอ้ างอิงข้ อมูล
ในอะเรย์แบบ 2 มิติจาเป็ นต้ องบอกทัง้ แถวและคอลัมน์ ด้ วย
0 1 2 3 4
ตัวอย่างเช่น
0
1
2
int a[3][5]
คอลัมน์
หมายความว่าอะเรย์ a มีขนาด 3 แถว 5
รูปแบบการหาจานวนสมาชิกสาหรับ อะเรย์ 2 มิติ
สูตรการหาจานวนสมาชิกในอะเรย์ 2 มิติ
จานวนสมาชิก = (U1 – L1 + 1) * (U2 – L2+1)
U1 = ขอบเขตบนของแถว
L1 = ขอบเขตล่างของแถว
U2 = ขอบเขตบนของคอลัมน์
L2 = ขอบเขตล่างของคอลัมน์
ตัวอย่างการคานวณ
ตัวอย่างการคานวณ
0
จานวนสมาชิก = (4-0+1)*(2-0+1) 1
2
=5*3
= 15
0
1
2
3
ใช้ สตู รการหา Address สาหรับ อะเรย์ 2 มิติ
การหา Address ของอะเรย์ 2 มิติ จาเป็ นต้ องทราบถึงการเรี ยงตัวใน
หน่วยความจาใน คอมพิวเตอร์ เสียก่อน โดยจะทาการเรี ยงลาดับเริ่ม
ตังแต่
้ แถวแรกและเรี ยงลาดับต่อไปจนครบคอลัมน์ และจะทาการขึ ้น
แถวใหม่เรื่ อยๆ จนครบ
สาหรับสูตรการหา Address ที่เก็บข้ อมูลอะเรย์ 2 มิติ สามารถ
คานวณได้ ดงั นี ้
LOC(K[i][j]) = B + w(C(i-L1) + (j-L2))
โดยที่ C คือจานวนคอลัมน์ของแถวลาดับ
ตัวอย่าง
กาหนดให้ Address เริ่มต้ นที่ 500 ขนาดของหน่วยความจา คือ 4
byte หา
ทาการสร้ างอะเรย์2 มิติ ขนาด3 แถว 5 หลัก จงหา Address
ของอะเรย์ที่
ตาแหน่ง a[2][1]
LOC(a[i][j])
= B + w(C(i-L1) + (j-L2))
LOC(a[2][1]) = 500 + 4(5(2-0)+(1-0))
= 500 + 44
= 544
แผนภาพ
Base Address
B
500
B+w
504
B+2w
508
…
512
…
516
…
520
B + w[c(i-L1)+(j-L2)]
524
…
528
…
532
…
536
…
530
B + 11w
544
B + 12w
548
B + 13w
552
Memory
Array
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[1][4]
a[2][0]
a[2][1]
a[2][2]
a[2][3]
a[2][4]
Row 0
Quiz
• ข้ อใดต่อไปนี ้กล่าวถูกต้ อง
1.
2.
3.
4.
5.
อะเรย์ สามารถเก็บข้ อมูลที่มีชนิดข้ อมูลต่างกันได้
อะเรย์ขนาด 5แถว 4 หลัก สามารถเก็บข้ อมูลได้ 20 ข้ อมูล
อะเรย์ในภาษาซีมีดชั นีเริ่มต้ นที่ 1
สาหรับภาษาซี กาหนดให้ int a[10] จะมีจานวนสมาชิก 9 ตัว
สาหรับภาษาซี กาหนดให้ int b[10] Upper bound ของ b คือ
9