1.回文(palindrome)是指一个字符串从前面读和从后面读都一样,仅使用若干栈和队列、栈和队列的ADT函数以及若干个int类型和char类型的变量,设计一个算法来判断一个字符串是否为回文。c实现
时间: 2024-11-30 07:17:28 浏览: 35
为了判断一个字符串是否为回文,你可以使用双指针技术,其中一个从字符串的开始位置向后移动,另一个从结束位置向前移动,同时比较两个指针所指向的字符是否相等。以下是使用C语言的一个简单示例:
```c
#include <stdio.h>
#include <string.h>
// 定义栈结构体
typedef struct {
char* items;
int top;
int capacity;
} Stack;
// 初始化栈
void init(Stack* s) {
s->items = (char*)malloc(sizeof(char)*s->capacity);
s->top = -1;
}
// 入栈操作
void push(Stack* s, char c) {
if (s->top == s->capacity - 1) {
s->capacity *= 2; // 如果满了,容量翻倍
s->items = (char*)realloc(s->items, sizeof(char)*s->capacity);
}
s->items[++s->top] = c;
}
// 出栈操作
char pop(Stack* s) {
return s->items[s->top--];
}
// 判断字符串是否为回文
int isPalindrome(char str[], int len) {
Stack s;
init(&s);
// 将字符串的一半压入栈
for (int i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
// 比较另一半和栈顶元素
for (int i = len / 2; i < len; i++) {
if (str[i] != pop(&s)) {
return 0; // 如果不一样,不是回文
}
}
// 如果字符串长度是奇数,中间的字符不需要比较
if (len % 2 == 1 && s.top > 0)
return 1;
return 1; // 所有字符匹配,所以是回文
}
int main() {
char str[] = "madam";
int len = strlen(str);
printf("%s is a palindrome? %d\n", str, isPalindrome(str, len));
return 0;
}
```
这个程序首先创建一个栈,并将字符串的一半字符入栈。然后逐个检查剩余字符,如果发现不匹配,则返回0表示不是回文;如果全部匹配,最后判断栈是否为空(对于奇数长度的字符串),若为空则说明是回文。
阅读全文