在本文中,我们将深入探讨C++中的stack容器,包括它的基本概念、功能和实际应用。我们将通过易于理解的代码示例来详细阐述这些概念。
1. stack容器简介
stack(栈)是一种简单的线性数据结构,具有“先进后出”(LIFO,Last In First Out)的特点。这意味着最后插入stack的元素将首先被移除。在C++中,stack容器是基于其他容器实现的,通常是deque(双端队列)或vector(向量)。
stack容器的主要操作有四个:push(压入元素)、pop(弹出元素)、top(访问栈顶元素)和empty(检查栈是否为空)。我们将在后面的章节中详细介绍这些操作。
2. 创建和初始化stack
要使用stack容器,您需要包含头文件。创建一个stack时,可以选择基于deque(默认)或vector实现。以下是创建stack的示例代码:
#include // 基于deque的stackstd::stack s1;// 基于vector的stackstd::stack> s2;
3. 常用操作3.1 push
将元素压入stack的顶部。以下代码示例展示了如何使用push操作:
std::stack s;s.push(10);s.push(20);s.push(30);
此时,栈顶元素为30。
3.2 pop
从stack顶部移除元素。注意,pop操作不会返回被移除的元素。以下代码示例展示了如何使用pop操作:
std::stack s;s.push(10);s.push(20);s.push(30);s.pop(); // 从栈中移除30
此时,栈顶元素为20。
3.3 top
访问stack顶部的元素,但不从栈中移除。以下代码示例展示了如何使用top操作:
std::stack s;s.push(10);s.push(20);s.push(30);int top = s.top(); // top的值为30,但30仍然在栈中
3.4 empty
检查stack是否为空。以下代码示例展示了如何使用empty操作:
std::stack s;bool isEmpty = s.empty(); // isEmpty的值为true,因为栈为空
4. stack的实际应用
stack在实际应用中有很多用途,例如在括号匹配、表达式计算和深度优先搜索(DFS)等场景中。以下是一个简单的示例,展示如何使用stack检查字符串中的括号是否匹配:
#include #include #include bool isValidParenthesis(const std::string& str) { std::stack s; for (char ch : str) { if (ch == '(' || ch == '[' || ch == '{') { s.push(ch); } else { if (s.empty()) return false; char top = s.top(); if ((ch == ')' && top == '(') || (ch == ']' && top == '[') || (ch == '}' && top == '{')) { s.pop(); } else { return false; } } } return s.empty();}int main() { std::string str = "{[()]}"; std::cout << (isValidParenthesis(str) ? "匹配" : "不匹配") << std::endl; return 0;}
#夏日生活打卡季#
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.