วันอาทิตย์ที่ 11 กันยายน พ.ศ. 2559

โครงสร้างข้อมูลแบบอาร์เรย์

  โครงสร้างข้อมูลแบบอาร์เรย์






 Array อะเรย์เป็นโครงสร้างข้อมูลที่เรียกว่า Linear List มีลักษณะคล้ายเซตในคณิตศาสตร์ คืออะเรย์จะประกอบด้วยสมาชิกที่มีจำนวนคงที่มีรูปแบบข้อมูลเป็นแบบเดียวกัน สมาชิกแต่ละตัวใช้เนื้อที่จัดเก็บที่มีขนาดเท่ากันเรียงต่อเนื่องในหน่วย ความจำหลักการกำหนดArray การกำหนดอะเรย์จะต้องกำหนดชื่ออะเรย์พร้อม subscript ซึ่งเป็นตัวกำหนดขอบเขตของอะเรย์มีได้มากกว่า 1 ตัวจำนวน subscript จะเป็นตัวบอกมิติของอะเรย์นั้นอะเรย์ที่มี subscript มากกว่า 1 ตัวขึ้นไปจะเรียกว่า อะเรย์หลายมิติ

การกำหนด subscript แต่ละตัวจะประกอบไปด้วยค่าสูงสุดและ ค่าต่ำสุดของ subscript นั้น การประกาศค่าตัวแปรอะเรย์ ในภาษาคอมพิวเตอร์ บางภาษา เช่น
ภาษาปาสคาล var A:array[1..10] of real;
var K:array[1..5,1..10] of integer;
ภาษาซี float A[10];
int K[5] [10];

ข้อกำหนดของการกำหนดค่าต่ำสุดและค่าสูงสุดของ subscript คือ
1.ค่าต่ำสุดต้องมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดเสมอ
2.ค่าต่ำสุด เรียกว่า ขอบเขตล่าง
3.ค่าสูงสุด เรียกว่า ขอบเขตบน

ค่า subscript ที่ใช้อ้างอิงถึงสมาชิก จะต้องมีค่ามากกว่าหรือเท่ากับขอบเขตล่างและน้อยกว่า หรอเท่ากับขอบเขตบน

lower bound ≤ subscript ≤ upper bound
ขนาดของ index แต่ละตัว ของ Array หาได้จากขนาดของsubscript = upper bound - lower bound + 1
จำนวนสมาชิกหรือขนาดของอะเรย์ n มิติ หาได้จาก
ขนาดของอะเรย์ = ผลคูณของขนาดของsubscript แต่ละตัวเช่น

ขนาดของอะเรย์ A = Upper bound - lower bound+1
ขนาดของอะเรย์ K = ผลคูณของขนาดของsubscript แต่ละตัว
= (5-1+1) * (10-1+1)
= 5 * 10
= 50

การ จัดเก็บอะเรย์ในหน่วยความจำหลักจะใช้เนื้อที่ขนาดเท่ากันเพื่อเก็บสมาชิกแต่ ละตัวโดยเนื้อที่จะเรียงต่อเนื่องกันการจัดเก็บอะเรย์ในหน่วยความจำหลักจะ พิจารณาตามประเภทของอะเรย์ในมิติต่างๆดั้งนี้- อะเรย์ 1 มิติ- อะเรย์ หลายมิติ

อะเรย์ 1 มิติ
รูปแบบ
data-type array-name[expression]

data-type คือ ประเภทของข้อมูลอะเรย์ เช่น int char float
array-name คือ ชื่อของอะเรย์
expression คือ นิพจน์จำนวนเต็มซึ่งระบุจำนวน สมาชิกของอะเรย์
ตัวอย่าง char a[4]; int num[10];

char a[4];

หมาย ถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำสำหรับตัวแปร a ให้เป็นตัวแปรชุดชนิด character ขนาดสมาชิก 4 สมาชิกโดยหน่วยความจำจะเตรียมเนื้อที่ให้ 1 byte สำหรับ 1 ชื่อตัวแปร

 #include#define N 5int main(void) {int i;float score[N];float total=0;printf("Number of student [%d]\n",N);for(i=0; i <>(printf("input score student[%d]",i);scanf(%f",& score[i]);total = total + score[i]);)printf("Total is % f\n",total);printf("Average is % f\n",total/N);
return 0;



คือ การกำหนดค่าเริ่มต้นให้กับอะเรย์ การกำหนดค่าให้กับตัวแปรชุดที่มีค่าเป็นตัวเลข รูปแบบ data-type array-name[n] = {value1, value2,..,value n}; ตัวอย่าง int num[5] = {1,2,3,4,5}; หรือ int num[] = {1,2,3,4,5}; float x[6] = {0,0.25,0,0.5,0,0};


การ กำหนดค่าให้กับตัวแปรชุดชนิด Characterรูปแบบchar array-name[n] =“string”;EX.char ch[9] = “SAWASDEE”;หรือ char ch[9]={‘S’,‘A’,‘W’,‘A’,‘S’,‘D’,‘E’,‘E’,‘\0’}มีการกำหนดค่าให้ตัวแปร ชุดch[0] จะเก็บค่า S ถึง ch[7] จะเก็บค่า E และ ch[8] จะเก็บค่า \0โดยอัตโนมัติเพื่อแสดงการสิ้นสุดของข้อความ


สามารถ กำหนดอะเรย์เป็นพารามิเตอร์ส่งให้กับฟังกชั่นได้ 2 ลักษณะ 1. การกำหนด array element เป็น พารามิเตอร์ส่งค่าให้กับฟังกชั่นทำได้โดยอ้างถึงชื่ออะเรย์พร้อมระบุ subscript ตัวอย่าง swap(num[2],num[3]);draw_house(color[i],x[i],y[i]);
2. ส่งอะเรย์ทั้งชุดให้ฟังกชั่นทำได้โดยอ้างถึงชื่ออะเรย์โดยไม่มี subscript ตัวอย่าง #define N 10float a[N]; float avg;avg = average(N,a);



ถ้าเป็นอะเรย์มิติเดียวสามารถทำได้ทั้งหมด 3วิธี
1.มีการประกาศขนาดของอะเรย์ที่ทำหน้าที่ในการรับค่า
2.ไม่ต้องมีการประกาศขนาดของอะเรย์ที่ทำ หน้าที่ในการรับค่า
3. ตัวแปรที่ทำหน้าที่รับค่าถูกกำหนดเป็นพอยนเตอร์



การ ส่งผ่านอะเรย์ให้กับฟังกชั่นเป็นการส่งผ่านโดยการอ้างอิง เรียกว่า Pass by reference คือ ค่าของสมาชิกแต่ละตัวจะไม่ได้ถูกส่งไปให้ฟังกชั่น แต่ชื่อของอะเรย์จะถูกมองเป็นตำแหน่งในหน่วยความจำที่ใช้เก็บสมาชิกตัวแรก ซึ่ง addressนี้จะถูกส่งให้กับอารกิวเมนต์ที่ตรงกัน ดั้งนั้น อารกิวเมนต์จึงเป็นpointer ชี้ไปยังสมาชิกตัวแรกของอะเรย์

รูปแบบtype array-name[n] [m];
type หมายถึง ชนิดของตัวแปรที่ต้องการประกาศเป็นอะเรย์ array-name หมายถึง ชื่อของตัวแปรที่ต้องการประกาศเป็น อะเรย์n หมายถึง ตัวเลขที่แสดงตำแหน่งของแถว m หมายถึง ตัวเลขที่แสดงตำแหน่งของคอลัมน์
ตัวอย่าง
char a[2][3];

col1 col2 col3
row 1 a[0][0] a[0][1] a[0][2]
row 2 a[1][0] a[1][1] a[1][2]

หมายถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำ จำนวน 6 ที่สำหรับตัวแปร aกำหนดค่าเริ่มต้นได้หลายลักษณะ

ตัวอย่าง
กำหนดค่าเริ่มต้นให้ int a[2][3]
int a[2][3] = {1,2,3,4,5,6}; หรือ
int a[2][3] = {{1,2,3},{4,5,6}}; หรือ
int a[][3] = {{1,2,3},{4,5,6}};

#include
int main(void)
int a[3][4],r,c;
for(r=0; r<=2; r++)
for(c=0;c<=3;c++)
{
printf(" Entry Number ");
scanf("%d",&a[r][c]);
}
for(r=0; r<=2; r++)
for(c=0;c<=3;c++)
{
printf("\n Display");
printf("%4d",a[r][c]);
}
return 0;

Record or Structure
เป็น โครงสร้างข้อมูลที่ประกอบขึ้นมาจากข้อมูลพื้นฐานต่างประเภทกันรวมเป็น 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 ชื่อกลุ่ม structuretype ชนิดของตัวแปรที่อยู่ในกลุ่ม structurename-n ชื่อของตัวแปรที่อยู่ในกลุ่ม structure struc-variable ชื่อตัวแปรชนิดโครงสร้างคือ ตัวแปรที่มีโครงสร้าง เหมือนกับที่ประกาศไว้ในชื่อของกลุ่ม structureอาจมีหรือไม่มีก็ได้ถามมากกวา 1 ชื่อ แยกกันด้วยเครื่องหมายคอมมา (,)

การ ประกาศสมาชิกแต่ละตัวของ structureสมาชิกแต่ละตัวของ structure จะเป็นตัวแปรธรรมดาพอยนเตอร์อะเรย์หรือ structure ตัวอื่นก็ได้โดยชื่อของสมาชิกแต่ละตัวต้องแตกต่างกัน

struct employee {
char name[30];
int age;
float salary;
} personel;

จาก ตัวอย่าง เป็นการกำหนดให้ตัวแปร employeeเป็นชื่อของกลุ่ม structureที่ประกอบไปด้วย ตัวแปร name[30],age และ salary โดยมีตัวแปร personel เป็นตัวแปรชนิดโครงสร้างที่มีข้อมูลแบบเดียวกับตัวแปร employee

การ กำหนดให้ตัวแปรมีโครงสร้างข้อมูลเหมือนกับ structure ที่ประกาศไว้แล้วสามารถกำหนดให้ตัวแปรอื่น ๆ มีโครงสร้างข้อมูลเหมือนกับ structure ที่ประกาศไว้ได้โดยใช้คำสั่งstruct struct struc-name struc-variable;ถามหลายตัวแปรจะคั่นด้วยเครื่องหมายคอมมา ( ,)

ตัวอย่าง
structemployee {
char name[30];
int
float salary;
};
struct employee emp1, emp2;
emp1 และ emp2 เป็นตัวแปรแบบ structure
ซึ่ง มีการระบุ องค์ประกอบไว้ใน employeeเราสามารถที่จะประกาศ structureหนึ่งเป็นสมาชิกของอีก structureหนึ่งได้โดยจะต้องประกาศ structureที่จะนำไปฝั่งไว้ก่อนหน้า structure ตัวนอก

ตัวอย่าง
struct date {
int month;
int day;int year;
};
struct account {
int acct_no;
char name[30];
struct date lastpayment;
oldcustomer;


การ กำหนดค่าเริ่มต้นให้กับสมาชิกของ structureสามารถกำหนดค่าเริ่มต้นให้กับสมาชิกของ structureได้โดยค่าเริ่มต้นที่กำหนดให้กับสมาชิกตัวใด จะต้องอยู่ในตำแหน่งที่ตรงกับสมาชิกตัวนั้นค่าเริ่มต้นจะต้องอยู่ในวงเล็บ ปีกกาและข้อมูลค่าเริ่มต้นแต่ละตัวแยกกันด้วยเครื่องหมาย ,
structure account ประกอบด้วยสมาชิก ดั้งนี้
- เลขจำนวนเต็ม (int acct_no)
- อะเรย์ของอีกขระจำนวน 30 ตัว (char name[30]);
- structure date

struct date {
int month;
int day;
int year;
};
struct account
{
int acct_no;
char name[30];
struct date lastpayment;
};
struct account customer = {1234, “John Smith”, 5,24,46};

จะได้วา customer เป็นตัวแปรแบบstructure ประเภท accountมีการกำหนดค่าเริ่มต้นให้สมาชิกแต่ละตัว ดั้งนี้
acct_no มีค่าเป็นจำนวนเต็ม 1234
name[30]มีค่าเป็น string “John Smith”
month มีค่าเป็นจำนวนเต็ม 5
มีค่าเป็นจำนวนเต็ม 24
มีค่าเป็นจำนวนเต็ม 46
การอ้างถึงตัวแปรที่อยู่ในตัวแปรชนืดโครงสร้างสามารถอ้างถึงตัวแปรที่อยู่ในตัวแปรชนิด โครงสร้างได้ รูปแบบ
struct-variable.element-namestruct-variable ชื่อตัวแปรชนิดโครงสร้าง
element-name ชื่อตัวแปรที่อยู่ภายใน structure


ตัวอย่าง
struct employee {
char name[30];
char address[20];
float salary;
} personel;


จากตัวอย่าง ถ้าต้องการนำตัวแปร salary มาใช้งานก็จะอ้างถึงตัวแปร salary ได้โดย
personel.salary


ตัวอย่าง
int main(void) {
struct account {
char name[30];
char addr[30];
float salary;int age;}
new;strcpy(new.name, “somsri”);
strcpy(new.addr, “jantaburi”);
new.salary = 7500;new.age= 35;
printf(“Name: %s\n Address: %s\n Salary : %.2f\n Age : %d\n”,new.name,new.addr,new.salary,new.age);
return 0;
}


อะเรย์ชนิดโครงสร้าง
รูปแบบ struct struc-name {
type name-1;
type name-2;
………
type name-n;
} struct-array variable;


แบบทดสอบ  โครงสร้างข้อมูลแบบอาร์เรย์

1.โปรแกรมใดที่จำเป็นต้องใช้ตัวแปรอาร์เรย์
  . โปรแกรมคำนวณหาพื้นที่รูปวงกลม
  . โปรแกรมคำนวณหาพื้นที่รูปวงกลม 20 วง
  . โปรแกรมคำนวณหาพื้นที่และเส้นรอบวงของวงกลม
  . โปรแกรมหาพื้นที่วงกลมใดที่มีค่ามากที่สุดจาก 20 วง
2. ถ้าตัวแปร A เป็นตัวแปรแบบอาร์เรย์แล้ว กลุ่มข้อมูลใดสามารถจัดเก็บตัวแปร A ได้
  . 25 ,    60  ,    boy ,    T
  . A ,   B ,   C ,    D
  . Dog ,   cat  2.50
  . True ,   Somsri ,   10.25
3. จากโปรแกรมต่อไปนี้  Data  มีผลลัพธ์เป็นเท่าไร
         Program  Test  1
         Var Data : integer
         Begin
            Data : = 60;
            Data : = 20;
            Writeln (Data);
          End
  . 60
  . 20
  . 80
  . 40
4. ข้อใดต่อไปนี้ที่ผู้เขียนโปรแกรมควรกำหนดเป็นตัวแปรอาร์เรย์
  . I  เก็บค่านับรอบของลูป จำนวน 20 รอบ
  . Score เก็บค่าคะแนนนักศึกษา 20  คน
  . Mean เก็บคะแนนเฉลี่ยนักศึกษา 20 คน
  . Max เก็บคะแนนนักศึกษาที่มีคะแนนสูงสุดจาก 20 คน
5. ตัวแปรอาร์เรย์ต่างกับตัวแปรเดี่ยวอย่างไร
  . ตัวแปรอาร์เรย์เก็บค่าในฮาร์ดดิสก์ตัวแปรเดี่ยวเก็บค่าใน RAM
  . ตัวแปรอาร์เรย์เก็บค่าแบบ Numeric ตัวแปรเดี่ยวเก็บค่าแบบ String
  . ตัวแปรอาร์เรย์เก็บค่าคงที่ ตัวแปรเดี่ยวเก็บค่าเปลี่ยนแปลงได้
  . ตัวแปรอาร์เรย์เก็บค่าได้หลายค่า  ตัวแปรข้อมูลเดี่ยวเก็บค่าได้เพียงค่าเดี่ยว
6. ประกาศตัวแปร A:array[1..20] of integer; ตัวแปรอาร์เรย์ชุดที่ประกาศนี้สามารถเก็บค่าได้ทั้งหมดกี่ค่า
  . 1 ค่า
  . 19 ค่า
  . 20 ค่า
  . 21 ค่า
7. J : Array [1..100, 1..5] of integer; ตัวแปรอาร์เรย์ J ประกอบด้วยสมาชิกกี่ค่า
  . 5
  . 100
  . 50
  . 500
8. ข้อใดคือความหมายของโครงสร้างข้อมูลแบบอาร์เรย์
  . กลุ่มข้อมูลที่มีค่าชนิดเดียวกัน
  . กลุ่มข้อมูลที่เป็นตัวเลขเท่านั้น
  . กลุ่มข้อมูลที่มีความสัมพันธ์กัน
  . กลุ่มข้อมูลที่มีการลดความซ้ำซ้อน
9. ถ้าประกาศตัวแปรอาร์เรย์ดังนี้ Data : array [1…5] of integer; ข้อมูลใดไม่สามารถเก็บในอาร์เรย์ชุดนี้ได้
  . 500         20             40            25            2.5
  . 601         2                0             13           100
  . 1            0                0               0              1
  . 0            0                0                0              0
10. การประกาศตัวแปรอาร์เรย์เพื่อใช้งานต้องประกอบด้วยอะไรบ้าง
  . ชื่ออาร์เรย์    ชนิดข้อมูล
  . ชื่ออาร์เรย์    ค่าสูงสุดและค่าต่ำสุด     ชนิดข้อมูล
  . ชื่ออาร์เรย์    ค่าสูงสุดและค่าต่ำสุด     มิติของอาร์เรย์     ชนิดข้อมูล
  . ชื่ออาร์เรย์    ค่าสูงสุดและค่าต่ำสุด     มิติของอาร์เรย์     ชนิดข้อมูล     จำนวนสมาชิก
               เฉลย 1. ค  2. ข  3. ค  4. ข  5. ง  6. ค  7.  ข  8. ก  9. ง  10.

ไม่มีความคิดเห็น:

แสดงความคิดเห็น