请用c语言实现可操作的栈的基本操作
时间: 2023-10-11 16:06:41 浏览: 53
以下是用 C 语言实现可操作的栈的基本操作的示例代码:
```c
#include <stdlib.h>
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef struct {
int data[MAX_STACK_SIZE];
int top;
} Stack;
void init(Stack *stack) {
stack->top = -1;
}
int is_empty(Stack *stack) {
return stack->top == -1;
}
int is_full(Stack *stack) {
return stack->top == MAX_STACK_SIZE - 1;
}
void push(Stack *stack, int value) {
if (is_full(stack)) {
printf("Stack overflow\n");
return;
}
stack->top++;
stack->data[stack->top] = value;
}
int pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack underflow\n");
return -1;
}
int value = stack->data[stack->top];
stack->top--;
return value;
}
int peek(Stack *stack) {
if (is_empty(stack)) {
printf("Stack is empty\n");
return -1;
}
return stack->data[stack->top];
}
void display(Stack *stack) {
if (is_empty(stack)) {
printf("Stack is empty\n");
return;
}
printf("Stack: ");
for (int i = stack->top; i >= 0; i--) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
int main() {
Stack stack;
init(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
display(&stack);
int value = pop(&stack);
printf("Popped value: %d\n", value);
display(&stack);
value = peek(&stack);
printf("Peeked value: %d\n", value);
display(&stack);
return 0;
}
```
在上面的示例代码中,我们定义了一个结构体 `Stack`,其中包含一个整型数组 `data` 和一个整型变量 `top`。`top` 表示栈顶元素的下标,初始值为 -1,表示栈为空。`data` 数组用于存储栈中的元素。
我们用 `init` 函数初始化栈,将 `top` 的值设置为 -1。`is_empty` 函数用于判断栈是否为空,如果 `top` 的值为 -1,说明栈为空,返回 1,否则返回 0。`is_full` 函数用于判断栈是否已满,如果 `top` 的值等于 `MAX_STACK_SIZE - 1`,说明栈已满,返回 1,否则返回 0。
`push` 函数用于将元素入栈。如果栈已满,打印出栈溢出的错误信息。否则,将 `top` 的值加 1,并将元素存储到 `data` 数组中的相应位置。
`pop` 函数用于将元素出栈。如果栈为空,打印出栈下溢的错误信息,并返回 -1。否则,将栈顶元素存储到变量 `value` 中,将 `top` 的值减 1,并返回 `value`。
`peek` 函数用于获取栈顶元素的值,但不将其出栈。如果栈为空,打印出栈为空的错误信息,并返回 -1。否则,返回 `data` 数组中 `top` 位置的元素值。
`display` 函数用于打印出栈中的所有元素,如果栈为空,打印出栈为空的信息。
在 `main` 函数中,我们首先初始化栈,然后依次入栈三个元素,再打印出栈中的所有元素。接着,我们将一个元素出栈,并打印出出栈的元素值。再次打印出栈中的所有元素。最后,获取栈顶元素的值,并打印出来,再次打印出栈中的所有元素。