用c语言利用栈结构判断回文
时间: 2023-04-06 13:01:57 浏览: 165
可以使用栈结构来判断回文。具体方法是将字符串的前一半依次入栈,然后再将后一半与栈中的元素依次比较,如果全部相等,则说明该字符串是回文。以下是示例代码:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int main()
{
char str[MAX_SIZE];
int len, i, mid;
char stack[MAX_SIZE];
int top = -1;
printf("请输入一个字符串:");
scanf("%s", str);
len = strlen(str);
mid = len / 2;
for (i = 0; i < mid; i++) {
stack[++top] = str[i];
}
if (len % 2 == 1) {
i = mid + 1;
} else {
i = mid;
}
while (i < len) {
if (stack[top--] != str[i++]) {
printf("%s 不是回文\n", str);
return 0;
}
}
printf("%s 是回文\n", str);
return 0;
}
相关问题
用c语言输入一段数据并利用栈结构判断回文
可以使用以下代码实现:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int top = -1;
char stack[MAX_SIZE];
void push(char c) {
if (top == MAX_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
stack[++top] = c;
}
char pop() {
if (top == -1) {
printf("Stack Underflow\n");
return '\0';
}
return stack[top--];
}
int main() {
char str[MAX_SIZE];
int i, len, mid;
printf("Enter a string: ");
scanf("%s", str);
len = strlen(str);
mid = len / 2;
for (i = 0; i < mid; i++) {
push(str[i]);
}
if (len % 2 != 0) {
i++;
}
while (str[i] != '\0') {
if (pop() != str[i]) {
printf("%s is not a palindrome\n", str);
return 0;
}
i++;
}
printf("%s is a palindrome\n", str);
return 0;
}
用c语言写栈判断回文序列
在C语言中,我们可以利用栈的数据结构特性来判断一个序列是否为回文。回文序列是指正读反读都一样的字符串,例如"abcba"和"madam"。
以下是一个简单的C程序,它会通过将输入序列的一半元素压入栈中,然后遍历另一半并与栈顶元素一一比较,如果相等则继续,直到遍历完或者栈为空:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool isPalindrome(char str[]) {
int n = strlen(str);
// 将一半字符压入栈中
stack<char> s;
for (int i = 0; i <= n / 2; i++) {
s.push(str[i]);
}
// 另一半从头开始对比
for (int i = n / 2 + 1; i < n; i++) {
if (s.empty() || str[i] != s.top()) {
return false; // 如果不匹配或栈空,则不是回文
}
s.pop();
}
// 如果所有元素都比对过了,并且栈也为空,说明是回文
return s.empty();
}
int main() {
char input[100];
printf("Enter a sequence to check if it's palindrome: ");
fgets(input, sizeof(input), stdin); // 注意处理换行符
bool result = isPalindrome(input);
if (result) {
printf("The sequence is a palindrome.\n");
} else {
printf("The sequence is not a palindrome.\n");
}
return 0;
}
```
阅读全文