用c语言请编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转(栈操作现)
时间: 2024-10-14 22:07:47 浏览: 36
在C语言中,你可以使用两个栈来实现这个功能,其中一个栈用于存储原始数据,另一个空栈用于保存第一个栈顶元素并逐个弹出然后压入第二个栈。以下是详细的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct Stack {
int* data;
int top;
int capacity;
} Stack;
// 初始化栈
Stack* create_stack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->data = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->capacity = size;
return stack;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top == s->capacity - 1) {
printf("Stack overflow\n");
return;
}
s->data[++s->top] = value;
}
// 出栈操作
int pop(Stack* s) {
if (s->top == -1) {
printf("Stack underflow\n");
return -1;
}
return s->data[s->top--];
}
// 另一个栈用于存储原栈元素并反转
Stack* reverse_stack(Stack* src) {
Stack* dest = create_stack(src->top + 1); // 预留一点空间防止溢出
while (!src->is_empty()) { // 当原栈非空时
push(dest, pop(src)); // 把原栈顶部元素压入新栈
}
free(src->data); // 释放原栈内存
src->data = NULL; // 空闲标识
src->top = -1; // 保持空栈状态
return dest;
}
// 判断栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 主函数示例
int main() {
Stack* src = create_stack(5);
// ... 进行栈操作,例如 push(1, 2, 3, 4, 5)
Stack* reversed = reverse_stack(src);
while (!reversed->is_empty()) {
printf("%d ", pop(reversed)); // 输出逆转后的元素
}
free(reversed->data); // 释放反转栈的内存
return 0;
}
```
阅读全文