1 / 29

โครงสร้างข้อมูล ..

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

aure
Télécharger la présentation

โครงสร้างข้อมูล ..

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. โครงสร้างข้อมูล ..

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

  3. อาร์เรย์หนึ่งมิติ • อาร์เรย์หนึ่งมิติ (One-dimension Array) มีลักษณะที่ง่ายที่สุดเป็นตารางที่มีเพียงแถวเดียว บางครั้งก็เรียกว่าเว็กเตอร์ • อาร์เรย์หนึ่งมิติจะมีดัชนีเพียงตัวเดียวใช้อ้างไปยังตำแหน่งของแต่ละสมาชิกในอาร์เรย์ซึ่งมีค่าเป็นลำดับ สมาชิกแต่ละตัวจะถูกแยกแยะตัวชื่ออาร์เรย์ตามด้วยดัชนีที่อยู่ในวงเล็บดังในรูป  ดังนั้น เมื่อต้องการใช้อาร์เรย์ก็เพียงแต่กำหนดชื่อและใช้ดัชนีอ้างไปยังแต่ละสมาชิก การเขียนอัลกอริทึมจึงใช้โครงสร้างควบคุมการทำงานแบบวนลูปเพื่อใช้ควบคุมสมาชิกแต่ละตัว   

  4. ผลลัพธ์ที่ได้

  5. อาร์เรย์สองมิติ • อาร์เรย์สองมิติ (Tow-dimension Array) เป็นอาร์เรย์ที่สมาชิกมีโครงสร้างข้อมูลอาร์เรย์ ลักษณะเป็นตารางที่มีทั้งแถว และคอลัมน์ หรือเรียกว่าแมตทริก ดังในรูปที่ 2.1 เป็นอาร์เรย์สองมิติชื่อ Matrix ที่ประกอบด้วยสมาชิกใยแถว M ตัว แต่ละสมาชิกจะมีสมาชิกในคอลัมน์ N ตัว ก็จะได้เป็นตารางขนาด M ต่อ N

  6. จากโปรแกรมในตารางที่ 2.2 ผลลัพธ์ที่ได้ ตารางที่ 2.2 ตัวอย่างโปรแกรม Temp2.c

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

  8. อาร์เรย์หลายมิติ การสร้างอาร์เรย์อาจเป็น สามมิติ สี่มิติ หรือมากกว่านั้นเรียกว่าอาร์เรย์หลายมิติหรือ N- มิติ ดัชนีและช่วงจำนวนสมาชิกก็จะเพิ่มมากขึ้นตามจำนวนมิติ อาร์เรย์ N-มิติจะใช้ค่าดัชนี N ตัวอ้างไปยังตำแหน่งสมาชิกแต่ละตัว การกำหนดอาร์เรย์ N-มิติจะเป็นดังนี้M (L1:U1,L2:U2, …,Ln :Un)แต่ละสมาชิกของอาร์เรย์จะถูกอ้างถึงโดยกำหนดเป็น M(I1,I2,…,In) ซึ่งแต่ละดัชนีที่ Ik ≤ Ik ≤ Uk สำหรับ k = 1,2,…,N จำนวนสมาชิกทั้งในอาร์เรย์ M เท่ากับ                (U1 – L1 +1) * (U2 – L2 +1) * … * (Un – Ln +1)

  9. ผลลัพธ์ที่ได้ • ตัวอย่างการอาร์เรย์หลายมิติ

  10. โครงสร้างข้อมูลสตริงและเรคคอร์ดโครงสร้างข้อมูลสตริงและเรคคอร์ด • โครงสร้างข้อมูลสตริง สตริงเป็นโครงสร้างข้อมูลที่เป็นการรวบรวมโครงสร้างข้อมูลคาร์แรคเตอร์ (Character) ซึ่งเป็นตัวอักษรและสัญลักษณ์ (Symbol)  ต่าง ๆ  เป็นชนิดข้อมูลที่ถูกใช้งานมากชนิดหนึ่ง  ภาษาเขียนโปรแกรมหลายภาษาจะกำหนดให้มาใช้งานได้ทันที เช่น ภาษาปาสคาล แต่บางภาษาไม่มีมาให้ เช่น ภาษาซี จะต้องสร้างขึ้นมาด้วยผู้เขียนโปรแกรม โดยนำโครงสร้างอาร์เรย์มาใช้และสมาชิกทุกตัวมีโครงสร้างข้อมูลคาร์แรคเตอร์ได้ชนิดเดียว ดังในรูปเป็นสตริงที่มีตัวอักษรต่อเป็นข้อความ

  11. การกำหนดสตริง รูปแบบการกำหนดสตริงเป็นการนำเอาอักษรพยัญชนะ  (Alphabet)   มรารวบรวม ดังนี้ S  =  ‘a1a2 . . . aN’ โดยตัวอักษร  a1  เป็นสมาชิกของอักษรพยัญชนะ และ 1 ≤i≤N เป็นการสร้างสตริงชื่อ  S  ที่มีความยาวเท่ากับ  N  ตัวอักษร และการกำหนดค่าให้แต่ละสมาชิกจะเป็นแบบเดียวกับการใช้ในอาร์เรย์   ทำให้การใช้งานไม่สะดวกเมื่อต้องใช้งานบ่อย  ๆ   จึงมีการกำหนดชุดปฏิบัติการพื้นฐาน  (Operator)  เพื่อจัดการกับสตริง            • ความยาวสตริง  (String  Length) เป็นการบอกให้ทราบว่าสตริงตัวนั้นมีตัวอักษรหรือ  ความยาวเท่าไร  จะกำหนดเป็นฟังก์ชันLength  ที่ส่งค่าความยาวกลับมาให้  ดังนี้ N  =  Length (S) ;

  12. #include<stdio.h>#include<conio.h> int Length( char *  s)  {          int i ;           for( i = 0;  s[i] ;  i++ );          return i ;} void Concate( char* ds, char* ss )  {          int  i , j ;           for( i =  0;  ds[i];  i++ );          for( j =  0;  ss[j];  j++ )                   ds [i++] = ss[j];ds[i] =  ‘\0’;} void SubStr( char* ds, char* ss, int pos, int len ) {          int  i  = 0;          pos - -;          for(  ;  i  <  len;  i++ )                   ds[i]         =  ss[pos++];          ds[i]  =  ‘\0’;} main()  {          char  FName [80];          char  LName [80];char  s [80]  =  {   “Hello,  “   };          printf( “Enter  your  first  name:  “);          scanf( “%s”,  FName );          printf( “Enter  your  last  name:  “);          scanf( “%s”,  LName );           Concat( s,  FName );          printf( “%s/n”,  s );          printf( “Length of first name is:  %d/n”, Length (FName) );printf( “Length of last name is:  %d/n”,  Length (LName) );           SubStr( s, FName, 3 , 5);          printf(  “Goodbye  %s/n”,  s );           getch();} ตัวอย่างการใช้สตริง • เป็นตัวอย่างที่จะรับค่าป็นข้อความเข้ามาจากคีย์บอร์ดและนำออกแสดงผลในรูปแบบต่าง  ๆ  โดยใช้ฟังก์ชันที่กล่าวมา  ที่จะจัดการกับข้อความ

  13. โครงสร้างข้อมูลเรคคอร์ด โครงสร้างข้อมูลเรคคอร์ด  เรคคอร์ด  (Record)  หรือระเบียนเป็นโครงสร้างข้อมูลที่ผู้ใช้ต้องกำหนดคุณสมบัติขึ้นมาก่อนเช่นเดียวกับอาร์เรย์  แต่แตกต่างกันที่อาร์เรย์ประกอบด้วยสมาชิกทุกตัวมีโครงสร้างข้อมูลชนิดเดียวกัน  ส่วนเรคคอร์ดประกอบด้วยสมาชิกแต่ละตัวที่สามารถมีโครงสร้างข้อมูลชนิดใดก็ได้ไม่จำเป็นต้องเหมือนกัน  จึงเป็นโครงร้างข้อมูลที่ถูกใช้งานบ่อยมากเพื่อเก็บข้อมูลทางธุรกิจ  สมาชิกในเรคคอร์ดเรียกว่าเขตข้อมูลหรือฟิลด์  (Field)  และไม่มีการจัดลำดับสมาชิกเช่นเดียวกับอาร์เรย์  ถูกเรียกใช้งานโดยใช้ชื่อของสมาชิกตัวนั้น  ส่วนอาร์เรย์ไม่มีชื่อจะใช้ดัชนี  โดยพื้นฐานเรคคอร์ดมีลักษณะเป็นตารางแถวเดียว  ดังในรูปที่  3.2   เป็นการเก็บค่าของแต่ละเขตข้อมูลที่มีโครงสร้างข้อมูลต่างกันประกอบด้วย  เลขจำนวนเต็ม  ข้อความ  และเลขทศนิยม ตัวอย่างโครงสร้างข้อมูลเรคคอร์ดที่แต่ละเขตข้อมูลมีโครงสร้างข้อมูลต่างกัน

  14. การกำหนดเรคคอร์ด  เรคคอร์ดมีการกำหนดรูปแบบเป็น  ดังนี้ Rec  (Field1,  Field2, . . . ,  FieldN) โดย  Fieldiเป็นสมาชิกของเรคคอร์ด  และ  1≤ i ≤ N เป็นการสร้างเรคคอร์ดชื่อ  Rec  ที่มีสมาชิก  N  ตัว การใช้งานเรคคอร์ดเมื่อต้องการอ้างถึงสมาชิกจะใช้เครื่องหมายมหัพภาค  (จุด)  แสดงคุณสมบัติ  (Qualification)  คั่นระหว่างชื่อเรคคอร์ดกับชื่อเขตข้อมูลดังนี้ Rec . Fieldi

  15. ตัวอย่างโปรแกรม  Record1.c • #include<stdio.h>#include<coio.h>#include<string.h> struct Enployee  {          int ID;          char Name[80];          char Phone[80];          float Salary;}; void  printRecord( struct Employee e )  {          printf( “ID-number  Number   Phone   Salary\n” );          printf( “%-10d %-20s %-12s %-8.2f\n”,  e.ID, e.Name,  e.Phone, e.Salary );} main()  {          struct Employee emp1;          int id;          char name[80];          char phone[80];          float salary;           printf( “Employee Records: \n” );          printf( “Enter ID-number:  “ );          scanf( “%d” , &id );          emp1.ID  =  id;          getchar(); printf( “Enter name:  “);          gets( name );          strcpy(emp1.Name,name);          printf( “Enter phone:  “);          scanf( “%s”, phone );          strcpy( emp1.Phone,phone ); printf( “Enter salary:  “);             scanf( “%f”, &salary );          emp1.Salary  =  salary; printf( “\nValue in record is\n” );          printRecord( emp1 ); getch();

  16. โครงสร้างข้อมูลสแตก • โครงสร้างสแตก  โครงสร้างสแตกข้อมูลที่รู้จักและนำมาใช้งานชนิดหนึ่งก็คือ สแตก (Stack) มีลักษณะเป็นรายการในแนวเชิงเส้น (Linear List) รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการ สามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก (Top of Stack) เรียกว่าตัวชี้สแตก (Stack Pointer) มีรูปแบบเป็น (Top)(S)โดยสแตกมีการกำหนดเป็นรูปแบบดังนี้  S = [s1 ,S2, … ,ST]ด้านบนสุดของสแตกจะอยู่ที่ Top (S) =ST และมีจำนวนสมาชิกในสแตกเท่ากับ T ดังในรูป

  17. สแตกถูกนำมาใช้แก้ไขปัญหาต่าง ๆ ดังต่อไปนี้ •  เนื่องจากคอมพิวเตอร์ทำงานในรูปแบบของเลขฐาน 2 แต่ในส่วนของผู้ใช้งานจะเป็นเลขฐาน 10 จึงต้องแปลงค่าจากเลขฐาน 10 ไปเป็นเลขฐาน 2 เช่น เปลี่ยนจาก 26 เป็น 11010  • คอมไพเลอร์ (Compiler) จะต้องคำนวณนิพจน์ (Expression) ทางคณิตศาสตร์ที่มีเครี่องหมายวงเล็บเปิดและปิดเข้ามาเกี่ยวข้อง  • โปรแกรมเกมเล่นไพ่ (Card Game) จะมีที่วางกองไพ่และการแจกไพ่ได้เฉพาะใบที่อยู่บนสุด • รูปแบบปัญหาการทำงานบางอย่าง  เช่น  การทำงานของ  Switching Box ของเครือข่าย หรือรูปแบบการสลับตู้รถไฟบนราง 

  18. การปฏิบัติการของสแตก • CreateStack( ) ใช้สร้างสแตกใหม่ขึ้นมาใช้งานและกำหนดค่าเริ่มต้นต่าง ๆ • Push(value,  stack)  ใช้เพิ่มค่าใหม่เก็บลงในสแตกที่ใช้งานอยู่  มีอัลกอริทึมการทำงาน ตัวอย่าง อัลกอริทึมการเพิ่มค่าใหม่เก็บลงในสแตก 1.  ตรวจสอบสแตกว่าจะมีสมาชิกอยู่เต็มหรือไม่  โดยเปรียบเทียบค่า Top กับขนาดอาร์เรย์ 2.  ถ้าสแตกไม่เต็ม             2.1  เพิ่มค่าให้กับ Top โดยการบวก 1             2.2  ทำการนำค่าที่ได้มาเก็บลงในสแตกในตำแหน่ง Top ไม่เช่นนั้นแจ้งกลับมาว่าสแตกเต็ม 3.  Pop(stack)  ใช้ดึงค่าออกจากสแตกที่ใช้งานอยู่และส่งค่า value กลับมาให้ มีอัลกอริทึมการ   ทำงานเป็นดังในตารางต่อไป

  19. อัลกอริทึมดึงค่าออกจากสแตกอัลกอริทึมดึงค่าออกจากสแตก 1.ตรวจสอบว่าสแตกว่างหรือไม่ โดยเปรียบเทียบค่า Top กับขนาดอาร์เรย์ 2.ถ้าสแตกไม่ว่าง • ทำการดึงค่าในตำแหน่ง  Top ออกมาให้ • ลดค่าของ Top โดยการลบ 1 ไม่เช่นนั้นแจ้งกลับมาว่าสแตกว่าง 3.  isEmpty(stack)  ใช้ตรวจสอบว่าสแตกที่ใช้งานอยู่ว่างหรือไม่  ถ้าไม่มีค่าเก็บไว้เลยจะส่งค่าจริงกลับให้

  20. เมื่อนำสแตกมาใช้งานตามลำดับดังในรูป (a) ถึง (g) มีการทำงานโดยใช้ชุดปฏิบัติการ Push และ Pop ดังนี้ • เริ่มต้นสร้างสแตก  S ขึ้นมาทำงานจะได้เป็นสแตกว่าง  ไม่มีสมาชิกโดยตัวชึ้สแตก Top ยังไม่มีค่า • นำค่า  A  เข้ามาเก็บเป็นตัวแรกโดยใช้  Push(A) สแตก S = [A] ตัวชี้สแตก Top = A • นำค่า  B เก็บต่อโดยใช้ Push(B) สแตก S = [A,B] ตัวชี้สแตก Top = B • (d)นำค่า C เก็บต่อโดยใช้ Push(C) สแตก S = [A,B,C]ตัวชี้สแตก Top =C • ต้องการดึงค่าออกมาโดยใช้ Pop( ) สแตก S = [A,B] ตัวชี้สแตกTop = B • (f) นำค่า D, E เก็บต่อโดยใช้ Push(D) และ Push(E) ตามลำดับ สแตก S = [A,B,D,E] ตัวชี้สแตก Top = E • (g) ดึงค่าออกมา 3 ค่าโดยใช้ Pop( )  3  ครั้งและเก็บค่า F โดยใช้ Push(F) สแตก S = [A,F] ตัวชี้สแตก Top = F • จะเห็นว่าการทำงานของสแตกเมื่อมีค่าใดส่งเข้ามาเก็บเป็นตัวสุดท้ายก็จะอยู่บนสุด  ค่าที่ใส่ลงมาก่อนหน้านี้ก็จะถูกซ้อนทับตามลำดับ  หากมีการดึงค่าออกมาใช้ค่าที่อยู่บนสุดจะถูกดึงออกมาก่อน  ลักษณะที่ได้จึงเป็นการกลับกันของลำดับการใช้งานและเรียกว่าเข้าทีหลังออกก่อน

  21. โครงสร้างข้อมูลคิว • คิว (Queue) เป็นโครงสร้างข้อมูลที่รู้จักและนำมาใช้งานมากเช่นเดียวกับสแตก (Stack) และมีลักษณะเป็นรายการในแนวเชิงเส้น (Linear List) เช่นกัน มีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มค่าเข้าไปในตอนท้ายของรายการเพียงด้านเดียว เรียกว่า ส่วนหลัง (Rear) และลบค่าในตอนต้นของรายการเพียงด้านเดียว เรียกว่าส่วนหน้า (Front) ซึ่งกำหนดคิวเป็นรูปแบบดังนี้ Q = [Q1, Q2, . . .  , QT]โดย Front (Q) คือ Q1 และ Rear (Q) คือ QT มีจำนานสมาชิกในคิวเท่ากับ T ดังในรูปที่ 5.1 โดยลักษณะมีตัวชี้ส่วนหน้าอยู่ด้านซ้ายและตัวชี้ด้านท้ายอยู่ด้านขวา และอาจกลับด้านกันก็ได้ให้ตัวชี้ส่วนหน้าอยู่ด้านขวาและตัวชี้ส่วนท้ายอยู่ด้านซ้าย  Front         Rear     

  22.  ลักษณะของคิวถูกนำมาใช้แก้ไขปัญหาต่างๆในแอปพลิเคชั่นต่างๆ เช่น จำลอง (Simulation) การทำงานของระบบจริงในกิจกรรมแบบเข้าก่อนออกก่อน เช่น การเข้าแถวเพื่อนซื้อของหรือชำระเงินเพื่อตรวจสอบการให้บริการเพียงพอหรือไม่ การนำคิวไปใช้ในการสำรวจพิจารณา (Observation) ตามปริมาณรถติดเพื่อควบคุมไฟจราจรตามทางแยก การนำหลักการของคิว (Queuing Theory) มาใช้ เช่น การส่งข้อมูลข่าวสารในเครือข่าย การส่งแฟ้มข้อมูลไปยังพริ้นเตอร์เพื่อพิมพ์งานตามลำดับคิว หรือรูปแบบการสลับตู้รถไฟบนราง ดังรูป

  23. ตัวอย่างการใช้คิวแก้ปัญหาการสลับตู้รถไฟบนรางตัวอย่างการใช้คิวแก้ปัญหาการสลับตู้รถไฟบนราง • ปัญหาต่างๆเหล่านี้สามารถแก้ไขโดยใช้โครงสร้างคิวที่มีลักษณะการทำงานในรูปแบบที่เรียกว่าเข้าก่อนออกก่อน (First-In-First-Out, FIFO) หรือเข้ามาก่อนได้บริการก่อน (First-Come-First-Served, FCFS) เมื่อค่าใหม่เข้ามาก็จะไปต่อเป็นส่วนท้ายแทนค่าเดิมที่เก็บอยู่ส่วนท้ายก่อนหน้านี้ไปเรื่อยๆ ถ้าเป็นการดึงค่าออกจากคิวก็จะนำค่าแรกสุดที่อยู่ในคิวดึงออกมาให้ก่อนสมาชิกตัวถัดไปส่วนหน้าแทน การปฏิบัติการของคิว                 จากลักษณะของคิวจะมีการปฏิบัติการเข้ามาช่วยการทำงานและจัดการกับคิวให้มีความถูกต้อง โดยมีชุดปฏิบัติการพื้นฐาน ดังต่อไปนี้                 1.CreateQueue () ใช้สร้างคิวใหม่ขึ้นมาใช้งานและกำหนดค่าเริ่มต้นต่างๆ                 2.Insert (value, queue) ใช้เพิ่มค่าใหม่เก็บลงในคิวที่ใช้งานอยู่ และขยับตำแหน่งใหม่ให้กับส่วนท้าย                 3.Remove (queue) ใช้ดึงค่าออกจากคิวที่ใช้งานอยู่และส่งค่า value กลับมาให้และขยับไปยังตำแหน่งถัดไปให้เป็นส่วนหน้า                 4. isEmpty(stack) ใช้ตรวจสอบว่าคิวที่ใช้งานอยู่ว่างหรือไม่ ถ้าไม่มีค่าเก็บไว้เลยจะส่งค่าจริงกลับมาให้                 การนำคิวมาใช้งานเป็นไปตามลำดับดังในรูป (a) ถึง (g) มีการทำงานโดยใช้ชุดปฏิบัติการดังนี้ (a) เริ่มต้นสร้างคิว Qขึ้นมาทำงาน Create Queue (Q) ได้เป็นคิวว่างไม่มีสมาชิกโดยตัวชี้ส่วนหน้าและส่วนท้ายยังไม่มีค่า 

  24. การทำงานของคิวเมื่อมีค่าใดส่งเข้ามาเก็บเป็นตัวแรกก็จะอยู่ส่วนหน้า ค่าถัดมาก็จะต่อท้ายไปเรื่อยๆ จนตัวสุดท้ายคือส่วนหลัง หากมีการดึงค่าออกมาใช้ ค่าที่อยู่ส่วนหน้าจะถูกดึงออกมาก่อน ลักษณะที่ได้จึงเป็นลำดับการใช้งานทั่วไปและเรียกว่าเข้าก่อนออกก่อน  ในการสร้างคิวมาใช้งานโดยพื้นฐานจะใช้อาร์เรย์เก็บค่าสมาชิก มีตัวแปร Front และ Rear เป็นตัวชี้ตำแหน่งส่วนหน้าและส่วนท้ายคิว จึงเกิดความลำบากเมื่อการเก็บค่าเข้ามาจนถึงสมาชิกตัวสุดท้ายของอาร์เรย์ ทำให้เพิ่มค่าใหม่เข้ามาอีกไม่ได้ ถ้าหากมีการเพิ่มเข้ามาอีกจะเกิดลักษณะการล้นของข้อมูลในคิว (Queue Overflow) และเมื่อใดมีการดึงค่าในส่วนหน้าออกมาก็ทำให้พื้นที่ส่วนหน้าของอาร์เรย์เกิดว่างและใช้งานไม่ได้ ทำให้ต้องปรับปรุงโดยย้ายค่าที่มีอยู่ส่วนท้ายกลับไปไว้ส่วนหน้าของอาร์เรย์เพื่อนำพื้นที่ว่างกลับมาใช้งานได้ แต่เป็นค่าใช้จ่ายที่ต้องทำงานเพิ่มโดยเฉพาะคิวที่มีขนาดใหญ่ ดังในรูปที่ 5.3 เป็นตัวอย่างคิวที่ใช้อาร์เรย์ขนาดเท่ากับ 5 โดยเพิ่มค่า Insert(70),Insert(80) และ Insert(50) ตามลำดับในรูป (a) จากนั้นดึงออกมา 2 ค่าโดยใช้ Remove() 2 ครั้งได้เป็นรูป (b) และเพิ่มค่า Insert(90) Insert(60) ในรูป (c) เนื่องจากไม่สามารถเพิ่มค่าใหม่ได้อีกจึงต้องขยับค่าที่เก็บอยู่ไปทางซ้ายในรูป (d) พร้อมกับกำหนดค่าตำแหน่งใหม่ให้กับ ตัวแปร Front และ Rear

  25. โครงสร้างข้อมูลลิ้งค์ลิสต์ โครงสร้างข้อมูลลิ้งค์ลิสต์  • วิธีแก้ปัญหาในการย้ายข้อมูลที่พบในการจัดเก็บที่มีรูปแบบเรียงตามลำดับ(Sequential)เปลี่ยนมาใช้รูปแบบไม่เรียงตามลำดับ (Non-sequential)ซึ่งรูปแบบการเรียงตามลำดับจะมีสมาชิกเรียงต่อเนื่องติดกันในทางตรรกะ (Logical) และทางกายภาพ(Physical) เป็นแบบเดียวกัน แต่รูปแบบไม่เรียงตามลำดับสมาชิกต่อเนื่องติดกันในทางตรรกะ ส่วนทางกายภาพไม่จำเป็นต้องเหมือนกัน โดยในทางตรรกะจะแสดงด้วยแต่ละสมาชิกมีการชี้ (Point) ต้อไปยังสมาชิกตัวถัดไป สมาชิกทุกตัวในรายการจึงถูกเชื่อมต่อ (Link) เข้าด้วยกัน ดังรูป เป็นรายการเชื่อมต่อหรือเรียกว่าลิ้งค์ลิสต์ (Linked List) มีสมาชิก N ตัว แต่ละสมาชิกเรียกว่าโหนด (Node)

  26. โครงสร้างข้อมูลเรคคอร์ด ประกอบด้วยสองส่วน คือ1.ส่วนเก็บข้อมูล (Info)ใช้เก็บข้อมูลข่าวสารที่มีโครงสร้างข้อมูลเบื้องต้นหรือเรียบง่าย 2.ส่วนการเชื่อมต่อ (Next)เป็นตัวชี้หรือพอยน์เตอร์เก็บค่าแอดเดรส  สำหรับในทางกายภาพของลิ้งค์ลิสต์ แต่ละดหนดไม่จำเป็นต้องอยู่ติดกัน อาจกระจัดกระจายไปยู่ส่วนไหนก็ได้ในหน่วยความจำโดยมีตัวเชื่อมชี้ไปยังตัวตำแหน่งของโหนดถัดไป        ดังที่กล่าวในตอนต้นโครงสร้างสแตกและคิวมีการใช้อาร์เรย์ในการเก็บค่า สมาชิกทุกตัวจึงถูกจำกัดให้เป็นชนิดเดียวกัน(Homogenous) ซึ่งแก้ไขโดยเปลี่ยนมาใช้ลิ้งค์ลิสต์ที่มีโครงสร้างข้อมูลต่างกันได้ นอกจากนี้ยังมีผลดีในการปฏิบัติการแทรกข้อมูลหรือลบข้อมูล เพียงแต่ย้ายการชี้ของตัวแปรพอยน์เตอร์เท่านั้น ทำให้สมาชิกอื่นไม่มีผลกระทบ แต่ในกรณีค่าใช้จ่ายแล้วลิงค์ลิสต์จะสูงกว่าที่ต้องใช้พื้นที่เผิ่มมากขึ้นสำหรับส่วนการเชื่อมต่อเพื่อชี้ไปยังโหนดถัดไป และการค้นหาโหนดที่ต้องการใช้เวลามากเนื่องจากเป็นการค้นหาเรียงตามลำดับ (Sequential Search) ได้โหนดเดียวโดยเริ่มต้นที่โหนดแรกเสมอใช้อ้างไปยังโหนดถัดไปในหน่วยความจำ 

  27. การปฏิบัติการพื้นฐานของลิงค์ลิสต์ การปฏิบัติการพื้นฐานของลิงค์ลิสต์    สิ่งสำคัญอย่างหนึ่งในการใช้โครงสร้างข้อมูลลิงค์ลิสต์ คือ ตัวแปรพอยน์เตอร์ (Pointer Variable) ซึ่งเก็บค่าเป็นตำแหน่งแอดเดรสในหน่วยความจำ (Memory Address) ในการปฏิบัติการกับลิ้งค์ลิสต์และให้มีความถูกต้องจะใช้ตัวแปรพอยน์เตอร์ในการจัดการเรื่องต่อไปนี้1.ใช้ทดสอบกับค่า NULL2.ใช้ทดสอบว่ามีค่าเท่ากับตัวแปรพอยน์เตอร์อื่น 3.กำหนดให้มีค่าเป็น NULL4.กำหนดให้ชี้ไปยังโหนด                 ชุดปฏิบัติการของลิ้งค์ลิสต์ที่ทกวานร่วมกับตัวแปรพอยน์เตอร์ มีดังนี้ 1.Node(P)ส่งโหนดที่ถูกชี้ด้วยต้วแปรพอยน์เตอร์ P กลับมาให้2.INFO(P) ส่งค่าในส่วนเก็บข้อมูลของโหนดที่ถูกชี้ด้วยตัวแปรพอยน์เตอร์ P กลับมาให้3.Next(P)ส่งพอยน์เตอร์ในส่วนการเชื่อมต่อขยองโหนดที่ถูกชี้ด้วยตัวแปรพอยน์เตอร์ P กลับมาให้

  28. คณะผู้จัดทำ • 1.นางสาวสุภานี ลอยร่อน เลขที่ 19 ม.6/2 • 2.นางสาวจันทิรา ภูมิลาด เลขที่ 29 ม.6/2

More Related