写一段C语言顺序栈代码实现基本操作并添加注释
时间: 2024-10-23 20:10:57 浏览: 36
下面是一个简单的C语言顺序栈实现,包括基本的栈操作:初始化、入栈、出栈、查看栈顶元素以及判断栈是否为空。这里使用了动态内存分配来创建数组存储栈的内容。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int *data; // 栈的元素指针
int top; // 栈顶元素的位置
int capacity; // 栈的最大容量
} Stack;
// 初始化栈
Stack* create_stack(int capacity) {
Stack *stack = (Stack*) malloc(sizeof(Stack));
if (stack == NULL) {
printf("Memory allocation failed!\n");
return NULL;
}
stack->data = (int*)malloc(capacity * sizeof(int)); // 分配内存
stack->top = -1;
stack->capacity = capacity;
return stack;
}
// 判断栈是否为空
int is_empty(Stack *stack) {
return stack->top == -1;
}
// 入栈操作
void push(Stack *stack, int value) {
if (stack->top >= stack->capacity - 1) { // 检查是否已满
printf("Stack is full.\n");
return;
}
stack->top++;
stack->data[stack->top] = value;
}
// 出栈操作
int pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack is empty.\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 destroy_stack(Stack *stack) {
free(stack->data);
free(stack);
}
int main() {
Stack *stack = create_stack(5); // 创建一个最大容量为5的栈
push(stack, 10); // 入栈10
push(stack, 20); // 入栈20
printf("Top element is: %d\n", peek(stack)); // 输出栈顶元素
printf("%d popped from the stack.\n", pop(stack)); // 出栈并打印结果
destroy_stack(stack); // 销毁栈
return 0;
}
```
阅读全文