วันเสาร์ที่ 13 ธันวาคม พ.ศ. 2557

sort

bubble sort

  1. เริ่มจากการนำค่าแรก มาเปรียบเทียบกับค่าถัดไป ซึ่งก็คือค่าที่สองในแถวลำดับ ถ้าไม่ตรงตามจุดประสงค์จะทำการสลับค่าทั้งสอง จากนั้นขยับมาเปรียบเทียบ ระหว่างค่า ที่ 2 และที่ 3 ทำเช่นนี้ไปเรื่อยๆ จนกว่าจะถึงค่าสุดท้าย ก็จะได้ค่าที่เรียงแล้วค่าแรกอยู่ ณ ตำแหน่งสุดท้ายของ แถวลำดับ 
  2. ดำเนินการเช่นเดียวกับข้อ 1. โดยเริ่มต้น จากการเปรียบเทียบ ค่าที่ 2 กับ ค่าที่ 3 และเปรียบเทียบ ทีละคู่ไปเรื่อย ๆ จนถึงค่า รองสุดท้าย ก็จะได้ค่าที่เรียงแล้ว ค่าที่ 2 อยู่ ณ ตำแหน่งรองสุดท้าย ของแถวลำดับ
  3. ดำเนินการเช่นเดียวกับข้อ 1. จนครบทุกค่า ก็จะได้แถวลำดับที่เรียง


int num[5]={5,4,3,2,1};
int i,j,temp;
for(i=0;i<4;i++){
            for(j=0;j<4;j++){
                    if(num[j]>num[j+1]){
                            temp=num[j];
                            num[j]=num[j+1];
                            num[j+1]=temp;
                            }
              }
}

insertion sort
  1. นำข้อมูล 2 ตัวแรกเปรียบเทียบแล้วเรียงลำดับกันก่อน 
  2.  นำข้อมูลตัวถัดไปเปรียบเทียบตั้งแต่ตัวแรกของทางฝั่งซ้ายแล้วนำไปแทรกในตำแหน่งที่เหมาะสมที่สุด ทำขั้นตอนนี้ไปเรื่อยจนกว่าจะหมดข้อมูลทางด้านขวา ก็จะได้ผลลัพธ์ในการเรียงลำดับ
void insertionSort(int arr[]) {
   for(int i=0; i< arr.length; i++) { 
          int value = arr[i]; 
          int j = i-1; 
          while( j>=0 and arr[j]>value ) { 
                     arr[j + 1] = arr[j] 
                      j--; 
            } 
     arr[j+1] = value ;
      } 
 Selection Sort
  1. เริ่มจากการนำ ค่าแรก มาเทียบกับค่าที่สองของแถวลำดับ ถ้าค่าแรก ค่าแรกมากกว่าค่าที่สอง จะทำการสลับค่าทั้งสองทำเช่นนี้ไปเรื่อยๆ โดยการนำค่าแรก มาเทียบกับค่าที่สาม , ค่าที่สี่, . . . , ค่าสุดท้าย เพื่อย้ายค่าที่มีค่าน้อยที่สุดมาอยู่ ณ ตำแหน่งแรก ของแถวลำดับ และเมื่อสิ้นสุดก็ถือว่าค่าแรก เป็นค่าที่เรียงแล้วในแถวลำดับ
  2. ดำเนินการเช่นเดียวกับข้อ 1. โดยการนำค่าที่สอง มาเทียบกับค่าถัดไปจนครบทุกค่าของแถวลำดับ เพื่อย้ายข้อมูลที่มีค่าน้อยที่สุดเป็นลำดับสอง มาอยู่ ณ ตำแหน่งที่สองของแถวลำดับ
  3. ดำเนินการเช่นเดียวกับข้อ 1. กับค่าที่สาม, ค่าที่สี่ ไปเรื่อยๆ จนถึง ค่ารองสุดท้าย ของแถวลำดับ ซึ่งในที่สุดจะได้ชุดข้อมูลในแถวลำดับที่เรียงกันตามความต้องการ

 SelectionSort(Var : A[Max])
   For (I := 1  to  Max-1)
           For (J := I+1  to  Max)   Do
                   If(A[I] > A[J])   Then   Swape(A[I],A[J]);
Merge sort
           เริ่มด้วยการแบ่งข้อมูลออกเป็นส่วนที่เล็กที่สุด แล้วเริ่มผสานข้อมูลก้อนเล็ก ๆ เข้าด้วยกันกลายเป็นข้อมูลก้อนที่ใหญ่ขึ้นในที่สุดข้อมูลทุกชิ้นจะเรียงลำดับอย่างสมบูรณ์
void merge_sort(int low, int high, int* p){
    int pivot;
    static int i(1);
    if (high>low)
    {
        pivot = low + ((high - low)/2);
        merge_sort(low, pivot, p);
        merge_sort(pivot+1, high, p);
        merge(low, pivot, high, p);

    }
}
void merge(int l, int pi, int h,int* arr)
{
            int start = l;
        int mid = pi+1;
        while((start<=pi)&&(mid <=h)){
            if (arr[start] > arr[mid])
            {
                int temp = arr[mid];
                arr[mid] = arr[start];
                arr[start] = temp;
                mid++;
             }
            else
                start++;
    }
}
Quick Sort

quicksort เป็น divide & conquer คือ 

ถ้ามีข้อมูลชุดนึงที่เรียงแล้ว(น้อย->มาก) นำตัวตรงกลางๆ ออกมา ตัวนั้นต้องมีสมบัติดังนี้คือ ต้องมากกว่าข้อมูลทางซ้ายทั้งหมดและน้อยกว่าข้อมูลทางขวาทั้งหมด
เพราะฉะนั้นถ้าทำให้เราสามารถหยิบทุกตัวในข้อมูลแล้วมีคุณสมบัติตามนี้หมด (ยกเว้นกรณีหยิบซ้ายสุดขวาสุดนะ) ก็จะได้ว่าข้อมูลถูกเรียงแล้ว 
เพราะฉะนั้นเวลาเขียน quicksort ก็จะมี function นึงที่เลือกข้อมูลมาตัวนึงมาจัดให้ด้านซ้ายน้อยกว่ามันหมด และทางขวามากกว่ามันหมด
แล้วทำซ้ำแบบเดิมด้วยการใช้ function เดิมกับข้อมูลด้านซ้าย และด้านขวา


int quickSort( int a[], int l, int r)
{
   int j;
   if( l < r )
   {
      // divide and conquer
        j = partition( a, l, r);
       quickSort( a, l, j-1);
       quickSort( a, j+1, r);
   }
   return(0);
}


int partition( int a[], int l, int r) {
   int pivot, i, j, t;
   pivot = a[l];
   i = l; j = r+1;
   
   while( 1)
   {
      do ++i; while( a[ i ] <= pivot && i <= r );
      do --j; while( a[j] > pivot );
      if( i >= j ) break;
      t = a[ i ]; a[ i ] = a[j]; a[j] = t;
   }
   t = a[l]; a[l] = a[j]; a[j] = t;
   return j;
}

วันศุกร์ที่ 12 ธันวาคม พ.ศ. 2557

โครงสร้างข้อมูลแบบคิว (Queue)


  • มีลักษณะคล้ายกับสแตก  คือ ข้อมูลในคิวจัดเรียงกันอย่างมีลำดับเช่นเดียวกับสแตก แต่ต่างกันตรงที่คิวแยกทางเข้าและออกของข้อมูลไว้คนละส่วนกัน
  • ข้อมูลที่นำเข้าไปเก็บก่อนจะถูกนำออกมาทำงานก่อน ส่วนข้อมูลที่เข้าไปเก็บทีหลังก็จะถูกนำออกมาใช้งานทีหลัง 
  • มีคุณสมบัติที่เรียกว่า  FIFO (First-In-First-Out)
  • มีขั้นตอนที่ซับซ้อนกว่าสแตก  เนื่องจากต้องจัดการกับตัวชี้ front และ rear ให้ถูกต้อง
  • ตัวชี้ Front ชี้ไปที่สมาชิกตัวแรก และตัวชี้ Rear ชี้ไปที่สมาชิกตัวสุดท้ายของคิว โดยที่เวลาข้อมูลจะเข้าสู่คิวจะเข้าทาง R ส่วนเวลาที่ข้อมูลจะออกจากคิวจะออกทาง F 


การเพิ่มข้อมูลในคิว (Enqueue)
           การเพิ่มข้อมูลในคิว ข้อมูลจะถูกเพิ่มเข้ามาทางด้าน Rear ของคิว
ขั้นตอนการเพิ่มข้อมูลลงในคิว

  1. ตรวจสอบว่าคิวเต็มหรือไม่ กรณีเกิดคิวเต็มค่าของ Rear จะเท่ากับขนาดสูงสุดของตัวแปรอาร์เรย์ ถ้าคิวเต็มควรแจ้งด้วยว่า คิวเต็ม ไม่สามารถเพิ่มข้อมูลได้
  2. การนำข้อมูลเข้าสู่คิว  จะไม่สามารถนำเข้าในขณะที่คิวเต็มหรือไม่มีที่ว่าง ถ้าพยายามจะทำจะเกิด error ที่เรียกว่า  overflow
  3. ถ้าคิวยังว่างอยู่ ให้ขยับ Rear ไปที่ตำแหน่งถัดไป 1 ตำแหน่ง
  4. นำข้อมูลที่ต้องการเพิ่มมาเก็บไว้ ณ ตำแหน่งใหม่ของ Rear
  5. ถ้าข้อมูลที่เพิ่มเข้าไปเป็นค่าเดียวในคิว ให้ขยับ Front มาอยู่ตำแหน่งเดียวกันกับ Rear นั่นคือ Front = 1


Algorithm QINSERT(Q,Y)
This Algorithm is to insert the item into queue
Pre  Q is a queue structure that has N size
        Y is an item to insert into queue
Post  Y is inserted into queue
     if  (R = N)   then
print   “QUEUE FULL”
     else
           set R to R + 1         /* ให้  R ชี้ไปยังที่ว่างถัดไป */
           set Q[R] to Y         /*  นำข้อมูล Y เข้าสู่คิว  */
           if  (F = 0)    then      /* ถ้า Y เป็นค่าเดียวในคิว  */
set  F to 1               /* F และ R ชี้ไปยังค่าเดียวกัน */
set  R to 1            endif
      endif
End QINSERT

การดึงข้อมูลจากคิว (Dequeue)

            ข้อมูลจะถูกดึงออกจากคิวผ่านทาง Front   กรณีถ้าข้อมูลอยู่ภายในคิวมีเพียงตัวเดียว ค่า Front จะมีค่าเท่ากับ Rear
ขั้นตอนการดึงข้อมูลจากคิว
  1. ตรวจสอบดูก่อนว่า คิวว่างหรือไม่ ถ้าคิวว่างให้แจ้งออกมาว่า คิวว่าง ดึงข้อมูลไม่ได้
  2. การนำข้อมูลออกจากคิว  จะไม่สามารถนำอะไรออกจากคิวที่ว่างเปล่า  ถ้าพยายามจะทำจะเกิด error ที่เรียกว่า underflow
  3. ถ้าคิวไม่ว่าง ให้ดึงข้อมูลที่ Front ออกมาเก็บไว้ในตัวแปร (ก็คือ ตัวข้อมูลที่ดึงออกมาได้)
  4. ตรวจสอบดูว่า ข้อมูลที่ถูกดึงออกมาเป็นข้อมูลตัวสุดท้ายในคิวหรือไม่ นั่นคือ ดูว่า Front = Rear หรือไม่
  5. ถ้า Front = Rear นั่นคือ ข้อมูลที่ดึงออกมาเป็นข้อมูลตัวสุดท้าย ฉะนั้นตอนนี้คิวว่างแล้ว วิธีการบอกว่าคิวว่างก็คือ Front = Rear = 0
  6. ถ้า Front != Rear คือ คิวไม่ว่าง ก็ให้ขยับ Front ขึ้นไปอีก 1 ขั้น
Algorithm QDelete(Q)
This Algorithm is to delete the item from queue
Pre  Q is a queue structure that has N size
Post  X is an item returned
    if  (F = 0)   then
print   “QUEUE EMPTY”
    else
           set  X  to Q[F]         /* นำค่าแถวหน้าออกจากคิวเก็บไว้ใน  X */
           if  (F = R)    THEN      /* ถ้า ในคิวมีค่าเดียว  */
set  F  to  0              /* คิวว่าง */
set  R to 0            else  
set  F to F + 1       /*  ให้  F  ชี้ไปยังค่าหน้าแถวคิวถัดไป  */
           endif
    endif
End QDelete
การตรวจสอบคิวว่าง (Empty)

          การตรวจสอบว่าคิวว่างหรือไม่นั้น เป็นงานประจำที่จะต้องทำเมื่อต้องการดึงข้อมูลออกจากคิว ซึ่งมีหลักการในการพิจารณาง่ายๆ คือ กรณีที่จะเกิดคิวว่างได้ก็ต่อเมื่อ Front = Rear = 0 เท่านั้น
Algorithm EmptyQ(Q)
Pre  Q is a queue structure
Post  boolean returned
if (F = 0) and (R = 0)  then
set empty to True
else
set empty to  False
endif
End EmptyQ
การตรวจสอบคิวเต็ม (Full)
การตรวจสอบว่าคิวเต็มหรือไม่นั้น เป็นการดำเนินการที่จำเป็นต้องทำเสมอเมื่อต้องการที่จะเพิ่มข้อมูลเข้าไปในคิว ซึ่งมีหลักการในการพิจารณาคือ กรณีเกิดคิวเต็มค่าของ Rear จะมีค่าเท่ากับความจุของคิวนั้น
 Algorithm FullQ(Q)
Pre  Q is a queue structure
Post  boolean returned
if (R = Max)  then
set  full  to True
else
set  full  to  False
endif
End FullQ


โครงสร้างข้อมูลแบบกองซ้อน (Stack)


  • สแตกเป็นลิเนียร์ลิสต์ที่มีคุณสมบัติที่ว่าเมื่อทำการเพิ่มข้อมูลหรือลบข้อมูลในสแตกจะกระทำทีปลายข้างเดียวกัน ปลายข้างนั้นเรียกว่า top ของสแตก(Top Of Stack)  จึงเรียกว่า เป็นโครงสร้างแบบกองซ้อน
  •  มีคุณสมบัติเฉพาะที่เรียกว่า ไลโฟลิสต์(LIFO List) คือสมาชิกข้อมูลที่เข้าไปในลิสต์ทีหลังจะได้ออกจากลิสต์ก่อน(Last In First Out) 
  •  การเพิ่มข้อมูลเข้าสแตกจะเรียกว่า pushing
  •  การนำข้อมูลจากสแตกเรียกว่า poping
  • การเพิ่มหรือลบข้อมูลในสแตกทำที่ top ของสแตก 
  • Top ของสแตกเป็นตัวชี้สมาชิกตัวท้ายสุดของสแตก 
  • การสร้างสแตกผู้สร้างต้องดำเนินการสองสิ่งใหญ่ ๆ คือ

              เลือกการแทนข้อมูลของสแตก 
              สร้างการดำเนินงานโดยใช้การแทนที่ข้อมูลที่เลือกแล้ว
  • การแทนข้อมูลของสแต็ก  สามารถทำได้ 2 วิธี  คือ
              การแทนข้อมูลของสแต็กแบบอะเรย์
             การแทนข้อมูลของสแต็กแบบลิงค์ลิสต์ 
  • สิ่งที่ต้องเพิ่มเข้าไปเพื่อให้โครงสร้างข้อมูลแบบลิสต์กลายเป็นโครงสร้างข้อมูลแบบสแตก  ก็คือ  ตัวชี้ตำแหน่ง สำหรับข้อมูลที่อยู่บนสุดของโครง สร้าง ซึ่งค่าที่เก็บอยู่ที่ตัวชี้ตำแหน่ง ก็คือ ตำแหน่งของข้อมูลที่อยู่บนสุดของโครงสร้างข้อมูล
อาร์เรย์
ลิงค์ลิสต์
การดำเนินการพื้นฐานกับสแตก
      การทดสอบว่าสแตกว่างหรือไม่ (empty)
      การทำงานเพื่อตรวจสอบว่ามีข้อมูลอยู่ในสแตกหรือไม่ ทำได้โดยการตรวจสอบดูว่าตำแหน่งของ Top ของสแตกอยู่ ณ ตำแหน่งเริ่มต้นหรือไม่ (ตำแหน่ง 0 ตรงนี้ดูไห้ดีว่า top เป็น 0 หรือ -1)

Algorithm empty (s)
Pre  s is a stack
Post  boolean returned for showing status of stack
Return   boolean returned
if  Top = 0 then
    set empty to True
else set empty to False
endif
return empty
End empty
       การนำสมาชิกลงสแตก (push) 
  • การเพิ่มข้อมูลเข้าสแตก หมายถึง การเพิ่มข้อมูลเข้าในสแตก โดยให้ทับบนข้อมูล สุดท้ายในสแตก
  • จะสามารถเพิ่มเข้าได้เรื่อย ๆ จนกว่าจะเต็มสแตก 
  • ความหมายของคำว่า สแตกเต็ม คือ  top ของสแตกชี้ที่เนื้อที่สุดท้ายของสแตกแล้ว เช่น ถ้า สแตกนั้นจองเนื้อที่ไว้ N เนื้อที่  โดยที่สามารถบรรจุสมาชิกในสแตกได้ N ตัว เมื่อสแตกว่างค่า top เป็นศูนย์ เมื่อสแตกเต็มค่า top เป็น N ดังนั้นเมื่อ top ชี้ที่ N ก็ไม่สามารถ Push ข้อมูลลงสแตกได้อีกหรือ เกิด errorที่เรียกว่า “Stack Overflow”
      ขั้นตอนการเพิ่มข้อมูลลงในสแตก
  1. ตรวจสอบว่าสแตกเต็มหรือไม่ โดยดูว่าในขณะนั้น top ของสแตกอยู่ที่ตำแหน่งสูงสุดหรือไม่
  2. ถ้ายังไม่เกินขนาดของสแตก ให้เพิ่มค่าของ top ไปยังตำแหน่งใหม่
  3. จากนั้นเพิ่มข้อมูลไว้ที่ตำแหน่ง top ของสแตก
Algorithm push( S, data)
Insert one item into the stack
Pre     S is a stack passed by reference
           data contain data to be pushed into stack
Post    data have been pushed in stack or error printed
Return  -
If  top  = upperbound  then
print  “Stack Full”
else
set  top  to  top +1
set  S[top]  to  data
endif
End push
         การดึงข้อมูลออกจากสแตก (Poping stack)
  • การดึงข้อมูลออกจากสแตก หมายถึงการนำข้อมูลที่อยู่บนสุดในสแตกหรือข้อมูลในตำแหน่งที่ top ออกจากสแตก
  • จะสามารถ pop สแตกได้เรื่อย ๆ จนกว่าสแตกจะว่าง
  •  ไม่สามารถ pop ค่าออกจากสแตกที่ว่างเปล่าได้ ไม่เช่นนั้นจะเกิด error ที่เรียกว่า “Stack underflow”
        ขั้นตอนการดึงข้อมูลออกจากสแตก
  1.  ตรวจสอบดูก่อนว่าสแตกว่างหรือไม่ โดยเรียกใช้ฟังก์ชัน empty เพื่อป้องกัน ปัญหา underflow 
  2.  ถ้าสแตกว่างก็จะตอบกลับมาเป็น False นั่นคือ ดึงข้อมูลไม่ได้
  3.  ถ้าภายในสแตกมีข้อมูลอยู่ ให้ดึงข้อมูลตัวที่อยู่ตำแหน่ง top ของสแตกออกมา
  4.  ลดค่าของ top เนื่องจากเราต้องย้ายตำแหน่ง top ของสแตกลงไป 1 ค่า หลังจากที่มีการดึงข้อมูลออกจากสแตก
Algorithm  POP(s)
This algorithm pops the items on the top of the stack and return to the user
Pre       s is a stack
Post      the item is poped or error is printed
Return  dataout contains poped item is returned
if top = 0   then
      print  “Stack empty”
else
      set  dataout  to  S[top]
      set  top  to  top –1
endif
return dataout
End POP

ลิงค์สแตก

  • คือ  โครงสร้างข้อมูลสแตกที่แทนที่ข้อมูลแบบไดนามิกส์ที่ใช้ลิงค์  โดยมี พอยน์เตอร์ top  ชี้ที่ top ของสแตก
  • การ push คือ การเพิ่มข้อมูลที่ต้นลิสต์
  • การ pop คือ การลบข้อมูลที่ต้นลิสต์
  • ควรใช้โครงสร้างลิงค์สแตกเมื่อต้องการใช้สแตกเก็บข้อมูลโดยไม่ทราบแน่นอนว่าข้อมูลมีมากเพียงใด แต่ถ้าทราบแน่นอนว่าข้อมูลที่เก็บในสแตกมีน้อย ก็ควรแทนที่ข้อมูลแบบ static  เพราะลิงค์สแตกก็ต้องสิ้นเปลืองเนื้อที่ในส่วนของพอยน์เตอร์
 struct s {
                item type  item;
                struct s  *link;
 };
 struct s *top;
       


โครงสร้างข้อมูลแบบ Linked Lists


  • ลิงค์ลิสต์เป็นการนำข้อมูลแต่ละโหนดมาจัดเรียงต่อกันเป็นลิสต์ที่มีการเชื่อมโยงกัน
  • ภายในแต่ละโหนดแบ่งส่วนประกอบได้เป็น 2 ฟิลด์ คือ ข้อมูล และแอดเดรสของโหนดถัดไป (Link) โดยฟิลด์ข้อมูลสามารถเก็บข้อมูลได้มากกว่าหนึ่งค่า
  • ลิงค์ลิสต์เป็นการนำข้อมุลแต่ละโหนดมาเรียงต่อกันเป็นลิสต์ สิ่งที่เป็นตัวกำหนดลำดับ คือ ฟิลด์แอดเดรสของแต่ละโหนด
  • การเข้าถึงลิงค์ลิสต์เริ่มต้นจะต้องมีพอยน์เตอร์ชี้ไปยังโหนดแรกของลิงค์ลิสต์ (Head)
  • ฟิลด์แอดเดรสของโหนดสุดท้ายต้องกำหนดให้เป็น null ซึ่งเป็นการกำหนดให้จบลิงค์ลิสต์
  • ลิงค์ลิสต์ที่ไม่มีโหนดอยู่ภายในจะเรียกว่า ลิสต์ว่าง (empty list หรือ null list)
  • ลิงค์ลิสต์เดี่ยว (Single Linked List) คือ ลิงค์ลิสต์ที่มีฟิลด์แอดเดรสเพียงฟิลด์เดียวสำหรับชี้ตำแหน่งของโหนดถัดไป

  • ลิงค์ลิสต์คู่ (Double Linked List) คือ ลิงค์ลิสต์ที่มีฟิลด์แอดเดรสจำนวน 2 ฟิลด์ สำหรับชี้ตำแหน่งของโหนถัดไปและตำแหน่งของโหนดที่อยู่ก่อนหน้า


Insert a node to the right of node(p)
      สมมติว่า กำหนดให้ Double linked list  เป็น List of integers  และต้องการแทรกโหนดทางขวามือจากโหนดที่ p ชี้อยู่  และกำหนด q และ r  เป็นตัวชี้ไปยังโหนดใด ๆ
q = getnode()
info(q) = x
r = right(p)
left(r) = q
right(q) = r
left(q) = p
right(p) = q
 Insert a node to the left of node(p)
      สมมติว่า กำหนดให้ Double linked list  เป็น List of integers  และต้องการแทรกโหนดทางซ้ายมือจากโหนดที่ p ชี้อยู่  และกำหนด q และ r  เป็นตัวชี้ไปยังโหนดใด ๆ
        q = getnode()
info(q) = x
r = left(p)
right(r) = q
left(q) = r
right(q) = p
left(p) = q
Delete a given node
     สมมติว่า กำหนดให้ Double linked list  เป็น List of integers  และต้องการลบโหนดที่ p ชี้อยู่ และเก็บค่า info ของโหนดนั้นไว้ในตัวแปร X
กำหนด q และ r  เป็นตัวชี้ไปยังโหนดใด ๆ
x  =  info(p)
q = left(p)
r = right(p)
right(q) = r
left(r) = q
freenode(p)


The Array Structure

  • เป็นโครงสร้างข้อมูลที่มีลักษณะของการจองพื้นที่ในหน่วยความจำติดกัน ด้วยจำนวนคงที่ ซึ่งเก็บข้อมูลได้หลายๆ ตัวแต่จะเป็นชนิดของข้อมูล(Data Type) เดียวกัน เรียกว่า base type
  • เป็นแบบหนึ่งของโครงสร้างที่เรียกว่า  Linear List
  • เป็นโครงสร้างที่มีลักษณะ Random-access
  • การอ้างถึงข้อมูลใน Array จะทำได้โดยการใช้ชื่อ Array และระบุ index หรือ subscript ของข้อมูลที่ต้องการ
  • index ของ Array มีค่าตั้งแต่ 0 - n-1  (n คือจำนวนของข้อมูลทั้งหมดใน Array ซึ่งจะแสดงขนาดของ Array) 
ประเภทของ Array
nArray หนึ่งมิติ

  •          คือ โครงสร้างข้อมูลแถวลำดับที่มีการจัดเก็บข้อมูลต่อเนื่องกันไปเป็นแถวต่อ เนื่องกันตลอด ซึ่งเปรียบเหมือนกับตารางแถวเดียว โดยมีดัชนีอ้างอิงเพียง 1 ตัว
  • มีรูปแบบการประกาศตัวแปรเหมือนตัวแปรทั่วๆ ไปแต่มีการเพิ่มส่วนของการระบุจำนวนสมาชิก ว่าจะให้มีกี่ช่องไว้ในเครื่องหมายก้ามปู [ ] 

Data-Type   arrayName[arraySize]
Data-type  คือ ประเภทของข้อมูล Array  เช่น int,char,float
Array-name  คือ ชื่อของ Array
arraySize คือ จำนวนสมาชิกนี้สามารถระบุเป็นตัวเลขจำนวนเต็มลงไปเลย หรือใส่เป็นค่าคงที่ก็ได้ 
       การส่งผ่าน Array ไปยังฟังก์ชัน
void  setArray( int b[ ], int  n)
{
for (int i = 0; i< n; i++)
{   .................................................    {แสดงค่า ลำดับสมาชิกใน array}
    .................................................    {รับค่าจากผู้ใช้แล้วเก็บไว้เป็นสมาชิกของ array}

}
}

การเข้าถึงข้อมูลใน Array
การเข้าถึงข้อมูลที่อยู่ใน Array เพื่อที่จะนำไปสู่การค้นหา แก้ไข การเพิ่ม หรือการลดข้อมูลที่อยู่ในอาร์เรย์ ถ้ากำหนดให้ A คืออาร์เรย์หนึ่งมิติ เราสามารถเข้าถึงข้อมูลเพื่อทำงาน Process() ใดๆ กับข้อมูลทุกๆ ตัวที่อยู่ในอาร์เรย์
ตัวอย่าง
Traverse_Array(A)
set index  to 1   {กำหนดค่าเริ่มต้นให้กับดัชนี}
do while (index < size-of-A) {ทำซ้ำขณะที่ยังไม่ครบทุกตัว}
Process(A[index])   {ทำงานกับข้อมูล}
set index  to  index + 1 {เปลี่ยนตำแหน่งดัชนีของข้อมูล}
enddo
Insertion
สมมติให้ Array มีขนาด N ตัว ถ้าต้องการเพิ่มข้อมูล Item เข้าไปใน Array โดยให้เข้าไปอยู่ในตำแหน่ง K เขียนเป็นอัลกอริธึมได้ดังตัวอย่าง
ตัวอย่าง
Insert_Array(A, N, K, Item)
set index  to  N {กำหนดตำแหน่งตัวสุดท้าย}
do while (index > =K)             {ทำซ้ำขณะที่ยังไม่ถึงตำแหน่งที่ต้องการ}
set  A[index+1]  to  A[index] {ย้ายข้อมูลไป 1 ตำแหน่ง}
set index  to  index – 1 {ลดตำแหน่งลง}
end do
set  A[K]  to  Item {กำหนดค่า Item ในตำแหน่งที่ต้องการ}
set  N  to  N+1 {เปลี่ยนขนาดข้อมูล}
Deleting
สมมติให้อาร์เรย์มีขนาด N ตัว ถ้าต้องการลบข้อมูลตำแหน่งที่ K ออกจากอาร์เรย์ เขียนเป็นอัลกอริธึมได้ดังตัวอย่าง
Delete_Array(A, N, K)
set index to K
do while (index <= N-1) 
set  A[index] to A[index+1]
set  index to index+1
end do
set N to N - 1