数据结构与栈
一、概念
1. 数据
2. 数据结构
3. 数据结构分类
二、栈
1. 栈
2. 相关概念
2.1 入栈
2.2 出栈
2.3 栈的特点
2.4 栈顶
2.5 栈底
2.6 栈顶元素
2.7 栈底元素
三、数组模拟栈
1. 初始化空栈
const int n = 100;
数据类型 s[n+1];
int top = 0;
2. 入栈
void push(数据类型 x)
{
if (top < n) // 如果栈未满
{
s[++top] = x;
}
// 上溢处理...
}
3. 出栈
void pop()
{
if (top > 0) // 如果不是空栈
{
top--;
}
// 下溢处理...
}
4. 获取栈顶元素
数据类型 getTop()
{
return s[top];
}
5. 判断栈是否为空
bool isEmpty()
{
return (top == 0); // top = 0 时是空栈
}
6. 获取栈内元素个数
int sizeStack()
{
return top;
}
四、栈的运用
1. 括号的匹配
1.1 审题
题目描述
输入描述
输出描述
样例1
1.2 参考答案
#include <iostream>
#include <cstdio>
using namespace std;
char s[105];
char c;
int top;
int main()
{
freopen("bracket.in", "r", stdin);
freopen("bracket.out", "w", stdout);
while (cin >> c)
{
if (c == '@')
{
break;
}
if (c != '(' && c != ')')
{
continue;
}
if (c == '(')
{
s[++top] = c;
}
else
{
if (top == 0)
{
cout << "NO" << endl;
return 0;
}
top--;
}
}
if (top == 0)
{
cout << "YES";
}
else
{
cout << "NO";
}
fclose(stdin);
fclose(stdout);
return 0;
}
2. 括号的匹配 2.0
2.1 审题
题目描述
输入描述
输出描述
样例1
2.2 参考答案
#include <iostream>
#include <cstdio>
using namespace std;
char s[105];
char c;
int top;
int main()
{
freopen("bracket.in", "r", stdin);
freopen("bracket.out", "w", stdout);
while (cin >> c)
{
if (c == '@')
{
break;
}
if (c == '(')
{
s[++top] = c;
}
else if (c == '[')
{
if (s[top] == '(')
{
cout << "NO";
return 0;
}
else
{
s[++top] = c;
}
}
else if (c == ')')
{
if (s[top] == '(')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
else if (c == ']')
{
if (s[top] == '[')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
}
if (top == 0)
{
cout << "YES";
}
else
{
cout << "NO";
}
fclose(stdin);
fclose(stdout);
return 0;
}
3. 括号的匹配 3.0
3.1 审题
题目描述
输入描述
输出描述
样例1
3.2 参考答案
#include <iostream>
#include <cstdio>
using namespace std;
char s[105];
char c;
int top;
int main()
{
freopen("bracket.in", "r", stdin);
freopen("bracket.out", "w", stdout);
while (cin >> c)
{
if (c == '@')
{
break;
}
if (c == '<')
{
s[++top] = c;
}
else if (c == '(')
{
if (s[top] == '<')
{
cout << "NO";
return 0;
}
else
{
s[++top] = c;
}
}
else if (c == '[')
{
if (s[top] == '(' || s[top] == '<')
{
cout << "NO";
return 0;
}
else
{
s[++top] = c;
}
}
else if (c == '{')
{
if (s[top] == '(' || s[top] == '[' || s[top] == '<')
{
cout << "NO";
return 0;
}
else
{
s[++top] = c;
}
}
else if (c == '>')
{
if (s[top] == '<')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
else if (c == ')')
{
if (s[top] == '(')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
else if (c == ']')
{
if (s[top] == '[')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
else if (c == '}')
{
if (s[top] == '{')
{
top--;
}
else
{
cout << "NO";
return 0;
}
}
}
if (top == 0)
{
cout << "YES";
}
else
{
cout << "NO";
}
fclose(stdin);
fclose(stdout);
return 0;
}