#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100
typedef struct {
    int 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, int x) {
    if (isFull(s)) {
        printf("栈已满,无法入栈!\n");
        return;
    }
    s->data[++s->top] = x;
}

// 出栈
int pop(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无法出栈!\n");
        exit(1);
    }
    return s->data[s->top--];
}

// 获得栈顶元素
int getTop(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无法获取栈顶元素!\n");
        exit(1);
    }
    return s->data[s->top];
}

// 颠倒栈递归函数
void reverseStack(Stack *s) {
    if (isEmpty(s)) {
        return;
    }
    int x = pop(s);
    reverseStack(s);
    push(s, x);
}

int main() {
    Stack s;
    initStack(&s);
    push(&s, 1);
    push(&s, 2);
    push(&s, 3);
    push(&s, 4);
    push(&s, 5);

    reverseStack(&s);

    while (!isEmpty(&s)) {
        printf("%d ", pop(&s));
    }
    printf("\n");

    return 0;
}
题目:用递归颠倒一个栈。例如输入栈1 2 3 4 51在栈顶。颠倒之后的栈为5 4 3 2 15处在栈顶。c语言实现。

原文地址: https://www.cveoy.top/t/topic/b4Gr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录