栈的基本操作和应用c++
时间: 2023-10-11 13:08:21 浏览: 62
栈(Stack)是一种线性数据结构,它的基本操作包括压栈(Push)、出栈(Pop)、获取栈顶元素(Top)和判断栈是否为空(Empty)。栈的特点是后进先出(LIFO),即最后一个压入栈的元素首先被弹出。
在C++中,可以使用STL库中的stack类来实现栈。stack类提供了push,pop,top和empty等操作,使用起来非常方便。
以下是使用STL库中的stack类实现栈的基本操作的示例代码:
```c++
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s; // 声明一个int类型的栈s
s.push(1); // 元素1入栈
s.push(2); // 元素2入栈
s.push(3); // 元素3入栈
cout << "栈顶元素为:" << s.top() << endl; // 输出栈顶元素
s.pop(); // 弹出栈顶元素
cout << "栈顶元素为:" << s.top() << endl; // 输出栈顶元素
while(!s.empty()) // 判断栈是否为空
{
cout << s.top() << " "; // 输出栈顶元素
s.pop(); // 弹出栈顶元素
}
return 0;
}
```
栈的应用非常广泛,常见的应用场景有:函数调用栈、表达式求值、括号匹配、迷宫求解等。
相关问题
map栈的基本操作c++
map栈是一种基于哈希表实现的数据结构,它允许存储一对键值对,并按照栈的方式对这些键值对进行操作。在C语言中,我们可以通过以下方式实现map栈的基本操作:
1. 初始化:首先,我们需要定义一个空的map栈,并分配内存空间来存储键值对。可以使用一个结构体来表示一个键值对,例如:
```c
typedef struct {
int key;
int value;
} KeyValuePair;
KeyValuePair* stack;
int top = -1;
int capacity = 10;
```
2. 入栈:在map栈中,入栈操作将一个键值对添加到栈的顶部。我们可以将键值对添加到数组stack的末尾,并更新top变量的值。如果栈已满,可以考虑动态扩容。
```c
void push(int key, int value) {
if (top == capacity - 1) {
// 栈已满,执行动态扩容操作
// ...
}
KeyValuePair* pair = malloc(sizeof(KeyValuePair));
pair->key = key;
pair->value = value;
stack[++top] = *pair;
}
```
3. 出栈:出栈操作将栈顶的键值对移除,并返回该键值对。我们可以通过减小top的值来实现出栈操作。
```c
KeyValuePair pop() {
if (top == -1) {
// 栈为空,返回一个默认的键值对或者抛出异常
// ...
}
KeyValuePair pair = stack[top];
top--;
return pair;
}
```
4. 获取栈顶元素:获取栈顶元素操作返回栈顶的键值对,但不对栈进行任何修改。
```c
KeyValuePair topElement() {
if (top == -1) {
// 栈为空,返回一个默认的键值对或者抛出异常
// ...
}
return stack[top];
}
```
需要注意的是,上述代码只是简单示例,并没有完整处理异常情况和动态扩容等操作。在实际应用中,可能需要根据具体需求进行适当的修改和优化。
c++ 栈的实现及应用
C++中可以使用STL中的stack库实现栈。stack是一种先进先出(LIFO)的数据结构,类似于一组盘子,只能在栈顶插入和删除元素。
以下是一个简单的C++栈的实现代码:
```c++
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int stk[N], tt = -1;
void push(int x)
{
stk[++tt] = x;
}
void pop()
{
tt--;
}
int top()
{
return stk[tt];
}
bool empty()
{
return tt == -1;
}
int main()
{
push(1);
push(2);
push(3);
cout << top() << endl; // 输出3
pop();
cout << top() << endl; // 输出2
if(empty()) cout << "栈为空" << endl;
else cout << "栈不为空" << endl;
return 0;
}
```
栈的应用场景非常广泛,例如:
- 函数调用时的参数传递和局部变量存储。
- 括号匹配问题。
- 中缀表达式转后缀表达式。
- 表达式求值。
- 实现undo/redo操作。
以上只是栈的一些基本应用,实际上栈还有很多其他的应用。