利用栈和队列判断一串字符是否为回文
时间: 2023-12-13 21:17:59 浏览: 51
回文指正着读和倒着读都一样的词、句或数,如"上海自来水来自海上"和"level"。利用栈和队列来判断一串字符是否为回文的方法如下:
1. 将字符串中的字符依次入队列
2. 将字符串中的字符依次入栈
3. 比较队列中的字符和栈中的字符是否一致
4. 如果一致,则继续比较下一个字符,直到全部比较完毕
5. 如果不一致,则该字符串不是回文
如果你有具体的字符串需要判断,可以告诉我。
相关问题
c语言利用栈和队列判断字符串是否为回文
C语言可以利用栈和队列来判断一个字符串是否为回文。具体实现方法如下:
1. 利用栈实现判断回文:将字符串的前一半字符依次入栈,然后依次将后一半字符与栈中的字符进行比较,如果全部相同,则该字符串为回文。
2. 利用队列实现判断回文:将字符串的前一半字符依次入队列,然后依次将后一半字符与队列中的字符进行比较,如果全部相同,则该字符串为回文。
下面是利用栈实现判断回文的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 initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, char c) {
if (isFull(s)) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
initStack(&s);
int i;
for (i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
if (len % 2 != 0) {
i++;
}
while (i < len) {
if (pop(&s) != str[i]) {
return 0;
}
i++;
}
return 1;
}
int main() {
char str[MAX_SIZE];
printf("Please input a string: ");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s is a palindrome.\n", str); } else {
printf("%s is not a palindrome.\n", str);
}
return 0;
}
```
下面是利用队列实现判断回文的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 initQueue(Queue *q) {
q->front = q->rear = -1;
}
int isEmpty(Queue *q) {
return q->front == -1;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void enqueue(Queue *q, char c) {
if (isFull(q)) {
printf("Queue is full.\n");
exit(1);
}
if (isEmpty(q)) {
q->front = q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE;
}
q->data[q->rear] = c;
}
char dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
exit(1);
}
char c = q->data[q->front];
if (q->front == q->rear) {
q->front = q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE;
}
return c;
}
int isPalindrome(char *str) {
int len = strlen(str);
Queue q;
initQueue(&q);
int i;
for (i = 0; i < len / 2; i++) {
enqueue(&q, str[i]);
}
if (len % 2 != 0) {
i++;
}
while (i < len) {
if (dequeue(&q) != str[i]) {
return 0;
}
i++;
}
return 1;
}
int main() {
char str[MAX_SIZE];
用c#语言中的栈和队列判断字符串是否为回文
在C#语言中,我们可以使用栈(Stack)和队列(Queue)来判断字符串是否为回文。以下是一个简单的示例:
1. 首先,将字符串的每个字符依次压入栈中。
2. 然后,将栈中的字符依次弹出并与原字符串的对应位置进行比较。如果所有字符都相等,则说明该字符串是回文;否则,不是回文。
3. 接下来,将字符串的每个字符依次出队并添加到新的字符串中。
4. 最后,比较新字符串和原字符串是否相等。如果相等,则说明该字符串是回文;否则,不是回文。
以下是C#代码实现:
```csharp
using System;
using System.Collections.Generic;
class MainClass {
public static void Main (string[] args) {
string input = "level";
bool isPalindrome = IsPalindrome(input);
Console.WriteLine(isPalindrome); // 输出:True
}
public static bool IsPalindrome(string input) {
Stack<char> stack = new Stack<char>();
Queue<char> queue = new Queue<char>();
// 将字符串的每个字符依次压入栈中
for (int i = 0; i < input.Length; i++) {
stack.Push(input[i]);
}
// 将栈中的字符依次弹出并与原字符串的对应位置进行比较
for (int i = 0; i < input.Length; i++) {
char top = stack.Pop();
if (top != input[i]) {
return false;
}
}
// 将字符串的每个字符依次出队并添加到新的字符串中
string reversed = "";
while (stack.Count > 0) {
reversed += stack.Pop();
}
// 比较新字符串和原字符串是否相等
return reversed == new string(input.ToCharArray());
}
}
```
这段代码定义了一个名为`IsPalindrome`的方法,该方法接受一个字符串作为输入,并返回一个布尔值,表示该字符串是否为回文。在`Main`方法中,我们调用了`IsPalindrome`方法并输出结果。