请用C语言编写一个完整的程序,利用顺序栈的基本运算实现将栈中的内容进行逆转。自己输入数据
时间: 2024-11-25 17:20:20 浏览: 18
当然可以。下面是一个简单的C语言程序,它使用顺序栈结构(数组实现)并实现了栈元素的反转:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构
typedef struct Stack {
int* elements; // 存储元素的数组
int top; // 栈顶指针
int capacity; // 栈容量
} Stack;
// 初始化栈
Stack* init_stack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->elements = (int*)malloc(size * sizeof(int));
stack->top = -1;
stack->capacity = size;
return stack;
}
// 入栈操作
void push(Stack* stack, int value) {
if (stack->top == stack->capacity - 1) {
printf("Stack is full.\n");
return;
}
stack->top++;
stack->elements[stack->top] = value;
}
// 出栈操作
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回错误码表示空栈
}
int value = stack->elements[stack->top];
stack->top--;
return value;
}
// 反转栈
void reverse(Stack* stack) {
int temp;
for (int i = 0, j = stack->top; i < j; i++, j--) {
temp = stack->elements[i];
stack->elements[i] = stack->elements[j];
stack->elements[j] = temp;
}
}
// 打印栈内容
void print_stack(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return;
}
for (int i = stack->top; i >= 0; i--) {
printf("%d ", stack->elements[i]);
}
printf("\n");
}
int main() {
int input, size;
printf("Enter the number of elements to insert and stack size: ");
scanf("%d %d", &input, &size);
Stack* myStack = init_stack(size);
if (myStack != NULL) {
printf("Enter %d numbers:\n", input);
for (int i = 0; i < input; i++) {
scanf("%d", &myStack->elements[myStack->top + 1]);
push(myStack, myStack->elements[myStack->top + 1]);
}
print_stack(myStack); // 输出原始栈内容
reverse(myStack);
print_stack(myStack); // 输出反转后的栈内容
free(myStack->elements);
free(myStack);
} else {
return 1;
}
return 0;
}
```
运行这个程序,用户首先会输入需要插入栈的数据的数量以及栈的大小,然后依次输入数据,程序会打印出原始栈的内容,接着反转栈,并再次打印出结果。
阅读全文