用c语言实现顺序栈的定义、初始化、判空操作、销毁、清空、输出所有元素、入栈、出栈
时间: 2025-01-16 07:06:13 浏览: 36
在C语言中,我们可以按照以下步骤来实现顺序栈的操作:
- 定义: 使用结构体定义顺序栈,包含数据存储区(通常是数组)和栈顶指针(指向最后一个已存放元素的位置)。
typedef struct {
int capacity; // 容量
int top; // 栈顶指针
int data[ ]; // 存储数据的数组
} Stack;
初始化: 如果使用固定大小数组,如上面的例子那样;如果动态扩容,如动态分配内存。
void initialize(Stack* s, int initial_capacity) { s->capacity = initial_capacity; s->top = -1; }
判断空: 判空操作通过检查栈顶指针是否等于-1完成。
bool is_empty(Stack* s) { return s->top == -1; }
销毁 (释放内存): 如果是动态分配的内存,需要在不再使用时释放。
void destroy(Stack* s) { free(s->data); free(s); }
清空 (将栈置空): 将栈顶指针重置为-1,但不释放内存。
void empty(Stack* s) { s->top = -1; }
输出所有元素 (遍历打印): 使用循环遍历数组并打印每个元素。
void print_all(Stack* s) { for (int i = 0; i <= s->top; ++i) { printf("%d ", s->data[i]); } printf("\n"); }
入栈 (push): 当需要添加元素时,增加栈顶指针并把新元素存入数组相应位置。
void push(Stack* s, int value) { if (s->top >= s->capacity - 1) { // 检查溢出 expand_stack(s); // 扩容操作(这里省略) } s->data[++s->top] = value; } void expand_stack(Stack* s) { s->capacity *= 2; s->data = realloc(s->data, s->capacity * sizeof(int)); }
出栈 (pop): 删除栈顶元素,并调整栈顶指针。
int pop(Stack* s) { if (is_empty(s)) { return -1; // 或者抛异常,表示栈空 } int value = s->data[s->top]; s->top--; return value; }
相关推荐

















