โครงสร้างข้อมูลประเภทหนึ่งที่ใช้กันอย่างแพร่หลายในปัจจุบันในการเขียนโปรแกรมแอปพลิเคชันคือสแต็ก ลักษณะเฉพาะของมันคือหลักการของการจัดระเบียบองค์ประกอบซึ่งการเพิ่มและการลบสามารถทำได้ทีละครั้งและผ่าน "ด้านบน" เท่านั้นนั่นคือตามหลักการ LIFO แต่บางครั้งจำเป็นต้องล้างทั้งกองพร้อมกัน
จำเป็น
- - โปรแกรมแก้ไขข้อความหรือ IDE;
- - นักแปลจากภาษาโปรแกรมที่ใช้
คำแนะนำ
ขั้นตอนที่ 1
ใช้เมธอดบนออบเจ็กต์สแต็กที่ออกแบบมาเพื่อล้างสแต็กโดยเฉพาะ มีอยู่ในคลาสที่เกี่ยวข้องส่วนใหญ่ของไลบรารีและเฟรมเวิร์กต่างๆ ตัวอย่างเช่น คลาส. NET Stack มีเมธอด Clear ตัวอย่างการใช้งานในภาษา C # อาจมีลักษณะดังนี้:
กอง oStack = กองใหม่ (); // สร้างวัตถุสแต็ก
oStack. Push ("000"); // เติม stack
oStack. Push ("111");
oStack. Clear (); // เคลียร์ stack
ขั้นตอนที่ 2
วิธีการเปลี่ยนจำนวนองค์ประกอบของคลาสคอนเทนเนอร์ ซึ่งมักจะสร้างฟังก์ชันการทำงานของคลาสสแต็ก สามารถใช้สำหรับการทำความสะอาด คุณเพียงแค่ต้องลดจำนวนองค์ประกอบปัจจุบันเป็นศูนย์ ตัวอย่างเช่น คลาสเทมเพลต Qt QStack สืบทอดจากคลาสเทมเพลต QVector ซึ่งมีวิธีการปรับขนาด ตัวอย่างการใช้งานอาจเป็นดังนี้:
QStack oStack; // ประกาศของ stack object
สำหรับ (int i = 0; i <10; i ++) oStack.push (i); // เติม stack
oStack.resize (0); // เคลียร์ stack
ขั้นตอนที่ 3
การล้างวัตถุสแต็กสามารถทำได้ผ่านตัวดำเนินการมอบหมาย ซึ่งมักใช้ในคลาสที่เกี่ยวข้อง เมื่อต้องการทำเช่นนี้ ออบเจ็กต์ของสแต็กที่จะล้างต้องถูกกำหนดให้เป็นอ็อบเจ็กต์ชั่วคราวที่สร้างโดยคอนสตรัคเตอร์เริ่มต้น ตัวอย่างเช่น คลาสเทมเพลตสแต็ก C ++ Standard Library ซึ่งเป็นอะแดปเตอร์สำหรับคลาสเทมเพลตคอนเทนเนอร์ ไม่มีเมธอดสำหรับการเปลี่ยนตัวเลขหรือลบองค์ประกอบทั้งหมดโดยพลการ คุณสามารถล้างได้ดังนี้:
std:: stack <int, std:: list> oStack; // ประกาศของ stack object
สำหรับ (int i = 0; i <10; i ++) oStack.push (i); // เติม stack
oStack = มาตรฐาน:: stack
ขั้นตอนที่ 4
ล้างวัตถุสแต็กโดยการเรียกตัวสร้างการคัดลอกโดยใช้ตัวดำเนินการใหม่พร้อมอาร์กิวเมนต์วัตถุที่สร้างโดยตัวสร้างเริ่มต้น:
std:: stack <int, std:: list> oStack; // ประกาศของ stack object
สำหรับ (int i = 0; i <10; i ++) oStack.push (i); // เติม stack
มาตรฐานใหม่:: stack
ขั้นตอนที่ 5
สแต็คสามารถล้างได้โดยการดึงองค์ประกอบทั้งหมดตามลำดับโดยใช้วิธีการที่เหมาะสม:
std:: stack <int, std:: list> oStack; // ประกาศของ stack object
สำหรับ (int i = 0; i <10; i ++) oStack.push (i); // เติม stack
ในขณะที่ (! oStack.empty ()) oStack.pop (); // ล้าง stack
อย่างไรก็ตาม วิธีการนี้มีความซับซ้อนของเวลาที่ขึ้นอยู่กับจำนวนองค์ประกอบในสแต็กเป็นเส้นตรง ดังนั้นการใช้งานจึงไม่สมเหตุสมผล