用栈的思维解决问题

●问题:

       °编写一个算法利用顺序栈判断一个字符串str是否是对称串

        °对称串: 从左到右读 和 从右向左读的序列相同

●解法1:

        °顺序表存储

        °从两边"夹逼" , 直到得出结论


同时从字符串的两端开始遍历对比,直到遍历到不相同的字符,否则对称

●解法二:

        °顺序栈存储

        °湘江str所有元素进栈 , 出栈的将是逆序的字符串

        °从头开始扫描 str , 并出栈元素 , 将两者进行比较

        °实质: 从头开始扫描str 是从左向右读 , 出栈顺序是从右往左读 , 两者相等说明该串是对           称串.


理解栈的思维 , 进栈和出栈的顺序是相反的 , 所以出栈的顺序就是 str 的逆序 ,然后两者一一对比, 从而判断出是否是对称

用栈判断对称串算法

 我们要判断一个字符串是否是对称的 ,所以我们需要那个字符串数组

字符串数组以 '\0' 结束

先传入字符串数组


bool symmetry(ElemType str[]) {

然后我们就开始利用栈,来逆置 字符串数组的元素了, 然后再对比元素

构建栈

先定义栈,然后初始化栈, 接着往栈中压入元素就可以了


//定义栈中元素类型
ElemType e;
//定义栈
SqStack *st;
//初始化栈 , 调用初始化栈的成员函数(上一个作品讲过),就是将栈置空
InitStack(st);

//将字符串的所有元素进栈(字符串数组,最后一个元素标志结束,所以自动填'\0' 所以比较的时候忽略)
for( int i = 0 ; str[i]!='\0' ; i++)
{
    //逐个遍历将字符串数组里面的数据压入栈中(调用入栈成员方法)
    Push(st,str[i]);
}

现在我们已经完成了字符串入栈, 下面出栈的元素的顺序 就和 字符串的顺序相反 , 一一对比 ,就可以得出是否为对称串

//正序遍历字符串数组的元素
for(int i = 0; str[i]!='\0'; i++)
{
   //出栈逆序字符串的元素
   Pop(st,e);
   //两者比较 , 如果不相等 ,则跳出返回false ,同时销毁工具栈
    if(str[i]!=e)
    {
        DestroyStack(st);
        return false;
    }
}

如果上述遍历通过 , 不返回false ,则是正序表 ,销毁工具栈,同时返回 true 

DestroyStack(st);
return true;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值