利用栈将数组中元素逆置C语言实现
时间: 2024-10-20 10:14:51 浏览: 40
在C语言中,我们可以使用栈的数据结构来逆置一个数组的元素。栈是一种后进先出(LIFO)的数据结构,这意味着最后放入的元素会最先弹出。以下是一个简单的步骤描述和示例代码:
1. 创建一个空的栈。
2. 遍历数组,依次将每个元素压入栈中。
3. 再次遍历数组,从栈顶弹出元素并将其放回原数组的位置,即倒序位置。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5 // 示例数组大小
void push(int stack[], int top, int value) {
if (top >= SIZE - 1) {
printf("Stack is full.\n");
return;
}
stack[top] = value;
top++;
}
int pop(int stack[], int *top) {
if (*top == -1) {
printf("Stack is empty.\n");
return -1;
}
int value = stack[*top];
stack[*top] = -1; // 标记栈顶已清空
(*top)--;
return value;
}
void reverse_array(int arr[], int n) {
int stack[SIZE]; // 假设数组不大于预设的SIZE
int top = -1;
// 入栈
for (int i = 0; i < n; i++) {
push(stack, &top, arr[i]);
}
// 出栈并反转数组
for (int i = 0; i < n; i++) {
arr[i] = pop(stack, &top);
}
}
// 测试
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
reverse_array(arr, n);
printf("\nReversed array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
当你运行这个程序,它会逆置输入的数组。注意,这个实现假设栈的大小已经预先设定好,并且不会处理动态扩容的问题。在实际应用中,你可能需要一个动态大小的栈或者其他数据结构来处理任意大小的数组。
阅读全文