数据结构之栈(stack)初步简单实现:
理解:可以认为是存储数据的“筒”,先放进去的物品会被后放进去的物品“压住”,从而导致取出物品的时候只能从上方取出后放进去的物品;即后进先出【LIFO】。
实现:用一个top变量代表最高位置的数据,当栈内无数据时,top = -1;每存储一个数据top++。
以【判断字符串是否回文】为例,加深对栈的理解。
1、C++用数组实现
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100];
char stack[100];
int top = -1;
int len;
int mid;
int next;
cin >> a;
len = strlen(a);
mid = len/2-1;
for(int i=0;i<=mid;i++)
stack[++top] = a[i]; //把数据的一半压入栈内
next = len%2==0?mid+1:mid+2;
for(int i=next;i<len;i++) //出栈时与另一半数据进行匹配
{
if(stack[top] != a[i])
break;
top--;
}
if(top == -1) //如果全部都匹配成功,则栈已全空
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
2、采用C++STL库中的栈实现
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
stack <char> sta;
char temp[100];
int len;
int mid;
int next;
cin >> temp;
len = strlen(temp);
mid = len/2-1;
for(int i=0;i<=mid;i++)
{
sta.push(temp[i]);//把数据的一半压入栈内
}
next = len%2==0?mid+1:mid+2;
for(int i=next;i<len;i++)//出栈时与另一半数据进行匹配
{
if(sta.top()!=temp[i])
break;
sta.pop();
}
if(sta.empty()) //如果全部都匹配成功,则栈已全空
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
- size() 返回实际个数
- empty() 判断是否为空,空则返回1,否则返回0;
- push(item) 把item压入栈
- top() 返回栈顶元素
- pop() 将栈顶元素删除
- s1.swap(s2) 将两个栈元素交互
- s1 == s1 判断是否相等