栈——回文检测

栈(Stack)是一种常见的数据结构,它基于先进先出(LIFO,Last-In-First-Out)的原则。这意味着最后添加到栈中的元素将首先被移除。栈通常用于管理数据的存储和访问,以及在编程中处理函数调用、表达式求值、内存管理等方面。
以下是一些关于栈的基本特点和操作:

1.元素存储顺序: 栈中的元素按照后进先出的原则排列,最后进入栈的元素是第一个被访问的,而最早进入栈的元素则是最后被访问的。
2.栈的基本操作: 栈通常支持两个基本操作:
3.压栈(Push): 将一个元素添加到栈的顶部。
4.弹栈(Pop): 移除并返回栈顶的元素。
5.栈的应用: 栈在计算机科学和编程中有广泛的应用,包括但不限于:
6.函数调用: 编程语言使用栈来跟踪函数调用和返回地址,以便在函数完成后返回到调用点。
7.表达式求值: 栈可用于解析和求值数学表达式,如后缀表达式。
8.内存管理: 栈用于分配和释放局部变量的内存。
9.回文检测: 如您之前的示例中,栈可以用于检测字符串是否为回文。
10.栈的实现方式: 栈可以通过数组或链表来实现。在数组实现中,栈的大小通常是固定的,而链表实现可以动态增长。

下面列举一个比较简单的回文检测代码,体会一下先进先出的栈

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

int isPalindrome(char a[], int len) {
    int mid = len / 2 - 1;
    int top = 0;
    char s[len / 2]; // 使用合适大小的栈数组

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

    int next = (len % 2 == 0) ? mid + 1 : mid + 2;

    for (int i = next; i < len; i++) {
        if (a[i] != s[top]) {
            return 0; // 遇到不匹配的字符,返回0表示不是回文
        }
        top--;
    }

    return 1; // 如果没有不匹配的字符,返回1表示是回文
}

int main() {
    char a[101];
    printf("请输入一个字符串:");
    fgets(a, sizeof(a), stdin); // 使用fgets代替gets,更安全

    int len = strlen(a);
    // 去除输入字符串中的换行符
    if (len > 0 && a[len - 1] == '\n') {
        a[len - 1] = '\0';
        len--;
    }

    if (isPalindrome(a, len)) {
        printf("是回文串。\n");
    } else {
        printf("不是回文串。\n");
    }

    return 0;
}

这是运行结果

posted @ 2023-10-20 15:57  YE-  阅读(49)  评论(0编辑  收藏  举报