数组实现栈与回文字符串的判断

本文详细介绍了如何用数组实现栈,包括栈的基本操作(初始化、入栈、出栈、查看栈顶、获取大小、清空以及遍历),并展示了如何利用栈判断字符串是否为回文的一个实例。
摘要由CSDN通过智能技术生成

1.数组&栈

数组是一种常见的数据结构,而栈(Stack)则是一种具有特定操作顺序的数据结构。在栈中,元素的添加和删除操作都遵循“后进先出”(LIFO,Last In First Out)的原则。使用数组实现栈时,通常会维护一个栈顶指针,用于指示栈顶元素的位置。

2.使用数组实现栈的方面

  1. 初始化栈
    • 创建一个空数组作为栈的存储空间。
    • 设定一个变量(通常是整数类型)作为栈顶指针,初始值设为-1或0,表示栈为空。
  2. 判断栈是否为空
    • 通过检查栈顶指针的值来判断栈是否为空。如果栈顶指针等于-1(或0,取决于具体实现),则栈为空。
  3. 入栈(Push)操作
    • 当有新元素需要加入栈时,执行入栈操作。
    • 首先检查栈是否已满(即数组是否还有空余位置)。
    • 如果栈未满,将新元素添加到数组的下一个位置,并将栈顶指针加1。
  4. 出栈(Pop)操作
    • 当需要从栈中移除元素时,执行出栈操作。
    • 首先检查栈是否为空。
    • 如果栈不为空,获取栈顶元素的值,并将其从数组中移除,然后将栈顶指针减1。
  5. 查看栈顶元素(Peek)
    • 当需要查看栈顶元素但不移除它时,执行查看栈顶元素操作。
    • 检查栈是否为空。
    • 如果栈不为空,返回数组中栈顶指针指向的元素值,但不移动栈顶指针。
  6. 获取栈的大小(Size)
    • 返回栈中元素的数量。这通常是通过栈顶指针的值加1来得到的(因为栈顶指针指向的是下一个要插入的位置)。
  7. 清空栈(Clear)
    • 将栈顶指针重置为初始值(如-1或0),表示栈为空。数组中的元素不会被清除,但栈不再包含任何元素。
  8. 遍历栈(Traversal)
    • 通过循环,从数组的开始位置遍历到栈顶指针指向的位置,可以访问和打印出栈中的所有元素。

3.数组实现栈并判断回文字符串的代码实现

#include<iostream>
#include<string.h>
#define MAX 100
using namespace std;

int main(){
    char a[MAX+1],s[MAX+1];
    cin>>a;
    int len=strlen(a);
    int mid=len/2-1;//数组中的字符串中点
    //栈初始化
    int top=0;
    for(int i=0;i<=mid;i++)s[++top]=a[i];//++top,完成后top始终等于栈中元素个数
    //奇偶分类比较起始
    int b;
    if(len%2==0)b=mid+1;//奇偶判断
    else b=mid+2;
    //匹配
    for (int i = b; i <= len-1; i++)
    {
        if (a[i]!=s[top])break;
        top--;
    }

    if (top==0)cout<<"no";
    else cout<<"yes";
    

    return 0;
}

4.注意事项

1.注意数组下标从【0】开始。

所以注意mid的+1关系:mid=len/2-1,if(len%2==0)b=mid+1; else b=mid+2;

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值