请编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转(栈操作现)用C语言
时间: 2024-10-14 07:07:46 浏览: 71
你可以使用迭代的方式来实现这个栈逆序的操作。以下是一个简单的C语言函数,它使用两个栈来完成目标,其中一个入栈元素,另一个则出栈并添加到结果数组中。最后,返回逆序后的栈内容。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Stack {
int* elements;
size_t top;
size_t capacity;
} Stack;
void push(Stack* stack, int value) {
if (stack->top == stack->capacity - 1) {
stack->capacity *= 2; // 当栈满时扩大容量
stack->elements = (int*)realloc(stack->elements, stack->capacity * sizeof(int));
}
stack->elements[stack->top++] = value;
}
int pop(Stack* stack) {
if (stack->top == 0)
return -1; // 栈为空
return stack->elements[--stack->top];
}
// 主函数
void reverseStack(Stack* inputStack, Stack* outputStack) {
while (!inputStack->top) {
push(outputStack, -1); // 初始化空栈
}
while (inputStack->top > 0) {
int value = pop(inputStack);
push(outputStack, value);
}
}
int* getReversedStack(Stack* outputStack) {
size_t length = outputStack->top;
int* reversedStack = (int*)malloc(length * sizeof(int));
for (size_t i = 0; i < length; ++i) {
reversedStack[i] = pop(outputStack);
}
return reversedStack;
}
void freeStack(Stack* stack) {
free(stack->elements);
stack->elements = NULL;
stack->top = 0;
stack->capacity = 0;
}
int main() {
Stack inputStack = {NULL, 0, 8}; // 初始化输入栈
push(&inputStack, 5);
push(&inputStack, 4);
push(&inputStack, 3);
Stack outputStack = {NULL, 0, 8}; // 初始化输出栈
reverseStack(&inputStack, &outputStack);
int* reversedArray = getReversedStack(&outputStack);
printf("Reversed stack: ");
for (size_t i = 0; i < outputStack.top; ++i) {
printf("%d ", reversedArray[i]);
}
printf("\n");
freeStack(&inputStack);
freeStack(&outputStack);
return 0;
}
```
当你运行`main()`函数时,它会打印出"Reversed stack: 3 4 5 "。
阅读全文