美文网首页
初始栈——解密回文

初始栈——解密回文

作者: 进击的猫 | 来源:发表于2016-12-22 19:13 被阅读0次

栈是一种后进先出的数据结构,它只限定为只能在一端进行插入和删除操作。

比如说有一个小桶,它的直径只能放一个小球,我们现在小桶依次放入2、1、3号小球。假如你现在需要拿出2号球,那就必须先将3号小球拿出,再拿出1号小球,最后才能将2号小球拿出来。

栈的实现只需要一个以为数组和一个指向栈顶的变量就可以了,我们通过这个变量来对栈进行插入和删除操作。我们先来看看一个例子,了解一下栈究竟有什么作用,回文字符串,就是正读反读均相同的字符序列,如“xyzyx”。

首先我们需要读取这行字符串,并求出这个字符串的长度。

    char aInput[101]    
    gets(aInput);
    long len = strlen(aInput);

我们还需要获得这行字符串的中点位置,即;

    mid = (len * 0.5) - 1;

接下来就是栈出场了。
我们先将mid之前的字符全部入栈。因为这里的栈是用来存储字符的,所以这里用来实现栈的数组类型是char。

    int top = 0;
    for (i = 0 ; i <= mid; i++) {
        aTemp[++top] = aInput[i];
    }

接下来进入判断回文的关键步骤。将当前栈中的字符依次出栈,看看能否与mid之后的字符一一匹配,如果都能匹配则说明这个字符是回文字符串,否则这个字符串就不是回文字符串。

    for (i = next; i<= len -1; i++) {
        if (aInput[i] != aTemp[top]) {
            break;
        }
        top--;
    }
    
    if (top == 0) {
        printf("YES"); // 说明栈内所有的字符都被一一匹配
    }else{
        printf("NO");
    }

到这里就完成判断输入的字符串是否为回文字符串了,还有一些问题需要考虑,这里就是一种判断方式而已。全部代码如下;

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    
    char aInput[101],aTemp[101];
    int i, mid, next, top;
    
    gets(aInput);
    long len = strlen(aInput);
    // 求字符串的中点
    mid = (len * 0.5) - 1;
    
    // 栈顶初始化
    top = 0;
    for (i = 0 ; i <= mid; i++) {
        aTemp[++top] = aInput[i];
    }
    
    // 找出需要进行字符匹配的起始下标
    if(len % 2 == 0){
        next = mid +1;
    }else{
        next = mid +2;
    }
    
    // 开始匹配
    for (i = next; i<= len -1; i++) {
        if (aInput[i] != aTemp[top]) {
            break;
        }
        top--;
    }
    
    if (top == 0) {
        printf("YES"); // 说明栈内所有的字符都被一一匹配
    }else{
        printf("NO");
    }
    getchar();getchar();
    
    return 0;
}

相关文章

  • 初始栈——解密回文

    栈是一种后进先出的数据结构,它只限定为只能在一端进行插入和删除操作。 比如说有一个小桶,它的直径只能放一个小球,我...

  • 06_解密回文_栈

    上一节中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据结构,它叫做栈。栈限定为只能在一端进行...

  • 栈的特点:后进先出 abcdefghgfedcba,以h为中心,左右对称,称为“回文” 通过栈的方式进行回文校验 ...

  • 关于回文问题

    回文问题的解法:双指针,栈,reverse 1. 409. 最长回文串[✔]2. 125. 验证回文串[✔]3. ...

  • 数据结构实验1.4:栈和队列

    实验内容 : 1.采用链式存储实现栈的初始化、入栈、出栈操作。2.采用顺序存储实现栈的初始化、入栈、出栈操作。3....

  • 栈回文串

    测试1: 测试2:

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 顺序栈的操作

    栈的定义 栈的操作 初始化 判断为空 入栈 出栈 获取栈顶元素

  • JHipster一知半解- 1.1 技术栈官方文档翻译

    回文集目录:JHipster一知半解 Technology stack 技术栈 Technology stack ...

  • 栈回文串

    测试1: 测试2:

网友评论

      本文标题:初始栈——解密回文

      本文链接:https://www.haomeiwen.com/subject/uxshvttx.html