用c语言编写代码,实现用动态和静态2种内存分配方式分别编程实现顺序栈的创建、入栈、出栈、判断栈空和栈满操作?
时间: 2024-10-08 08:02:06 浏览: 44
在C语言中,我们可以使用动态内存分配(malloc/calloc/realloc)实现动态数组(用于顺序栈),而静态内存分配则可以使用固定大小的数组。
**动态内存分配实现顺序栈:**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* data; // 动态分配的栈元素指针
int top; // 栈顶元素索引
int capacity; // 栈的最大容量
} StackDynamic;
// 初始化栈
StackDynamic* create_stack(int size) {
StackDynamic* stack = (StackDynamic*) malloc(sizeof(StackDynamic));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->data = (int*) malloc(size * sizeof(int)); // 分配空间
if (!stack->data) {
free(stack);
return NULL;
}
stack->top = -1;
stack->capacity = size;
return stack;
}
// 入栈
void push(StackDynamic* stack, int value) {
if (stack->top == stack->capacity - 1) {
printf("Stack is full.\n");
return;
}
stack->top++;
stack->data[stack->top] = value;
}
// 出栈
int pop(StackDynamic* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回错误码
}
int value = stack->data[stack->top];
stack->top--;
return value;
}
// 判断栈是否为空
int is_empty(StackDynamic* stack) {
return stack->top == -1;
}
// 清理并释放内存
void destroy_stack(StackDynamic* stack) {
free(stack->data);
free(stack);
}
int main() {
StackDynamic* stack = create_stack(5); // 创建栈
// ... 使用栈功能
destroy_stack(stack); // 销毁栈
return 0;
}
```
**静态内存分配实现顺序栈:**
```c
#define MAX_CAPACITY 5
typedef struct {
int items[MAX_CAPACITY]; // 静态数组
int top;
} StackStatic;
// 初始化栈
StackStatic stack;
// 入栈 (类似动态栈)
void push(StackStatic* stack, int value) {
if (stack->top == MAX_CAPACITY - 1) {
printf("Stack is full.\n");
return;
}
stack->items[++stack->top] = value;
}
// 出栈 (类似动态栈)
int pop(StackStatic* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回错误码
}
return stack->items[stack->top--];
}
// 判断栈是否为空 (类似动态栈)
int is_empty(StackStatic* stack) {
return stack->top == -1;
}
// 主函数示例
int main() {
// ... 使用栈功能
return 0;
}
```
**注意事项:**
- 动态栈在使用完毕后需要手动调用`destroy_stack()`释放内存。
- 静态栈的空间有限,不适合大数据量的操作。
阅读全文