用c语言写判断用户输入的字符串是否是回文字符串,用户输入的字符串同时存储于链栈和链队列中。如果是回文字符串,则函数返回2,反之返回-1。
时间: 2024-03-25 07:38:04 浏览: 169
好的,以下是用 C 语言实现判断回文字符串的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链栈结构体
typedef struct node {
char data;
struct node *next;
} StackNode, *LinkStackPtr;
typedef struct stack {
LinkStackPtr top;
int count;
} LinkStack;
// 定义链队列结构体
typedef struct qnode {
char data;
struct qnode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
// 初始化链栈
void init_stack(LinkStack *s) {
s->top = NULL;
s->count = 0;
}
// 入栈
void push(LinkStack *s, char c) {
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
p->data = c;
p->next = s->top;
s->top = p;
s->count++;
}
// 出栈
char pop(LinkStack *s) {
if (s->count == 0) {
return '\0';
}
LinkStackPtr p = s->top;
char c = p->data;
s->top = p->next;
free(p);
s->count--;
return c;
}
// 判断栈是否为空
int is_stack_empty(LinkStack *s) {
return s->count == 0;
}
// 初始化链队列
void init_queue(LinkQueue *q) {
q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
q->front->next = NULL;
}
// 入队
void enqueue(LinkQueue *q, char c) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
p->data = c;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
// 出队
char dequeue(LinkQueue *q) {
if (q->front == q->rear) {
return '\0';
}
QueuePtr p = q->front->next;
char c = p->data;
q->front->next = p->next;
if (q->rear == p) {
q->rear = q->front;
}
free(p);
return c;
}
// 判断队列是否为空
int is_queue_empty(LinkQueue *q) {
return q->front == q->rear;
}
// 判断字符串是否为回文字符串
int is_palindrome(char *s) {
LinkStack stack;
LinkQueue queue;
init_stack(&stack);
init_queue(&queue);
int len = strlen(s);
// 将字符串逐个字符入栈和入队列
for (int i = 0; i < len; i++) {
push(&stack, s[i]);
enqueue(&queue, s[i]);
}
// 依次将字符出栈并从队列中取出字符比较
while (!is_stack_empty(&stack)) {
char c1 = pop(&stack);
char c2 = dequeue(&queue);
if (c1 != c2) {
return -1;
}
}
return 2;
}
int main() {
char s[100];
printf("Please enter a string: ");
scanf("%s", s);
if (is_palindrome(s) == 2) {
printf("The string is a palindrome.\n");
} else {
printf("The string is not a palindrome.\n");
}
return 0;
}
```
上面的代码中,我们使用了链栈和链队列来分别存储用户输入的字符串,并使用 `is_palindrome` 函数判断字符串是否为回文字符串。这里,我们使用了链栈来实现栈的功能,使用了链队列来实现队列的功能。在 `is_palindrome` 函数中,我们首先将字符串逐个字符入栈和入队列,然后依次将字符出栈并从队列中取出字符比较,如果有不同的字符,则说明不是回文字符串,返回-1;如果所有字符都一一对应,则说明是回文字符串,返回2。
阅读全文