The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

โครงสร้างข้อมูลแบบสแตก08

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by 08 Miss.Sutawee Pipatpan_IT, 2023-02-01 20:47:50

โครงสร้างข้อมูลแบบสแตก08

โครงสร้างข้อมูลแบบสแตก08

โครงสร้า ร้ งข้อ ข้ มูลและอัลกอริทึริ ทึ ม 30901-2001 จัดจัทำ โดย โครงสร้างข้อมูลแบบสแตก วิทยาลัยพณิชยการอิินทราชัย ปวส.2 แผนกเทศโนโลยีสารสนเทศ เลขที่ 8 นางสาวสุธาวี พิพัฒพันธุ์


2 หนังสือเรื่อรื่ง " โครงสร้าร้งข้อมูลแบบสแตก " ฉบับนี้ เป็นส่วนหนึ่งของวิชาโครงสร้าร้งข้อมูลและ อัลกอริทึริ ทึม รหัสวิชา 30901-2001 ชั้นชั้ปวส.2 มีจุด ประสงค์เพื่อศึกษาความรู้เรู้กี่ยวกับ โครงสร้าร้งข้อมูล แบบสแตก (Stack Structure) ซึ่งหนังสือเล่มนี้มี เนื้อหาเกี่ยวกับ โครงสร้าร้งข้อมูลแบบสแตกลักษณะ สำ คัญของโครงสร้าร้งข้อมูลแบบสแตก การสร้าร้งส แตก การนำ ข้อมูลเข้าสู่สแตก การแปลงนิพจน์ Infix เป็น Postfix และ การดำ เนินการกับสแตก การจัดทำ หนังสือฉบับนี้สำ เร็จร็ตามวัตถุประสงค์ ไปด้วยดี ข้าพเจ้าขอขอบพระคุณคุณครู ที่ท่านได้ให้ คำ แนะนำ การทำ หนังสือจนทำ ให้หนังสือฉบับนี้ สมบูรณ์ การเรียรีบเรียรีงเนื้อหาได้สำ เร็จร็ลุล่วงไปด้วย ดี ข้าพเจ้าหวังเป็นอย่างยิ่งว่าเนื้อหาในหนังสือฉบับ นี้ได้เรียรีบเรียรีงมาเป็นประโยชน์ต่อผู้ที่สนใจอย่างดี หากมีสิ่งใดในหนังสือฉบับนี้จะต้องปรับรั ปรุงข้าพเจ้า ขอน้อมรับรั ในข้อชี้แนะและจะนำ ไปแก้ไขให้ถูกต้อง สมบูรณ์ต่อไป Stack Structure โครงสร้างข้อมูลแบบสแตก " คำ นำ PREFACE


คำ นำ 2 3 4 สารบัญบั สารบัญบั 3 สารบัญ CONTENTS 5 PREFACE CONTENTS CONTENTS โครงสร้าร้งข้อข้มูลแบบสแตก DATA STRUCTURE ลักษณะสำ คัญของ โครงสร้าร้งข้อข้มูลแบบสแตก 6 7 8 การสร้าร้งสแตก การดำ เนินนิการกับสแตก 9 IMPORTANT CHARACTERISTICS STACK CREATION STACK OPERATIONS การแปลงนิพนิจน์ INFIX เป็นป็ POSTFIX EXPRESSION CONVERSION


4 สารบัญ CONTENTS ตัวอย่าย่ง การหาค่าผลลัพธ์จธ์ากนิพนิจน์ 10 11 12 การนำ ข้อข้มูลเข้าข้สู่สสู่ แตก ลำ ดับดัขั้นขั้ตอน การนำ ข้อข้มูลเข้าข้สู่สสู่ แตก 13 EXAMPLE DATA NAVIGATION IMPORT DATA การนำ ข้อข้มูลออกจากสแตก REMOVE DATA การดำ เนินนิการกับสแตก 14 15 16 ฟังฟัก์ชั่นชั่การนำ ข้อข้มูล ออกจากสแตก (POP) ส่วส่นประกอบของสแตก 17 STACK OPERATIONS FUNCTION COMPONENT แบบทดสอบ PRACTICE


5 โครงสร้าร้งข้อข้มูลแบบสแตก (Stack Structure) เป็นโครงสร้าร้งข้อข้มูลประเภท เชิงชิเส้นส้ที่มี การจัดจัเก็บข้อข้มูลแบบเรียรีง ลำ ดับดัต่อเนื่อนื่งกัน ในนำ ข้อข้มูลเข้าข้สู่สสู่ แตก หรือรืนำ ข้อข้มูลออกจากสแตกสามารถทำ ได้ เพียพีงทางเดียดีวเท่านั้นนั้คือที่ส่วส่นปลายส แตกหรือรืส่วส่นบนสุดสุของสแตก (Top of the Stack) ที่เรียรีกว่าว่ Top ตัวอย่าย่งเช่นช่นำ ข้อข้มูลเข้าข้สู่สสู่ แตกตาม ลำ ดับดัดังดันี้คื นี้ คือ A, B, C และ D เมื่อมื่มี การนำ ข้อข้มูลออกจากสแตก จะเรียรีงลำ ดับดั ดังดันี้คื นี้ คือ D, C, B และ A จะเห็นห็ ได้ว่ด้าว่ข้อข้มูล ที่ออกมาเป็น ข้อข้มูลย้อย้นกลับจากตอนนำ เข้าข้จากลักษณะการทำ งานของสแตกดังดั กล่าว ทำ ให้โห้ครงสร้าร้งข้อข้มูล แบบสแตกถูกถูเรียรีกว่าว่เป็นโครงสร้าร้งข้อข้มูลแบบ เข้าข้ทีหลังออกก่อน หรือรื Last In, First Out (LIFO) หมายถึง สมาชิกชิที่เข้าข้ไปในสแตกหลังสุดสุจะถูกถูนำ ออกจากสแตกก่อน สมาชิกชิตัวอื่น ดังดัรูปรูแสดงการนำ ข้อข้มูล A, B, C และ D เข้าข้สู่สสู่ แตกตามลำ ดับดั โครงสร้างข้อมูล แบบสแตก DATA STRUCTURE


2 1 3 4 โครงสร้าร้งข้อข้มูล เป็นป็แบบเชิงชิเส้นส้ เป็นป็ โครงสร้าร้ง ที่ไม่ตม่ายตัว สามารถนำ ข้อข้มูลเข้าข้สู่ สแตกและนำ ข้อข้มูลออก จากสแตกสลับกันได การนำ ข้อข้มูลเข้าข้และ การนำ ข้อข้มูลออกจะ กระทำ ตามลำ ดับ การนำ ข้อข้มูลเข้าข้และ การนำ ข้อข้มูลออก คือ มีลัมี ลักษณะการจัดจัเก็บข้อข้มูลแบบ เรียรีงลำ ดับต่อเนื่องกันไป สามารถเปลี่ยนจำ นวนสมาชิกชิ ใน โครงสร้าร้งได้ในขณะที่ทำ งานอยู่ แต่ถ้าใช้โช้ครงสร้าร้งข้อข้มูลแบบอาร์ เรย์ใย์นการสร้าร้งสแตก จะต้องทำ การจองพื้นพื้ที่ใน หน่วยความจำ ให้ เหมาะสม เพียพีงพอกับจำ นวนข้อข้ มูล เนื่องจากโครงสร้าร้งข้อข้มูลแบบ อาร์เร์รย์ไย์ม่ สามารถเปลี่ยน แปลง จำ นวนสมาชิกชิ ได้ในขณะทำ งาน โดยไม่จำม่จำเป็นต้องนำ เข้าข้อย่าย่ง เดียวหรือรืนำ ข้อข้มูลออกทั้งทั้หมด พร้อร้มกัน อย่าย่งไรก็ตามในการนำ ข้อข้มูลเข้าข้หรือรืการนำ ข้อข้มูลออก อาจเกิดความผิดผิพลาดขึ้นขึ้ ได้ นั่นนั่ คือ ในกรณีที่สแตกเต็มแล้วสั่งสั่ให้ นำ ข้อข้มูลเข้าข้สู่สสู่ แตกอีก ก็จะเกิด ความผิดผิพลาดที่เรียรีกว่าว่ Stack Overflow 6 ลักษณะสำ คัญของ โครงสร้างข้อมูลแบบสแตก IMPORTANT CHARACTERISTICS


7 จากตัวอย่าย่ง เป็นป็การประกาศตัวแปรอาร์เร์รย์ชื่ย์ชื่อชื่ Stack ใช้แช้ทนสแตก สามารถเก็บ ข้อข้มูลได้ 5 ตัว และประกาศ ตัวแปร Top เป็นป็ชนิดนิตัวเลขจำ นวนเต็มเพื่อพื่เก็บเลขดัชดันีในีช้ชี้ช้ตำชี้ ตำแหน่งน่ข้อข้มูลที่อยู่บยู่นสุดสุในสแตก และกำ หนดให้เห้ก็บค่า เริ่มริ่ต้นคือ -1 เพราะยังยัไม่มีม่ข้มีอข้มูลใดๆ ในสแตก (ที่ไม่กำม่ กำหนดให้ค่ห้ ค่าเริ่มริ่ต้นของ Top = 0 เนื่อนื่งจากภาษาซีกำซี กำหนดลำ ดับดั เลขดัชดันีเนีริ่มริ่ต้นที่ 0 นั่นนั่หมายความว่าว่ข้อข้มูลแรกของอาร์เร์รย์จย์ะถูกถูจัดจัเก็บในตำ แหน่งน่ 0 นั่นนั่เอง การสร้างสแตก STACK CREATION การสร้าร้งสแตกเป็นป็การจองพื้นพื้ที่ในหน่วน่ย ความจำ ให้กัห้ กับสแตกเพื่อพื่จัดจัเก็บข้อข้มูล การ สร้าร้งสแตกสามารถทำ ได้โด้ดยใช้โช้ครงสร้าร้ง ข้อข้มูลแบบอาร์เร์รย์หย์รือรืโครงสร้าร้งข้อข้มูลแบบ ลิงค์ลิสต์ ก็ได้ เมื่อมื่สร้าร้งสแตกเสร็จร็แล้ว สแตกที่ถูกถูสร้าร้งขึ้นขึ้มาใหม่จม่ะเป็นป็สแตกว่าว่ง ยังยัไม่มีม่ข้มีอข้มูลใดๆ แต่พร้อร้มที่จะดำ เนินนิการใน การรับรัข้อข้มูล การสร้าร้งสแตกด้วด้ยโครงสร้าร้งข้อข้มูลแบบ อาร์เร์รย์ การจัดจัสรรพื้นพื้ที่หน่วน่ยความจำ จะ เป็นป็แบบสถิตย์(ย์Static) กล่าวคือ จัดจัสรร พื้นพื้ที่แบบคงที่ตายตัวไม่สม่ามารเปลี่ยนแปลง ได้ ดังดันั้นนั้จึงจึต้อง ทำ การกำ หนดขนาดของ สแตกไว้ล่ว้ ล่วงหน้าน้ว่าว่จะมีขมีนาดเท่าใด โดยจะ ต้องกำ หนดให้เห้พียพีงพอกับ จำ นวนข้อข้มูล และข้อข้มูลที่จัดจัเก็บในสแตกจะเป็นป็ชนิดนิ ใด ก็ได้ แต่ต้องเป็นป็ชนิดนิเดียดีวกันทั้งทั้หมด การสร้าร้งสแตกด้วด้ยโครงสร้าร้งข้อข้มูลแบบลิงค์ลิสต์ เป็นป็การจัดจัสรรพื้นพื้ที่หน่วน่ยความจำ แบบไดนามิกมิ (Dynamic) กล่าวคือ เป็นป็แบบยืดยืหยุ่นยุ่จึงจึไม่จำม่จำเป็นป็ต้องกำ หนดขนาดพื้นพื้ที่ของ สแตก ไว้ล่ว้ ล่วงหน้าน้เนื่อนื่งจากหน่วน่ยความจำ จะถูกถู จัดจัสรรเมื่อมื่มีกมีารใช้งช้านจริงริเท่านั้นนั้จึงจึทำ ให้สห้แตกที่สร้าร้ง ด้วด้ยลิงค์ลิสต์ไม่มีม่วัมีนวัเต็ม ตราบที่ยังยัมีพื้มีพื้นพื้ที่เพียพีงพอต่อการ จัดจัสรรได้อด้ย


8 การดำ เนินนิการกับสแตกมีอมียู่ 2 ลักษณะหลักๆ คือ 1. การนำ ข้อข้มูลเข้าข้สู่สสู่ แตก 2. การนำ ข้อข้มูลออกจากสแตก โดยการดำ เนินนิการกับสแตกทั้งทั้สองลักษณะจะกระทำ ที่ ส่วส่นปลายหรือรืส่วส่นบนสุดสุของส แตกเพียพีงจุดเดียดีว เท่านั้นนั้ดังดันั้นนั้จึงจึต้องมีกมีารกำ หนดตัวชี้ตำชี้ ตำแหน่งน่บนสุดสุ ของสแตก ซึ่งซึ่ก็คือ Top หรือรื Stack Pointer (SP) เพื่อพื่ ให้ชี้ห้ ไชี้ปยังยัข้อข้มูลที่อยู่บยู่นสุดสุของสแตก ดังดัรูปรู จากรูปรูเมื่อมื่มีกมีารนำ ข้อข้มูลใหม่เม่ข้าข้สู่สสู่ แตก Top จะ เลื่อนขึ้นขึ้มาชี้ที่ชี้ ที่ข้อข้มูลใหม่ซึ่ม่ ซึ่งซึ่อยู่ บนสุดสุของสแตก แต่ เมื่อมื่มีกมีารนำ ข้อข้มูลออกจากสแตกเพื่อพื่ ไปใช้งช้าน ข้อข้มูลที่ จะถูกถูนำ ออกก็คือข้อข้มูล ที่Top ชี้อชี้ยู่ เมื่อมื่นำ ข้อข้มูลออก จากสแตกไปแล้ว Top จะเลื่อนลงมาชี้ข้ชี้อข้มูลตัวถัดลง มา ดังดัรูปรู การดำ เนินการกับสแตก STACK OPERATIONS


9 การแปลงนิพนิจน์ Infix เป็น Postfix มักมัถูกถูนำ มาเป็นตัวอย่าย่งเมื่อมื่ศึกษาเรื่อรื่งโครงสร้าร้ง ข้อข้มูลแบบส แตก เนื่อนื่งจากจะเห็นห็กระบวนการทำ งานที่ใช้กช้ลไกสแตกเป็นตัวช่วช่ยได้ชัด้ดชัเจนที่สุดสุซึ่งซึ่การแปลงนิพนิจน์ Infix ให้เห้ป็นนิพนิจน์ Postfix ถือว่าว่เป็นกระบวนการที่สำ คัญสำ หรับรัการดำ เนินนิการ ด้าด้นการคำ นวณในระบบ คอมพิวพิเตอร์ เนื่อนื่งจากตัวแปลภาษาหรือรืคอมไพเลอร์ (Compiler) ไม่ สามารถสร้าร้งรหัสหัหรือรืชุดคำ สั่งสั่ จากนิพนิจน์คน์ณิตณิศาสตร์ที่ร์ ที่ เราป้อป้นเข้าข้ไปในรูปรูแบบนิพนิจน์ Infix ได้ จะต้องทำ การแปลงเป็นนิพนิจน์ Postfix เสียสีก่อนแล้วค่อยแปลเป็นชุดคำ สั่งสั่ของเครื่อรื่งอีกทีหนึ่งนึ่ นิพนิจน์ที่น์ ที่ เราเขียขีนในรูปรูแบบปกติ เช่นช่ A+B เรียรีกว่าว่นิพนิจน์ Infix เนื่อนื่งจากตัวดำ เนินนิการ (Operator) คือเครื่อรื่งหมาย +, -, *, /, ** (ใช้ ** แทน ยกกำ ลัง) จะอยู่รยู่ะหว่าว่งตัวถูกถูดำ เนินนิการ (Operand) ส่วส่น นิพนิจน์Pน์ ostfix นั้นนั้ตัวดำ เนินนิการจะอยู่หยู่ลังตัวถูกถูดำ เนินนิการ เช่นช่ AB+ โดยที่ตัวถูกถูดำ เนินนิการอาจเป็นได้ ทั้งทั้ตัวแปรและค่าคงที่ใดๆ ก่อนที่จะศึกษากระบวนการแปลง Infix เป็น Postfix ขอให้ทำห้ ทำความเข้าข้ใจเกี่ยว กับการ หาผลลัพธ์ขธ์องนิพนิจน์ทน์างคณิตณิศาสตร์เร์สียสีก่อน การแปลงนิพจน์ Infix เป็น Postfix EXPRESSION CONVERSION


10 ตัวอย่าง การหาค่าผลลัพธ์จากนิพจน์ Postfix EXAMPLE ตัวอย่าย่งที่ จงหาค่าผลลัพธ์จธ์ากนิพจน์ A+B*C**2 เมื่อมื่กำ หนดให้ A = 7, B = 3, C = 5 ห้ วิธีวิทำธี ทำ ทำ การแปลงเป็นนิพจน์ Postfix จะได้ ABC2***+ เมื่อมื่แทนค่าในนิพจน์ Postfix จะได้ 7, 3, 5, 2, **, *, + ตัวอย่าย่ง จงหาค่าผลลัพธ์จธ์ากนิพจน์ Postfix ต่อไปนี้ ABC*D/+E กำ หนดให้ A = 15, B = 10, ห้ C = 3, D = 5, E = 8 เมื่อมื่แทนค่าในนิพจน์ Postfix จะได้ 15, 10, 3, *, 5, /, +, 8, - (ใช้ , ช้คั่นคั่เพื่อพื่ ให้ดูห้ ไดูด้ง่ายเท่านั้นนั้ ) การหาค่าผลลัพธ์จธ์ากนิพจน์ Postfix จะพิจพิารณาทีละตัวจากซ้าซ้ยไปขวา ดังนี้


11 การนำ ข้อข้มูลเข้าข้สู่สสู่ แตก จะเรียรีกว่าว่การ Push เป็นการเพิ่มพิ่ข้อข้มูลเข้าข้ไปไว้ใว้นสแตก โดย ข้อข้มูลที่เพิ่มพิ่เข้าข้ไปใหม่จม่ะ อยู่ใยู่นตำ แหน่งบนสุดสุของสแตกและ Top จะชี้ที่ ชี้ ที่ ข้อข้มูลใหม่นี้ม่ นี้ อย่าย่งไรก็ตาม ในการสั่งสั่ให้นำห้ นำข้อข้มูลเข้าข้สู่สสู่ แตกต้อง มั่นมั่ ใจว่าว่สแตกยังยัมีที่มี ที่ ว่าว่งอยู่ เพราะถ้าหากให้ทำห้ ทำการ Push ในขณะที่สแตกเต็มจะเกิดความผิดผิพลาดที่เรียรีกว่าว่ Stack Overflow ลำ ดับขั้นขั้ตอนการนำ ข้อข้มูลเข้าข้สู่สสู่ แตกสามารถแสดงได้ดังรูป การนำ ข้อมูลเข้าสู่สแตก DATA NAVIGATION จากรูปที่ (ก) ก่อนการ Push สแตกมีข้มีอข้มูลอยู่แยู่ล้ว 2 ค่า คือ 6 และ 8 และ Top ชี้ ข้อข้มูลที่อยู่บยู่นสุดสุของสแตก นั่นนั่ก็คือค่า 8 เมื่อมื่ต้องการเพิ่มพิ่ข้อข้มูลใหม่เม่ข้าข้ไปในสแตก จะต้องทำ การ เลื่อน Top ให้ชี้ห้ตำ ชี้ ตำแหน่งถัดขึ้นขึ้ ไปก่อนดัง รูป (ข) จากนั้นนั้จึงจึทำ การ Push ค่า 4 เข้าข้ไปในสแตก ใน ตำ แหน่งที่ Top ชี้อ ชี้ ยู่ดัยู่ ดังรูป (ค) หลังการ Push จะได้ ผลลัพธ์ดัธ์ ดังรูป (ง) ลำ ดับขั้นขั้ตอนการนำ ข้อข้มูลเข้าข้สู่สสู่ แตกแสดงได้ดังอัลกอริทึริ ทึมท


2 1 3 ตรวจสอบ ว่าว่สแตกเต็มหรือรื ไม่ เพิ่มพิ่ค่า นำ ข้อข้มูลเข้าข้ โดยการเปรียรีบเทียบค่า Top กับ ตำ แหน่งสูงสูสุดสุในอาร์เร์รย์ เพิ่มพิ่ค่า Top อีก 1 เพื่อพื่เลื่อน Top ไปตำ แหน่งถัดไป นำ ข้อข้มูลใส่ข้ส่าข้ไปในสแตก ใน ตำ แหน่ง Top 12 ลำ ดับขั้นตอน การนำ ข้อมูลเข้าสู่สแตก IMPORT DATA


13 จากรูปรูที (ก) ก่อนทำ การ Pop สแตกมีข้มีอข้มูลอยู่ 3 ค่า คือ 6, 8 และ 4 และ Top ชี้ ข้อข้มูลที่อยู่บยู่นสุดสุของสแตก นั่นนั่ก็คือค่า 4 เมื่อมื่ต้องการนำ ข้อข้มูลออกจากสแตกเพื่อพื่มา ใช้งช้าน จะนำ ข้อข้มูลในตำ แหน่งน่ที่ Top ชี้อชี้ยู่อยู่อกก่อนดังดัรูปรู (ข) จากนั้นนั้จะทำ การเลื่อน Top ลงมาชี้ข้ชี้อข้มูลตัวถัดลง มา จะได้ผด้ลลัพธ์ดัธ์งดัรูปรู (ค) ลำ ดับดัขั้นขั้ตอนการนำ ข้อข้มูลออกจาก สแตกแสดงได้ดัด้งดัอัลกอริทึริ ทึมที่ การนำ ข้อมูลออกจากสแตก REMOVE DATA การนำ ข้อข้มูลออกจากสแตก จะเรียรีกว่าว่การ Pop เป็นป็การนำ ข้อข้มูลที่อยู่บยู่นสุดสุในสแตก ออกมา โดยข้อข้มูลที่ ถูกถูนำ ออกก็คือข้อข้มูลที่ Top ชี้อชี้ยู่ หลังจากนำ ข้อข้มูลออก จากสแตกไปแล้ว Top จะเลื่อนลงมาชี้ข้ชี้อข้มูลตัวถัดลงมา ซึ่งซึ่ถือว่าว่เป็นป็ข้อข้มูลบนสุดสุของสแตกในขณะนี้อนี้ย่าย่งไรก็ตาม ในการ นำ ข้อข้มูลออกจากสแตกต้องมั่นมั่ ใจว่าว่ยังยัมีข้มีอข้มูลอยู่ ในสแตกไม่ใม่ช่สช่แตกว่าว่ง เพราะถ้าหากทำ การ Pop ในขณะที่ สแตกว่าว่งจะเกิดความผิดผิพลาดที่เรียรีกว่าว่ Stack Underflow ลำ ดับดัขั้นขั้ตอนการนำ ข้อข้มูล ออกจากสแตก แสดงได้ดัด้งดัรูปรู


14 1. ตรวจสอบว่าว่สแตกว่าว่งหรือรืไม่ โดยการเปรียรีบเทียบค่า Top กับ -1 1.1 ถ้า Top เท่ากับ -1 แสดงว่าว่สแตกว่าว่งให้แห้จ้งจ้ ให้ทห้ราบว่าว่ “สแตกว่าว่ง” แล้วเลิกการ ทำ งาน 1.2 ถ้า Top ไม่เม่ท่ากับ -1 แสดงว่าว่สแตกยังยัมีข้มีอข้มูลอยู่ ให้ทำห้ ทำข้อข้ 2 และข้อข้ 3 2. นำ ข้อข้มูลในตำ แหน่งน่ Top ออกจากสแตกไปไว้ใว้นตัวแปร 3. ลดค่าของ Top ลง 1 เพื่อพื่เลื่อน Top ลงมา การดำ เนินการกับสแตก STACK OPERATIONS


15 โปรแกรมที่ ฟังฟัก์ชั่นชั่ Pop เป็นฟังฟัก์ชั่นชั่ ให้นำห้นำข้อข้มูลจากสแตกที่ชื่อชื่ Stack มาใส่ไส่ว้ใว้น ตัวแปร x โดย การนำ ข้อข้มูลออกจากสแตกนั้นนั้ก็เพียพีงทำ การคืนค่าข้อข้มูลที่ตัวแปร Top ชี้อ ชี้ ยู่กยู่ลับไปยังยัจุดที่เรียรีกใช้ การ ทำ งานของฟังฟัก์ชั่นชั่ Pop จะเริ่มริ่ด้วด้ยการทดสอบเงื่อนไข ถ้า Top มากกว่าว่ -1 เป็น จริงริแสดงว่าว่สแตกยังยั มีข้มีอข้มูลอยู่ ให้ดำห้ดำเนินนิการดังดันี้คื นี้ คือ ให้นำห้นำค่าในตำ แหน่งน่ที่ Top ชี้อ ชี้ ยู่อยู่อกจาก สแตกไปใส่ไส่ว้ใว้นตัวแปร x (x = Stack[Top];) และลดค่า Top ลง 1 (Top--;) จากนั้นนั้คืนค่า x กลับไป ยังยัจุดที่เรียรีก (return x) แต่ถ้า Top ไม่มม่ากกว่าว่ -1 (นั่นนั่คือ Top เท่ากับ -1) จะลงมาทำ ที่ return - 1 คือจะทำ การคืนค่า -1 กลับมา เพื่อพื่ แสดงว่าว่สแตกว่าว่งนั่นนั่เอง เพื่อพื่ ให้เห้กิดความเข้าข้ใจลักษณะการทำ งานของโครงสร้าร้งข้อข้มูลแบบสแตกยิ่งยิ่ขึ้นขึ้ ให้ พิจพิารณาโปรแกรม ที่ ตัวอย่าย่งโปรแกรมภาษาซีใซีนการดำ เนินนิการกับสแตก ฟังก์ชั่นการนำ ข้อมูล ออกจากสแตก (Pop) FUNCTION


16 ส่วนประกอบของสแตก COMPONENT การนำ สแตกไปใช้งช้านนั้นนั้ ไม่ว่ม่าว่จะเป็นโครงสร้าร้งสแตกแบบแถวลำ ดับ(array)หรือรืแบบลิงค์ลิสต์ (link list) เราจะมีตัมี ตัวแปรตัวหนึ่งที่ใช้เช้ป็นตัวชี้ส ชี้ แตก(stack pointer ) เพื่อพื่เป็นตัวชี้ข้ ชี้ อข้มูลที่อยู่บยู่น สุดสุของสแตก ซึ่งซึ่จะทำ ให้สห้ามารถจัดจัการข้อข้มูล ที่จะเก็บในสแตกได้ง่าย ดังนั้นนั้ โครงสร้าร้งข้อข้มูลแบบส แตกจะแบ่งบ่ออกเป็น 2 ส่วส่นที่สำ คัญ คือ 1. ตัวชี้ส ชี้ แตก ( Stack Pointer ) ซึ่งซึ่ มีหมีน้าที่ชี้ไชี้ปยังยัข้อข้มูลที่อยู่บยู่นสุดสุของ สแตก ( Top stack ) 2. สมาชิกชิของสแตก ( Stack Element ) เป็นข้อข้มูลที่จะเก็บลงไปใน สแตก ซึ่งซึ่จะต้องเป็นข้อข้มูลชนิด เดียวกัน เช่นช่ข้อข้มูลชนิดจำ นวนเต็ม เป็นต้น นอกจากนี้ยังยัต้องมีตัมี ตัวกำ หนดค่าสูงสูสุดสุของสแตก ( Max Stack ) ซึ่งซึ่จะเป็นตัวบอกว่าว่สแตกนี้ สามารถเก็บ จำ นวนข้อข้มูลได้มากที่สุดสุเท่าไร เปรียรีบเทียบส่วส่นประกอบของสแตกได้กับการให้ สแตก เป็นกระป๋องเก็บลูกลูเทนนิส ส่วส่น Stack Elements หรือรืสมาชิกชิของสแตก คือ ลูกลูเทนนิส ส่วส่นตัวชี้ส ชี้ แตกเป็นตัวบอกว่าว่ขณะนี้มีลูมีกลูเทนนิสอยู่ใยู่นกระป๋องกี่ลูกลูส่วส่น Max Stack เป็นตัวบอกว่าว่กระป๋องนี้ เก็บลูกลูเทนนิสได้มากที่สุดสุเท่าไร


17 แบบฝึกหัดหรือทำ แบบทดสอบ PRACTICE สแกนน QR Code ทำ แบบทดสอบ


Click to View FlipBook Version