数据结构与算法之数据结构 栈工业级实现 STL stack / 封装实现

数据结构与算法阿木 发布于 8 天前 1 次阅读


摘要:

栈是一种常见的数据结构,它遵循后进先出(LIFO)的原则。在计算机科学和软件工程中,栈被广泛应用于各种场景,如函数调用栈、表达式求值、递归算法等。本文将探讨栈的数据结构,分析其基本操作,并介绍两种工业级实现:STL stack和封装实现。

一、栈的基本概念与操作

1. 栈的定义

栈是一种线性数据结构,它允许在一端进行插入和删除操作。栈的元素按照后进先出的原则排列。

2. 栈的基本操作

(1)push:在栈顶插入一个元素。

(2)pop:从栈顶删除一个元素。

(3)peek:查看栈顶元素,但不删除。

(4)isEmpty:判断栈是否为空。

(5)size:获取栈中元素的数量。

二、STL stack实现

1. STL stack简介

STL(Standard Template Library)是C++标准库的一部分,提供了丰富的数据结构和算法。其中,stack是STL中的一种栈实现。

2. STL stack使用示例

cpp

include <stack>


include <iostream>

int main() {


std::stack<int> stack;

// 向栈中插入元素


stack.push(1);


stack.push(2);


stack.push(3);

// 查看栈顶元素


std::cout << "Top element: " << stack.top() << std::endl;

// 删除栈顶元素


stack.pop();

// 再次查看栈顶元素


std::cout << "Top element after pop: " << stack.top() << std::endl;

// 判断栈是否为空


if (stack.isEmpty()) {


std::cout << "Stack is empty." << std::endl;


} else {


std::cout << "Stack is not empty." << std::endl;


}

return 0;


}


3. STL stack特点

(1)STL stack是基于模板实现的,可以存储任意类型的数据。

(2)STL stack内部使用deque(双端队列)作为底层容器,提高了栈的效率。

(3)STL stack提供了丰富的成员函数,方便用户进行操作。

三、封装实现

1. 封装实现简介

封装实现是指自己编写代码实现栈的数据结构,而不是使用现有的库函数。

2. 封装实现示例

cpp

include <iostream>


include <vector>

template <typename T>


class Stack {


private:


std::vector<T> elements;

public:


void push(const T& element) {


elements.push_back(element);


}

void pop() {


if (!isEmpty()) {


elements.pop_back();


}


}

T peek() const {


if (!isEmpty()) {


return elements.back();


}


throw std::out_of_range("Stack is empty.");


}

bool isEmpty() const {


return elements.empty();


}

size_t size() const {


return elements.size();


}


};

int main() {


Stack<int> stack;

// 向栈中插入元素


stack.push(1);


stack.push(2);


stack.push(3);

// 查看栈顶元素


std::cout << "Top element: " << stack.peek() << std::endl;

// 删除栈顶元素


stack.pop();

// 再次查看栈顶元素


std::cout << "Top element after pop: " << stack.peek() << std::endl;

return 0;


}


3. 封装实现特点

(1)封装实现可以自定义栈的底层容器,提高栈的效率。

(2)封装实现可以添加额外的功能,如异常处理、日志记录等。

(3)封装实现可以更好地控制栈的内存管理。

四、总结

本文介绍了栈的数据结构,分析了其基本操作,并介绍了两种工业级实现:STL stack和封装实现。在实际应用中,可以根据需求选择合适的实现方式。对于简单场景,可以使用STL stack;对于复杂场景,可以自己编写封装实现,以获得更好的性能和功能。