บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
หลักการโปรแกรม 1 Lecture 12: อาร์เรย์หนึ่งมิติ
Advertisements

Array ธนวัฒน์ แซ่ เอียบ. The concept of array อาเรย์ : กลุ่มของข้อมูลที่มีชนิดเดียวกันและถูก จัดเก็บเรียงลำดับต่อเนื่องกัน ตัวแปร x สามารถจัดเก็บค่ามากกว่า.
CHAPTER 14 Database Management
การใช้งานโปรแกรม SPSS
การวัดค่ากลาง - ค่าเฉลี่ย
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
วิชา. การใช้โปรแกรมสำเร็จรูปในชีวิตประจำวัน บทที่ 2
ชนิดของข้อมูล และการคำนวณทางคณิตศาสตร์
โครงสร้างข้อมูล (Data Structures ) รหัสวิชา การเรียงลำดับข้อมูลแบบ (Heap Sort)
การเขียนโปรแกรมภาษาปาสคาล โดยใช้โครงสร้างหลักทั้ง 3 โครงสร้าง
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
DATA STRUCTURE AND ALGORITHM Linked List.
หน่วยที่ 6 แถวลำดับ (Array)
MS-Access. SQL สามารถเรียกใช้ฐานข้อมูล ได้ทุกค่าย Access MySQL Foxpro DBF DB2Oracle MS SQL.
ตัวแปร และชนิด ข้อมูล. ตัวแปร การกำหนดตัวแปรเป็นการใช้ ชื่อตัวแปรแทน ตำแหน่งบนหน่วยความจำ สำหรับเก็บ ข้อมูลระหว่างการ ประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า.
ARRAY & PRINTF สาขางานคอมพิวเตอร์ธุรกิจอาจารย์จิรา ภรณ์ เขตกุฎี
Intro Excel 2010 ข้อมูลจาก... ellession1.htm.
เทคนิคการใช้ Microsoft Excel. 1. การตีตารางในรูปแบบต่าง ๆ 2. การแทรกภาพในตาราง 3. การตกแต่งข้อมูลด้วย Format Cells 4. การคำนวณ บวก ลบ คูณ หาร 5. การย่อ.
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
คำสั่งควบคุมการทำงาน
ฐานข้อมูล.
สถิติเบื้องต้นสำหรับการวิเคราะห์ข้อมูล
เกม คณิตคิดเร็ว.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 8 แฮช (Hash).
IP-Addressing and Subneting
IP-Addressing and Subneting
การประยุกต์ Logic Gates ภาค 2
บทที่ 3 การพัฒนาโปรแกรมโดยเขียนคำสั่ง VBA
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
Array.
บทที่ 1 ความรู้ทั่วไปเกี่ยวกับการสื่อสารข้อมูล
แล้วทำการเรียงลำดับข้อมูลใหม่โดยเรียงจากน้อยไปหามาก
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
BC320 Introduction to Computer Programming
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
บทที่ 1 โครงสร้างคอมพิวเตอร์พื้นฐาน
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ตัวแปรกับชนิดของข้อมูล
คำสั่ง Create , Insert, Delete, Update
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การสร้างโมเดลจำลองความสัมพันธ์ ระหว่างข้อมูล E-R Model
Data storage II Introduction to Computer Science ( )
บริษัท พัฒนาวิชาการ (2535) จำกัด
Week 5 C Programming.
SMS News Distribute Service
ผู้ช่วยศาสตราจารย์จุฑาวุฒิ จันทรมาลี
Variable Constant.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
สาขาวิชาคอมพิวเตอร์ธุรกิจ โดย อาจารย์กิตติพงษ์ ภู่พัฒน์วิบูลย์
BASIC STATISTICS MEAN / MODE / MEDIAN / SD / CV.
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 9 การเรียงลำดับข้อมูล (Sorting)
บทที่ 7 การประมวลผลอาร์เรย์
สถาปัตยกรรมของฐานข้อมูล
OPERATOR ภาษาปาสคาล (Pascal)
2 โครงสร้างข้อมูลแบบสแตก (STACK).
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
Chapter 3 : Array.
Array Sanchai Yeewiyom
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
บทที่ 4 การจำลองข้อมูลและกระบวนการ (Data and Process Modeling)
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
พอยเตอร์ #include <stdio.h> void main() { int age; int *pointer;
ปรากฏการณ์ดอปเพลอร์ของเสียง Doppler Effect of Sound
ใบสำเนางานนำเสนอ:

บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)

ความหมายของแถวลำดับ เป็นโครงสร้างข้อมูลที่มีการจองพื้นที่หน่วยความจำ (Memory) เป็นชุด ๆ แต่ละชุดประกอบด้วยจำนวนช่องข้อมูลหลายช่อง พื้นที่แต่ละช่องข้อมูลจะเก็บข้อมูลชนิดเดียวกัน และอยู่ในตำแหน่งที่ต่อเนื่องกันไปตามลำดับ การเข้าถึงข้อมูล(Access) ใด ๆ ในโครงสร้างอาร์เรย์ สามารถกระทำได้โดยการระบุหมายเลขกำกับช่องข้อมูล ที่เรียกว่า ตัวดัชนี (Index) หรือบางครั้งเรียกว่า ตัวห้อย หรือซับสคริปต์ (Sub Script) เป็นตัวอ้างอิงตำแหน่งสมาชิกบนแถวลำดับ เช่น A(3) หมายถึง สมาชิกอาร์เรย์ A ลำดับที่ 3

ชนิดของอาร์เรย์ อาร์เรย์ 1 มิติ อาร์เรย์ 2 มิติ อาร์เรย์หลายมิติ (มากกว่า 2 มิติ)

อาร์เรย์หนึ่งมิติ (One Dimension Array) มีการจัดเก็บข้อมูลในลักษณะต่อเนื่องกันเป็นแถว ซึ่งจะนำเสนอในมุมมองแบบแนวตั้งและแนวนอนก็ได้ สัญลักษณ์ที่ใช้คือ array_name[size] เช่น num[5] หมายถึง num เป็นอาร์เรย์ 1 มิติขนาด 5 (มีสมาชิก 5 ตัวหรือ 5 ช่อง) num[0] num[1] num[2] num[3] num[4]

อาร์เรย์หนึ่งมิติ (ต่อ) name[10] name[0] name[1] name[2] name[9]

ในภาษาคอมพิวเตอร์ทั่วไป ค่าดัชนี จะเริ่มต้นจาก 0 เช่น ภาษา C , C++ java และวงเล็บที่อยู่หลังตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] หรือ () ขึ้นอยู่กับ ภาษานั้น เช่น c , c++ , java ใช้เครื่องหมาย [ ] visual basic ใช้เครื่องหมาย () ตัวอย่างการประกาศอาร์เรย์ 1 มิติในภาษา C , C++ int num[20]; char grade[10];

ตัวอย่าง การประกาศอาร์เรย์ 1 มิติ ในภาษา Visual Basic dim num(5) as integer

ขอบเขตของอาร์เรย์ 1 มิติ เลขดัชนีในอาร์เรย์ประกอบด้วยช่วงขอบเขตของค่าซึ่งประกอบด้วยขอบล่างสุด (Lower Bound) และขอบเขตบนสุด (Upper Bound) Lower Bound Upper Bound num num[0] num[1] num[2] num[3] num[4] Array name ดังนั้น num(5) สามารถเขียนเป็น num[1:5]

การคำนวณหาจำนวนสมาชิกของอาร์เรย์หนึ่งมิติ รูปแบบ ArrayName [L:U] โดย ArrayName คือ ชื่อของอาร์เรย์ L คือ ขอบเขตล่างสุด (Lower Bound) U คือ ขอบเขตบนสุด (Upper Bound) จำนวนสมาชิก = U-L+1 เช่น num[1:5] มีสมาชิก เท่ากับ 5-1+1 = 5 ตัว

การคำนวณหาตำแหน่ง(Address)ในหน่วยความจำของอาร์เรย์หนึ่งมิติ หาได้จากสูตร 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 Data[2] 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

อาร์เรย์สองมิติ (Two Dimension Array) โครงสร้างข้อมูลที่มีการจัดเก็บข้อมูลแบบตารางสองทาง ข้อมูลมีการจัดเรียงกันตามแนวแถว (Row) และ แนวหลัก (Column) การอ้างถึงข้อมูลต้องระบุตำแหน่งแถวและตำแหน่งหลักที่ข้อมูลนั้นอยู่ 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) ของคอลัมน์

อาร์เรย์สองมิติ เช่น K[4,3] หรือ K[0:3,0:2] 10 5 3 2 1 9 11 6 7 4 Row Column เช่น K[4,3] หรือ K[0:3,0:2] Columns 1 2 10 5 3 2 1 9 11 6 7 4 Rows 1 2 3

การคำนวณหาจำนวนสมาชิกของอาร์เรย์สองมิติ จำนวนสมาชิก = (U1 – L1 + 1) * (U2 – L2 + 1) โดย U1 = ขอบเขตบนสุด ของแถว L1 = ขอบเขตล่างสุด ของแถว U2 = ขอบเขตบนสุด ของคอลัมน์ L2 = ขอบเขตล่างสุด ของคอลัมน์ เช่น A[1:2,1:3] มีจำนวนสมาชิก = (2-1+1)*(3-1+1) = 2*3 = 6

มีจำนวนสมาชิกเท่ากับ 6 ช่อง A[1:2,1:3] 1 2 3 1 2 มีจำนวนสมาชิกเท่ากับ 6 ช่อง

การประกาศอาร์เรย์ 2 มิติในภาษาคอมพิวเตอร์ ภาษา c , C++ ประกาศโดยใช้รูปแบบดังนี้ รูปแบบ data_type array_name[row_size][column_size] เช่น int num[2][3]; char name[5][20];

การจัดเก็บอาร์เรย์สองมิติในหน่วยความจำ ทำได้ 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] 1 2 3 Columns Rows K[0:3 , 0:2]

การคำนวณ สูตร LOC(K[ i, j ]) = B+w[C(i-L1) + (j-L2)] = 500+4[6+1] = 500+28 = 528 ดังนั้นอาร์เรย์ K แถวที่ 2 คอลัมน์ 1 จะจัดเก็บอยู่ในตำแหน แอดเดรสที่ 528

อาร์เรย์สามมิติ (Three Dimension Array) อาร์เรย์สามมิติคือการนำเอาอาร์เรย์สองมิติมาเรียงซ้อนกันหลายๆชั้น (page) ดังนั้นจึงทำให้อาร์เรย์สามมิติ จะมีลักษณะเป็นแถวและคอลัมน์แล้วก็จะมีความลึกเพิ่มขึ้นมา 1 2 Row 3 Column 4 Page

รูปแบบทั่วไปของโครงสร้างข้อมูลอาร์เรย์ 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) เช่น จำนวนสมาชิกของอาร์เรย์ A(2,3,4) หรือ A(0:1,0:2,0:3) จำนวนสมาชิก = (1-0+1)*(2-0+1)*(3-0+1) = 2*3*4 = 24