栈——回文检测
栈(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;
}
这是运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」