C语言利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
时间: 2023-11-03 10:04:41 浏览: 100
C语言 判断字符串是否是回文
5星 · 资源好评率100%
对于判断字符串是否回文,可以使用堆栈或队列来实现。
1. 堆栈实现方法:
算法思路:
1. 将字符串的每个字符依次压入堆栈。
2. 弹出堆栈中的字符,拼接成新字符串。
3. 判断新字符串与原字符串是否相同,相同则为回文。
C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
s->data[++(s->top)] = c;
}
char pop(Stack *s) {
return s->data[(s->top)--];
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
int main() {
Stack s;
char str[MAX_SIZE];
int i, len, mid;
init(&s);
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
len = strlen(str) - 1;
mid = len / 2;
for (i = 0; i < mid; i++) {
push(&s, str[i]);
}
if (len % 2 != 0) {
i++;
}
while (str[i] != '\0') {
if (pop(&s) != str[i++]) {
printf("Not a palindrome\n");
return 0;
}
}
printf("Palindrome\n");
return 0;
}
```
2. 队列实现方法:
算法思路:
1. 将字符串的每个字符依次入队。
2. 出队两个字符,判断它们是否相同,相同则继续出队,直到队列为空或只剩一个字符。
3. 如果队列为空,则为回文,否则不是回文。
C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int front;
int rear;
} Queue;
void init(Queue *q) {
q->front = 0;
q->rear = 0;
}
void enqueue(Queue *q, char c) {
q->data[(q->rear)++] = c;
}
char dequeue(Queue *q) {
return q->data[(q->front)++];
}
int is_empty(Queue *q) {
return q->front == q->rear;
}
int main() {
Queue q;
char str[MAX_SIZE];
int i, len, mid;
init(&q);
printf("Enter a string: ");
fgets(str, MAX_SIZE, stdin);
len = strlen(str) - 1;
for (i = 0; i < len; i++) {
enqueue(&q, str[i]);
}
mid = len / 2;
for (i = 0; i < mid; i++) {
if (dequeue(&q) != dequeue(&q)) {
printf("Not a palindrome\n");
return 0;
}
}
printf("Palindrome\n");
return 0;
}
```
阅读全文