帮我写一个栈的基本操作,其中包括初始化,进栈,出栈和取栈顶元素的C语言程序。
时间: 2024-10-29 10:16:00 浏览: 29
当然可以。下面是一个简单的C语言程序,它实现了栈的数据结构,包括初始化、入栈(push)、出栈(pop)以及获取栈顶元素(top)的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈的最大容量
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return (stack->top == -1);
}
// 入栈操作
void push(Stack *stack, int value) {
if (stack->top < MAX_SIZE - 1) {
stack->data[++stack->top] = value;
printf("元素 %d 入栈成功.\n", value);
} else {
printf("栈已满,无法入栈.\n");
}
}
// 出栈操作
int pop(Stack *stack) {
if (!isEmpty(stack)) {
int popped_value = stack->data[stack->top--];
printf("元素 %d 出栈.\n", popped_value);
return popped_value;
} else {
printf("栈为空,无法出栈.\n");
return -1; // 返回特殊值表示错误
}
}
// 获取栈顶元素(不改变栈)
int getTop(Stack *stack) {
if (!isEmpty(stack)) {
return stack->data[stack->top];
} else {
printf("栈为空,无法获取栈顶元素.\n");
return -1; // 同样返回特殊值表示错误
}
}
int main() {
Stack myStack;
init(&myStack);
push(&myStack, 1);
push(&myStack, 2);
push(&myStack, 3);
while (!isEmpty(&myStack)) {
printf("当前栈顶元素: %d\n", getTop(&myStack));
int popped = pop(&myStack);
if (popped != -1)
printf("刚出栈的元素: %d\n", popped);
}
return 0;
}
```
阅读全文