📅  最后修改于: 2023-12-03 15:33:47.721000             🧑  作者: Mango
LinkedStack是一种常用的栈数据结构的实现方式,它采用链表来存储数据。由于LinkedStack是动态分配内存的数据结构,因此可以在需要的时候按需分配内存。
下面是一份C++中使用模板类和指针来实现LinkedStack的代码片段:
template <typename T>
struct Node {
T data;
Node* next;
};
template <typename T>
class LinkedStackCPP {
public:
LinkedStackCPP() {
top = nullptr;
}
~LinkedStackCPP() {
while (!isEmpty()) {
pop();
}
top = nullptr;
}
bool isEmpty() {
return (nullptr == top);
}
void push(T data) {
Node<T>* node = new Node<T>();
node->data = data;
node->next = top;
top = node;
}
void pop() {
if (!isEmpty()) {
Node<T>* node = top;
top = top->next;
delete node;
}
}
T peek() {
if (!isEmpty()) {
return top->data;
}
return T();
}
void print() {
std::cout << "LinkedStackCPP: ";
if (isEmpty()) {
std::cout << "Empty" << std::endl;
return;
}
Node<T>* node = top;
while (node != nullptr) {
std::cout << node->data << " ";
node = node->next;
}
std::cout << std::endl;
}
private:
Node<T>* top;
};
在代码中,我们首先定义了一个节点(Node)结构体,其包含数据和指向下一个节点的指针。然后,我们定义了一个LinkedStackCPP类,其中包含了常用的栈操作函数。
其中,push()函数用于将一个元素入栈,pop()函数用于将栈顶元素出栈,而peek()函数则返回栈顶元素的值,但是并不弹出。isEmpty()函数用于判断栈是否为空,print()函数则可以打印栈中的所有元素。
下面是一个使用LinkedStackCPP类的例子:
LinkedStackCPP<int> stack;
// push elements to stack
stack.push(1);
stack.push(2);
stack.push(3);
// print stack
stack.print(); // LinkedStackCPP: 3 2 1
// pop element from stack
stack.pop();
// print stack
stack.print(); // LinkedStackCPP: 2 1
// get top element in stack
int top = stack.peek();
std::cout << "Top element: " << top << std::endl; // Top element: 2
运行上面的代码,输出如下:
LinkedStackCPP: 3 2 1
LinkedStackCPP: 2 1
Top element: 2
LinkedStack是一种常用的栈数据结构,使用链表来存储元素。在C++中,我们可以通过模板类和指针来实现LinkedStackCPP,实现操作包括入栈(push)、出栈(pop)、判断栈是否为空(isEmpty)、查看栈顶元素(peek)以及打印栈中的所有元素(print)。通过LinkedStackCPP,我们可以方便地实现各种栈相关的操作。