STL stack ให้การทำงานของโครงสร้างข้อมูลสแต็กใน C ++

โครงสร้างข้อมูลสแต็กดังต่อไปนี้ LIFO (Last In First Out) หลักการ. นั่นคือองค์ประกอบที่เพิ่มล่าสุดจะถูกลบออกก่อน

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

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสแต็ค โปรดไปที่บทช่วยสอนของเราที่ Stack Data Structure.

สร้าง Stack

ในการสร้างสแต็กใน C++ ก่อนอื่นเราต้องรวม stack ไฟล์ส่วนหัว

#include <stack>

เมื่อเรานำเข้าไฟล์นี้แล้ว เราก็สามารถสร้าง stack โดยใช้ไวยากรณ์ต่อไปนี้:

stack<type> st;

ที่นี่, type ระบุชนิดข้อมูล คำสั่งนี้ คำสั่งนี้เราต้องการเก็บไว้ในสแต็ก ตัวอย่างเช่น

// create a stack of integers
 stack<int> integer_stack; 
// create a stack of strings
stack<string> string_stack;

ตัวอย่าง: C++ STL Stack

#include <iostream>

#include <stack>

using namespace std;

int main {
    // create a stack of strings

stack<string> languages;

    
    // add element to the Stack
    languages.push("C++");
    languages.push("Java");
    languages.push("Python");
    
    // print top element
    cout << languages.top;

    return 0;
}

Output

Python

ในตัวอย่างข้างต้น เราได้สร้าง stack ของสตริงชื่อภาษา .

ที่นี่เราใช้ push เพื่อเพิ่มองค์ประกอบลงในสแต็ก เราใช้แล้ว top เพื่อแสดงองค์ประกอบด้านบน

เราจะเรียนรู้เพิ่มเติมเกี่ยวกับ push และ top ในภายหลังในบทช่วยสอน

วิธีการกอง

ใน C ++ stack คลาสจัดเตรียมวิธีการต่าง ๆ เพื่อดำเนินการต่าง ๆ บนสแต็ก

การดำเนินการ คำอธิบาย
push เพิ่มองค์ประกอบลงใน stack
pop ลบองค์ประกอบออกจาก stack
top ส่งคืนองค์ประกอบที่ด้านบนของ stack
size คืนค่าจำนวนองค์ประกอบใน stack
empty ผลตอบแทน true ถ้าสแต็กว่างเปล่า

เพิ่มองค์ประกอบลงในกอง

เราใช้ push เพื่อเพิ่มองค์ประกอบลงในสแต็ก ตัวอย่างเช่น

#include <iostream>

#include <stack>

using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

// ผลักองค์ประกอบเข้าไปใน stack colors.push(“Red”); colors.push(“Orange”);

  
  cout << "Stack: ";

  // print elements of stack
   while(!colors.empty) {
    cout << colors.top << ", ";
    colors.pop;
  }
 
  return 0;
}

Output

Stack: Orange, Red, 

ในตัวอย่างข้างต้น เราได้สร้างสแต็คของสตริงที่เรียกว่าสี แล้วเราก็ใช้ push เพื่อเพิ่มองค์ประกอบลงในสแต็ก

colors.push("Red");
colors.push("Orange");

แทนที่จะพิมพ์เนื้อหาของสแตกโดยตรง เราใช้ while ลูปและวิธีสแต็กต่างๆ

while(!colors.empty) {
  cout << colors.top << ", ";
  colors.pop;
}

ในการพิมพ์องค์ประกอบทั้งหมดของสแต็ก เราพิมพ์มัน top element แล้วก็ pop(ลบ) มันอยู่ในวง กระบวนการนี้ดำเนินต่อไปซ้ำๆ จนกว่าสแต็กจะว่างเปล่า

เราจะเรียนรู้เกี่ยวกับ pop, top และ empty ในส่วนที่จะถึงนี้

โปรดสังเกตว่าเราได้แทรกองค์ประกอบในลำดับนี้: {“Red”, “Orange”}.

แต่เมื่อพิมพ์องค์ประกอบ เราจะได้ {“Orange”, “Red”}.

เนื่องจากสแตกเป็นโครงสร้างข้อมูล LIFO ซึ่งหมายความว่าองค์ประกอบที่ใส่ล่าสุดจะถูกดึงออกมาก่อน

หมายเหตุ: เราไม่สามารถใช้ ranged . ได้ ไม่เหมือนกับเวกเตอร์หรือคอนเทนเนอร์อื่นๆ for วนซ้ำเพื่อวนซ้ำผ่านสแต็ก ทั้งนี้เนื่องจากสแต็ก STL เป็น STL Container Adapter ซึ่งให้การเข้าถึงที่จำกัดเพื่อให้ทำงานเหมือนโครงสร้างข้อมูลสแต็กมาตรฐาน

ลบองค์ประกอบออกจาก Stack

เราสามารถลบองค์ประกอบออกจากสแต็กโดยใช้ pop. ตัวอย่างเช่น

#include <iostream>
#include <stack>
using namespace std;

// function prototype this command this command for display_stack utility
void display_stack(stack<string> st);

int main {

  // create a stack of strings
  stack<string> colors;

  // push elements into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  cout << "Initial Stack: ";
  // print elements of stack
  display_stack(colors);

// ลบ “Blue” ตามที่ถูกแทรกสุดท้าย colors.pop;

  
  cout << "Final Stack: ";

  // print elements of stack
  display_stack(colors);
  
  return 0;
}

// utility function to display stack elements
void display_stack(stack<string> st) {

  while(!st.empty) {
    cout << st.top << ", ";
    st.pop;
  }

  cout << endl;
}

Output

Initial Stack: Blue, Orange, Red, 
Final Stack: Orange, Red,

ในตัวอย่างข้างต้น เราได้ใช้ pop เพื่อลบองค์ประกอบออกจากสแต็ก

เริ่มแรกเนื้อหาของสแต็กคือ {“Blue”, “Orange”, “Red”}.

แล้วเราก็ใช้ pop เพื่อลบองค์ประกอบ

// removes top element
colors.pop 

สิ่งนี้จะลบองค์ประกอบที่ด้านบนของ stack คือองค์ประกอบที่แทรกสุดท้ายซึ่งก็คือ “Blue”.

ดังนั้นสแต็กสุดท้ายจะกลายเป็น {“Orange”, “Red”}.

เข้าถึงองค์ประกอบจาก Stack

เราเข้าถึงองค์ประกอบที่ด้านบนของสแต็กโดยใช้ top. ตัวอย่างเช่น

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

  // push element into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  // get top element

string top = colors.top;

  cout << "Top Element: " << top;
  
  return 0;
}

Output

Top Element: Blue

ในตัวอย่างข้างต้น เราได้สร้างสแต็คของสตริงที่เรียกว่าสี และเพิ่มองค์ประกอบต่อไปนี้: “Red”, “Orange” และ “Blue”.

เราใช้แล้ว top เพื่อเข้าถึงองค์ประกอบด้านบน:

string top = colors.top; 

ที่นี่, “Blue” ถูกใส่ครั้งสุดท้าย ดังนั้นจึงเป็น top element.

รับขนาดของกอง

เราใช้ size เพื่อให้ได้จำนวนองค์ประกอบใน stack. ตัวอย่างเช่น

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of int
  stack<int> prime_nums;

  // push elements into the stack
  prime_nums.push(2);
  prime_nums.push(3);
  prime_nums.push(5);

// รับขนาดของสแต็ก int size = prime_nums.size;

  cout << "Size of the stack: " << size;

  return 0;
}

Output

Size of the stack: 3

ในตัวอย่างข้างต้น เราได้สร้างสแต็คของจำนวนเต็มที่เรียกว่า prime_nums และเพิ่มองค์ประกอบสามตัวเข้าไป

แล้วเราก็ใช้ size เพื่อค้นหาจำนวนองค์ประกอบในสแต็ก:

prime_nums.size;

เนื่องจากเราได้เพิ่มองค์ประกอบ 3 รายการลงในสแต็ก prime_nums.size ผลตอบแทน 3.

ตรวจสอบว่าสแต็คว่างเปล่าหรือไม่

เราใช้ empty เพื่อตรวจสอบว่าสแต็กว่างเปล่าหรือไม่ วิธีนี้จะส่งคืน:

  • 1(true)– หากสแต็กว่างเปล่า
  • 0(false)– ถ้าสแต็คไม่ว่างเปล่า

ตัวอย่างเช่น

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of double
  stack<double> nums;
  
  cout << "Is the stack empty? ";

// ตรวจสอบว่า stack ว่างหรือไม่ if (nums.empty) {

    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }

  cout << "Pushing elements..." << endl;

  // push element into the stack
  nums.push(2.3);
  nums.push(9.7);
 
  cout << "Is the stack empty? ";

// ตรวจสอบว่า stack ว่างหรือไม่ if (nums.empty) {

    cout << "Yes";
  }
  else {
    cout << "No";
  }

  return 0;
}

Output

Is the stack empty? Yes
Pushing elements...
Is the stack empty? No

ในตัวอย่างข้างต้น เราได้ใช้ empty เพื่อตรวจสอบว่า stack มันว่างเปล่า,

if(nums.empty) { // returns false
  cout << "Yes" << end;;
}
else {
  cout << "No" << endl; 
}

ในขั้นต้น สแต็กไม่มีองค์ประกอบในนั้น ดังนั้น nums.empty ผลตอบแทน true.

เราได้เพิ่มองค์ประกอบลงในสแต็กแล้ว

อีกครั้งที่เราใช้ nums.empty เพื่อตรวจสอบว่าสแต็กว่างเปล่าหรือไม่ คราวนี้มันกลับมา false.

ด้านบนเป็นข้อมูลเกี่ยวกับ วิธีใช้ C ++ Stack เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ stacks [Detailed Guide]. มีข้อสงสัย สอบถามได้นะคะ fixsy.org ในความคิดเห็นด้านล่าง ฉันยินดีที่จะช่วยเหลือคุณ