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

数据结构之栈(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;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值