7/22/2554

สรุปครั้งที่5 โครงสร้างข้อมูลและขั้นตอนวิธี

Linked List (ต่อ)
       กระบวนงาน Delete Node
             หน้าที่    ลบสมาชิกในลิสต์บริเวณตำแหน่งที่ต้องการ
             ข้อมูลนำเข้า  ข้อมูลและตำแหน่ง
             ผลลัพธ์  ลิสต์ที่มีการเปลี่ยนแปลง
       กระบวนงาน Search list
             หน้าที่     ค้นหาข้อมูลในลิสต์ที่ต้องการ
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  ค่าจริงถ้าพบข้อมูล ค่าเท็จถ้าไม่พอข้อมูล
     *ค่าที่ได้ต้องเป็นค่าเดียวเท่านั้น ไม่ถูกก็ผิด
       กระบวนการทำงาน Traverse
             หน้าที่    ท่องไปในลิสต์เพื่อเข้าถึงและประมวลผลข้อมูลนำเข้าลิสต์
             ผลลัพธ์  ขี้นกับการประมวลผล เช่น เปลี่ยนแปลงค่าใน Node,รวมฟิลด์ในลิสต์,คำนวณค่าเฉลี่ยนของฟิลด์ เป็นต้น
       กระบวนการทำงาน Retrieve Node
             หน้าที่     หาตำแหน่งข้อมูลจากลิสต์
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  ตำแหน่งข้อมูลที่อยู่ในลิสต์
       ฟังก์ัชั่น  Empty List
             หน้าที่     ทดสอบว่าลิสต์ว่าง
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  เป็นจริง ถ้าลิสต์ว่าง เป็นเท็จ ถ้าลิสต์ไม่ว่าง
       ฟังก์ัชั่น  Full List
             หน้าที่     ทดสอบว่าลิสต์เต็มหรือไม่
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  เป็นจริง ถ้าหน่วยความจำเต็ม เป็นเท็จ ถ้าสามารถมีโหนดอื่น
       ฟังก์ัชั่น  List Count
             หน้าที่     นับจำนวนข้อมูที่อยู่ในลิสต์
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  จำนวนข้อมูลที่ยู่ในลิสต์
        *ถ้าเป็นใน Array จะหาได้ใน int count อยู่ใน Head structure
       กระบวนงาน Destroy List
             หน้าที่     ทำลายลิสต์
             ข้อมูลนำเข้า  ลิสต์
             ผลลัพธ์  ไม่มีลิสต์
Linked List แบบซับซ้อน
  1. Circular Linked List เป็นลิงค์ลิสต์ที่สมาชิกตัวสุดท้ายมีตัวชี้ (list) ชี้ไปที่สมาชิกตัวแรกของลิงค์ลิสต์ จะมีการทำงานไปในทิศทางเดียวเท่านั้น คือเป็นแบบวงกลม
  2. Double Linked List เป็นลิงค์ลิสต์ที่มีการทำงานแบบ 2 ทิศทาง ส่วนข้อมูลจะมี backward pointer และ forward pointer
_______________________________________________________________________

Stack
          Stack เป็นโครงสร้างข้อมูลที่ข้อมูลแบบลิเนียร์ลิสต์ ที่มีคุณสมบัติที่ว่า การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ปลายข้างเดียวกัน เรียกว่า Top Of Stack ลักษณะที่สำคัญของสแตก คือ ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จาดสแตกเป็นลำดับแรกสุด เรียกคุณสมบัตินี้ว่า LIFO
การดำเนินงานพื้นฐานของสแตก ประกอบไปด้วยกระบวนการ 3 กระบวนการที่สำคัญ คือ
       1.Push คือ การนำข้อมูลใส่ลงไปในสแตก จะต้องทำการตรวจสอบว่าสแตก เต็มหรือไม่ ถ้าไม่เต็มก็สามารถเพิ่มข้อมูลลงไปในสแตกได้ แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ตำแหน่งข้อมูลใหม่ ถ้าสแตกเต็ม ก็จะไม่สามารถเพิ่มข้อมูลเข้าไปในสแตกได้อีก
       2. Pop คือ การนำข้อมูลออกจากส่วนบนสุดของสแตก ถ้าสแตกมีสมาชิกเพียง 1 ตัว แล้วนำสมาชิกออกจากสแตก จะเกิดสภาวะสแตกว่าง คือ ไม่มีสมาชิกอยู่ในอตกเลย แต่ถ้าไม่มีสมาชิกในสแตก แล้วทำการ pop สแตก จำทำให้เกิดความผิดพลาดที่เรียกว่า Stack Underflow
       3. Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำเอาข้อมูลนั้นออกจากสแตก
การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์ จะประกอบไปด้วย 2 ส่วน คือ
       1. Head Node จะประกอบไปด้วย 2 ส่วน คือ Top pointer และ Count
       2. Data Node จะประกอบไปด้วย Data และ Pointer ที่ชี้ไปยังข้อมูลตัวถัดไป
การดำเนินการเกี่ยวกับสแตก 
1. Create Stack (การสร้างสแตก)
2. Push Stack (การเพิ่มข้อมูลลงในสแตก)
3. Pop Stack (การนำข้อมูลออกจากสแตก)
4. Stack Top (การคัดลอกสแตก)
5. Empty Stack (เช็คStackว่าง)
6. Full Stack (เช๊คStackเต็ม)
7. Stack Count (นับจำนวนสมาชิกที่อยู่ใน data node นับแล้วเอามาไว้ที่ Head Nod)
8. Destroy Stack (การทำลายสแตก)

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

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