编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转,利用c语言进行编写
时间: 2024-10-09 15:04:12 浏览: 38
要使用栈(Stack)来逆转它的内容,你可以使用两个栈。一个用于存储元素,另一个用于保存第一个栈顶元素直到栈为空。以下是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int* arr; // 栈数组
int top; // 栈顶指针
int size; // 栈容量
} Stack;
// 初始化栈
void init(Stack* stack, int size) {
stack->arr = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->size = size;
}
// 入栈操作
void push(Stack* stack, int value) {
if (stack->top == stack->size - 1) {
printf("Stack is full.\n");
return;
}
stack->arr[++stack->top] = value;
}
// 出栈操作
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示空栈
}
return stack->arr[stack->top--];
}
// 反转栈
void reverse(Stack* src, Stack* dest) {
while (!src->top) {
// 如果源栈为空,则直接返回
}
// 将源栈顶元素复制到dest栈
push(dest, pop(src));
// 对于剩余元素,继续执行反转过程
reverse(src, dest);
}
// 主程序
int main() {
Stack src, dest;
int n, i;
// 初始化两个栈
init(&src, 10);
init(&dest, 10);
// 添加元素到src栈
printf("Enter elements to be reversed:\n");
for (i = 0; i < 5; ++i) {
scanf("%d", &n);
push(&src, n);
}
// 反转src栈的内容并打印结果
reverse(&src, &dest);
printf("Reversed stack:\n");
while (!dest.top) {
printf("%d ", pop(&dest));
}
printf("\n");
// 清理内存
free(src.arr);
free(dest.arr);
return 0;
}
```
在这个例子中,我们首先初始化两个栈`src`和`dest`。然后从用户那里获取元素并将它们推入`src`栈。接下来调用`reverse`函数来逆转`src`栈的内容,同时将元素推入`dest`栈。最后,我们将`dest`栈中的元素弹出并打印出来,得到逆转后的序列。
阅读全文