2.链栈的应用:编写函数,判断给定的字符串是否回文。如字符串“abcba”、“abccba”均为中心对称,字符串“abcdba”不中心对称,我们将中心对称的字符串称为回文。 【要求】利用本实验已实现的链栈基本操作来实现,并进行测试; 【函数原型】int IsReverse(char *s); 【函数功能】判断字符串s是否为回文,是返回1,否则返回0; 【提示】先将字符串内容全部入栈,然后执行出栈操作,依次判断每次出栈的字符是否与字符串中对应正向字符相同,如果出现不相同的字符则说明字符串不是回文,全部都相同则是回文。写出对应代码
时间: 2024-02-29 08:51:36 浏览: 80
以下是判断字符串是否为回文的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct Node {
char data;
struct Node *next;
} Node, *LinkStack;
LinkStack InitStack() {
LinkStack S = (LinkStack) malloc(sizeof(Node));
S->next = NULL;
return S;
}
int IsEmpty(LinkStack S) {
return S->next == NULL;
}
void Push(LinkStack S, char x) {
Node *p = (Node *) malloc(sizeof(Node));
p->data = x;
p->next = S->next;
S->next = p;
}
char Pop(LinkStack S) {
if (IsEmpty(S)) {
printf("Stack is empty!\n");
exit(1);
}
Node *p = S->next;
char x = p->data;
S->next = p->next;
free(p);
return x;
}
char GetTop(LinkStack S) {
if (IsEmpty(S)) {
printf("Stack is empty!\n");
exit(1);
}
return S->next->data;
}
int IsReverse(char *s) {
int len = strlen(s);
LinkStack S = InitStack();
for (int i = 0; i < len; i++) {
Push(S, s[i]);
}
for (int i = 0; i < len; i++) {
if (s[i] != Pop(S)) {
return 0;
}
}
return 1;
}
int main() {
char s[MAX_SIZE];
printf("Please input a string: ");
scanf("%s", s);
if (IsReverse(s)) {
printf("%s is reverse.\n", s);
} else {
printf("%s is not reverse.\n", s);
}
return 0;
}
```
代码思路:
1. 定义链栈的基本操作函数。
2. 定义 IsReverse 函数,该函数用于判断字符串是否为回文。
3. 首先将字符串 s 中的每个字符入栈。
4. 然后依次出栈,与字符串 s 中的每个字符比较。
5. 如果出现不相同的字符,则说明字符串不是回文,返回 0。
6. 如果全部字符都相同,则说明字符串是回文,返回 1。
阅读全文