C语言:如何利用数组stack实现字符串的反转

C语言:如何利用数组stack实现字符串的反转
如何编写程序?

【以下回答由 GPT 生成】

#include <stdio.h>
#include <string.h>

// 定义栈结构
typedef struct {
    char data[100];
    int top;
} Stack;

// 初始化栈
void init(Stack *s) {
    s->top = -1;
}

// 判断栈是否为空
int isEmpty(Stack *s) {
    return s->top == -1;
}

// 判断栈是否满
int isFull(Stack *s) {
    return s->top == 99;
}

// 入栈
void push(Stack *s, char c) {
    if (isFull(s)) {
        return;
    }
    s->data[++s->top] = c;
}

// 出栈
char pop(Stack *s) {
    if (isEmpty(s)) {
        return '\0';
    }
    return s->data[s->top--];
}

// 字符串反转
void reverseString(char *str) {
    int len = strlen(str);
    Stack s;
    init(&s);

    // 将字符串中的字符依次入栈
    for (int i = 0; i < len; i++) {
        push(&s, str[i]);
    }

    // 将栈中的字符依次出栈并重新赋值给字符串
    for (int i = 0; i < len; i++) {
        str[i] = pop(&s);
    }
}

int main() {
    char str[] = "Hello World";
    printf("Original String: %s\n", str);

    reverseString(str);

    printf("Reversed String: %s\n", str);

    return 0;
}

请注意,上述代码中定义了一个栈结构,并实现了栈的初始化、判空、判满、入栈、出栈等基本操作。利用这些栈操作,我们可以将字符串中的每一个字符依次入栈,然后再依次出栈并重新赋值给字符串,即可实现字符串的反转。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#include <stdio.h>
char stack[100];
int top;
void push(char ch)
{
    stack[top++] = ch;
}
char pop()
{
    return stack[--top];
}
int main()
{
    top = 0;
    char s[100];
    scanf("%s", s);
    for (int i = 0;s[i]; i++)
    {
        push(s[i]);
    }
    int n = top;
    for (int i = 0; i < n; i++)
    {
        printf("%c", pop());
    }
    return 0;
}