在C语言中,栈可以通过数组或链表来实现。以下是使用数组实现栈的示例代码:
```c
include include include define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int top; } Stack; // 初始化栈 void init(Stack *s) { s->top = -1; } // 压栈操作 void push(Stack *s, int value) { if (s->top == MAX_SIZE - 1) { printf("Stack overflow!\n"); return; } s->data[++s->top] = value; } // 弹栈操作 int pop(Stack *s) { if (s->top >= 0) { return s->data[s->top--]; } else { printf("Stack is empty!\n"); return -1; } } // 获取栈顶元素 int top(Stack *s) { if (s->top >= 0) { return s->data[s->top]; } else { printf("Stack is empty!\n"); return -1; } } // 判断栈是否为空 int isEmpty(Stack *s) { return s->top == -1; } // 获取栈的大小 int size(Stack *s) { return s->top + 1; } int main() { Stack s; init(&s); push(&s, 1); push(&s, 2); push(&s, 3); printf("Top element is: %d\n", top(&s)); printf("Popped element is: %d\n", pop(&s)); printf("Stack size is: %d\n", size(&s)); return 0; } ``` 代码解释 `Stack`结构体包含一个整数数组`data`和一个整数`top`,`top`表示栈顶的位置。 `init(Stack *s)`函数将栈的`top`初始化为-1,表示栈为空。 `push(Stack *s, int value)`函数将一个整数`value`压入栈顶。如果栈已满(即`top`等于`MAX_SIZE - 1`),则输出"Stack overflow!"。 `pop(Stack *s)`函数从栈顶弹出一个元素并返回它。如果栈为空(即`top`小于0),则输出"Stack is empty!"并返回-1。 `top(Stack *s)`函数返回栈顶的元素,但不移除它。如果栈为空,则输出"Stack is empty!"并返回-1。 `isEmpty(Stack *s)`函数检查栈是否为空,即`top`是否等于-1。 `size(Stack *s)`函数返回栈中元素的个数。 `main()`函数演示了如何使用上述函数进行栈的基本操作,包括初始化栈、压栈、弹栈、获取栈顶元素和判断栈是否为空。 通过上述代码,你可以实现一个简单的栈,并进行基本的栈操作。根据具体需求,你还可以扩展这个实现,例如添加动态扩容功能或使用链表实现栈。结构体定义
初始化函数
压栈操作
弹栈操作
获取栈顶元素
判断栈是否为空
获取栈的大小
主函数