如何使用C++ STL中的list实现堆栈
在本文中,我们将讨论如何使用C++ STL中的list实现堆栈。
堆栈是一种线性数据结构,遵循LIFO(Last In First Out)或FILO(First In Last Out)原则。 它主要支持4种主要操作:
1. Push:将一个元素压入堆栈。
2. Pop:根据LIFO顺序移除元素。
3. Top:返回堆栈顶部的元素。
4. Empty:返回堆栈是否为空。
以下是上述方法的实现:
// C++ implementation of stack
// using list STL
#include <bits/stdc++.h>
using namespace std;
template <typename T>
// templating it so that any data type can be used
class Stack {
public:
list<T> l;
int cs = 0;
// current size of the stack
// pushing an element into the stack
void push(T d)
{
cs++;
// increasing the current size of the stack
l.push_front(d);
}
// popping an element from the stack
void pop()
{
if (cs <= 0) {
// cannot pop us stack does not contain an
// elements
cout << "Stack empty" << endl;
}
else {
// decreasing the current size of the stack
cs--;
l.pop_front();
}
}
// if current size is 0 then stack is empty
bool empty() { return cs == 0; }
// getting the element present at the top of the stack
T top() { return l.front(); }
int size()
{
// getting the size of the stack
return cs;
}
// printing the elements of the stack
void print()
{
for (auto x: l) {
cout << x << endl;
}
}
};
int main()
{
Stack<int> s;
s.push(10); // pushing into the stack
s.push(20);
s.push(30);
s.push(40);
cout << "Current size of the stack is " << s.size()
<< endl;
cout << "The top element of the stack is " << s.top()
<< endl;
s.pop(); // popping from the stack
cout << "The top element after 1 pop operation is "
<< s.top()
<< endl; // printing the top of the stack
s.pop(); // popping
cout << "The top element after 2 pop operations is "
<< s.top() << endl;
cout << "Size of the stack after 2 pop operations is "
<< s.size() << endl;
return 0;
}
C++
输出
Current size of the stack is 4
The top element of the stack is 40
The top element after 1 pop operation is 30
The top element after 2 pop operations is 20
Size of the stack after 2 pop operations is 2
C++
时间复杂度: 对于堆栈中的push和pop操作均为O(1)。
辅助空间: O(N)