โครงสร้างข้อมูลแบบกองซ้อนmathcom.uru.ac.th/~beebrain/slide/4122303a/stract1.pdf ·...

Post on 23-May-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

อาจารย์ พิศิษฐ ์นาคใจ มหาวิทยาลัยราชภฏัอุตรดิตถ ์

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

Stack

• สแตกเป็นโครงสร้างข้อมูลแบบลีเนียลิตท์ และมีข้อจ ากัดในการเพิ่มหรอืลดข้อมูล โดยจะท าได้เพียงขอ้มูลที่อยู่ส่วนบนสุดของ Stack เท่านั้น เราเรียกว่า Top of Stack

• ต าแหน่งของท๊อปของสแตกจะอยู่ต าแหน่งบนสุดหรืออยู่ส่วนต้นของ List

การน าข้อมูลเข้าและออก

• การน าข้อมูลเข้าสู่ Stack เราจะเรียกว่า การ Push คือการเพิ่มข้อมูลให้กับ Stack

• ส่วนการน าข้อมูลออก Stack จะเรียกว่า การ Pop ออกจาก Stack การ Pop จะเป็นการน าข้อมูลส่วนบนสุดของ Stack เพียงตัวเดียวเท่านั้นออก จาก Stack

LIFO

• จากลักษณะการเพิ่มข้อมูลของ Stack โดยการน าข้อมูลใหม่วางไว้บนสุด และ หากต้องการลบข้อมูลหรือน าข้อมูลออก จะน าข้อมูลที่อยู่บนสุดออกก่อน ลักษณะนะการน าข้อมูลเข้าและออก เช่นนี้เราเรียกว่า LIFO (Last in First out) หมายถึง เข้าหลังออกก่อน

การใชง้านของสแตก

• เนื่องจาก stack เป็นโครงสร้งแบบเชิงเส้น การใช้งานนั้นเราสามารถสร้างสแตกได้ 2 วิธีคือ การใช้เนื้อที่แบบไดนามิก(Dynamic) ท าได้โดยการใช้ Linked list

การใขเ้นื้อทีแ่บบสเตติก(Static) ท าได้โดยการใช้ Array

การใชเ้น้ือท่ีแบบไดนามิก(Dynamic) ท าไดโ้ดยการใช ้Linked list

• การสร้าง stack โดยการใช้ Linked List เราจะใช้ Single linked list หรือเรียกว่า ลงิค์แสตก สามารถน าข้อมูลเข้าได้ที่ทางต้นของ List และสามารถ น าข้อมูลได ้ออกทางต้นของ List เช่นกัน

• ดังนั้นข้อมูล Top of stack จะอยู่ที่ ต้นของ List เสมอ

การประกาศโครงสร้างในภาษาซ ี

ประกาศโครงสรา้งของ Stack

ประกาศ header ของ Stack

การ POP ออกจาก Stack แบบ Linked list

การลบข้อมูลออกจาก Stack จ าเป็นต้องตรวจสอบว่า List ของ Stack ว่างหรือไม ่หากตรวจสอบแล้ว แน่ใจว่า Stack ไมว่่างจึงท าการ POP ข้อมูลออกจาก Stack

โดยการท างานเหมือนกับการน าข้อมูลออกจาก List ทางด้านหน้า

A 30 77

Z 12 30

W 88 12

E null

66

stack

first_cell

Function POP ในภาษาซ ี

ตรวจสอบว่า STACK ว่างหรือไม่

เมื่อ STACK ไม่ว่าง

ท าการลบข้อมูล ออกจาก STACK

การ Push ข้อมูล ลง Stack แบบ Linked List

การน าข้อมูลลง STACK สามารถท าได้โดยการสร้าง Node ของข้อมูลขึ้นมาจากน้ันน า Node ที่ไดไ้ปแทรกส่วนหน้าของ Stack

ดังนั้น จ าเป็นต้องมี Pointer อีก 1 ตัวเพื่อเข้าถึง Node ใหม่ที่เราสร้างขึน้ จากบทที่แล้วเรื่อง Linked เมื่อเราจะสร้าง Node ใหม่เราจะใช้ช่ือ Pointer ว่า new1 ใน Stack เราก็จะใช้ช่ือเดียวกันเพ่ือจะได้ชินกับการใช้งาน

A null

77

Z 12 30

W 88 12

E null

66

stack

new1

Function Push ในภาษาซ ี

บรรทัดที่ 24 ตรวจสอบว่า Stack ว่างหรือ ไม่ บรรทัดที่ 25-29 ท าการสร้าง node แล้วน า node ที่สร้างลง Stack บรรทัดที่ 30-31 กรณี Stack ว่างให้ แสดงข้อความ Error

การรอ้งขอข้อมูลจาก Stack

การร้องขอข้อมูลจาก Stack เราจะสามารถได้รับข้อมูลได้เพียงส่วนบนของ Stack เท่านั้น หากต้องการข้อมูลในส่วนล่างจ าเป็นต้อง Pop ข้อมูลออกจาก Stack ก่อนถึงจะได้ข้อมูลในส่วนล่าง การร้องขอข้อมูลไมใ่ช่ การ POP แต่เป็นการขอข้อมูลของต าแหน่งส่วนบนเท่านั้น

Function get top of Stack

การใชง้านสแตกด้วยอะเรย ์

การใช้งาน Stack ด้วย อะเรย ์นั้นจะเป็นแบบ Fix ขนาดของ Stack ท าให ้Stack มขีนาดที่จ ากัด และจะใช้ล าดับของอะเรย ์เป็นตัวบอกชั้นของ Stack เช่น Stack[0] หมายถึงต าแหน่งข้อมูลของ Stack ชั้นที่ 0 ซึ่งเป็นต าแหน่งล่างสุดของ Stack และต าแหน่งบนสุดอยู่ที่ Stack[n-1] Top of stack จะมคี่าเปลี่ยนไปตามจ านวนของสมาชิกใน Stack หากค่า Top มีค่าเท่ากับ n-1 หมายถึง Stack เต็ม หาก top มีค่า -1 แสดงว่า Stack ว่าง ไมม่ีสมาชกิอยู่ ดังนั้นเราจะใช้ค่า Top ในการเข้าถึงข้อมูลบนสุดของ Stack เสมอ

โครงสร้างภาษาซ ี

ก าหนดขนาดของ Stack

ก าหนดกลุ่มข้อมูล

Function Push และ POP

Function Get value from stack

บรรทัดที่ 46 ตรวจสอบว่าStack ว่างหรือไม่ หากไม่ว่าง ให้ส่งข้อมูลที่อยู่ส่วนบนสุดของ Stack กลับไป บรรทัดท่ี 48 กรณีที่ตรวจสอบแล้ว Stack ว่าง ค่าที่ส่งกลับเป็น NULL

Quiz

1. จงบอกข้อมูลที่อยู่ใน Stack จากการใช้ค าสั่งต่อไปน้ี push(a), pop(), push(b), push(c), push(e), pop(), push(a), pop(), pop()

2. ลักษณะการท างานของ STACK เป็นแบบ LIFO

3. Stack เป็นโครงสร้างข้อมูลแบบเชิงเส้น

4. Stack สามารถสร้างได้โดยใช้ LinkedList และ Array

5. Stack ที่สร้างจาก LinkedList ไม่สามารถสร้างแบบ Fix size ของstack ได ้

top related