编写一个数据结构(c语言版)程序来判断字符串是否对称,要求同时使用栈和队列来实现
时间: 2024-11-15 17:32:32 浏览: 29
在C语言中,我们可以分别使用栈和队列来检查一个字符串是否对称。这里我会展示如何使用这两个数据结构来实现这个功能。
首先,我们先创建一个队列和一个栈,然后逐个比较字符串的字符:
**使用队列实现:**
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
char* data;
int front, rear;
} Queue;
void init_queue(Queue* q) {
q->front = q->rear = -1;
q->data = malloc(MAX_SIZE);
}
int isQueueEmpty(Queue* q) {
return q->front == q->rear;
}
void enqueue(Queue* q, char c) {
if (q->rear == MAX_SIZE - 1) {
printf("Queue is full.\n");
return;
}
q->data[++q->rear] = c;
}
char dequeue(Queue* q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return '\0';
}
return q->data[q->front++];
}
bool isSymmetricWithQueue(char* str) {
Queue queue;
init_queue(&queue);
for (int i = 0; i < strlen(str); ++i) {
enqueue(&queue, str[i]);
if (i != strlen(str) - 1 && !isQueueEmpty(&queue) && dequeue(&queue) != str[strlen(str) - 1 - i]) {
return false;
}
}
return isQueueEmpty(&queue);
}
int main() {
char str[] = "radar";
if (isSymmetricWithQueue(str)) {
printf("The string is symmetric using a queue.\n");
} else {
printf("The string is not symmetric using a queue.\n");
}
return 0;
}
```
**使用栈实现:**
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char* data;
int top;
} Stack;
void init_stack(Stack* s) {
s->top = -1;
s->data = malloc(MAX_SIZE);
}
int isStackEmpty(Stack* s) {
return s->top == -1;
}
void push(Stack* s, char c) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full.\n");
return;
}
s->data[++s->top] = c;
}
char pop(Stack* s) {
if (isStackEmpty(s)) {
printf("Stack is empty.\n");
return '\0';
}
return s->data[s->top--];
}
bool isSymmetricWithStack(char* str) {
Stack stack;
init_stack(&stack);
for (int i = 0; i < strlen(str); ++i) {
push(&stack, str[i]);
if (i != strlen(str) - 1 && !isStackEmpty(&stack) && pop(&stack) != str[strlen(str) - 1 - i]) {
return false;
}
}
return isStackEmpty(&stack);
}
int main() {
char str[] = "radar";
if (isSymmetricWithStack(str)) {
printf("The string is symmetric using a stack.\n");
} else {
printf("The string is not symmetric using a stack.\n");
}
return 0;
}
```
这两个版本都会检查输入字符串是否能通过相应的数据结构保持对称。如果字符顺序保持一致,则认为字符串是对称的。
阅读全文