数据结构之栈(stack)初步简单实现

来源:互联网 发布:js iframe 子页面跳转 编辑:程序博客网 时间:2024/06/06 09:16

数据结构之栈(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;elsecout << "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;elsecout << "No" << endl;return 0;}

STL中常用的函数有以下几个:
  1. size()                                       返回实际个数
  2. empty()                                    判断是否为空,空则返回1,否则返回0;
  3. push(item)                               把item压入栈
  4. top()                                        返回栈顶元素
  5. pop()                                       将栈顶元素删除
  6. s1.swap(s2)                            将两个栈元素交互
  7. s1 == s1                                  判断是否相等

0 0
原创粉丝点击