数据结构—栈

#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
	int *arr; // 栈首地址
	int cap; // 栈容量
	int top; // 栈顶
}stack_t;

/* 
    初始化栈,传入栈结构体指针和 cap, 使用 calloc 给 arr 分配空间
*/
void stack_init(stack_t *stack ,int cap)
{
	stack->arr = (int *)calloc(cap, sizeof(int));
	stack->cap = cap;
	stack->top = 0;
}

void stack_deinit(stack_t *stack)
{
	free(stack->arr);
	stack->arr = NULL;
	stack->cap = 0;
	stack->top = 0;
}

/* 
    栈满条件为 top = cap
*/
int stack_full(stack_t *stack)
{
	return stack->top >= stack->cap;
}

/* 
    栈空条件为 top = 0
*/
int stack_empty(stack_t *stack)
{
	return !stack->top;
}

/* 
    入栈操作,将数据放入arr[top], top+1
*/
void stack_push(stack_t *stack ,int data)
{
	stack->arr[stack->top++] = data;
}

/* 
    出栈操作,top-1,并返回 arr[top]
*/
int stack_pop(stack_t *stack)
{
	return stack->arr[--stack->top];
}

/* 
    获取栈顶数据,返回 arr[top-1]
*/
int stack_top(stack_t *stack)
{
	return stack->arr[stack->top-1];
}

/* 
    获取栈中元素个数,返回 top
*/
int stack_size(stack_t *stack)
{
	return stack->top;
}

int main(int argc ,char *argv[])
{
	stack_t stack;
	stack_init(&stack ,10);
	
	printf("%s " ,stack_full(&stack) ? "满" :"不满");
	printf("%s\n" ,stack_empty(&stack) ? "空" :"不空");
	
	int i = 250;
	while(!stack_full(&stack))
		stack_push(&stack ,i++);
	
	printf("%s\n" ,stack_full(&stack) ? "满" :"不满");
	
	printf("栈顶的值为%d\n" ,stack_top(&stack));
	printf("栈的大小为%d\n" ,stack_size(&stack));
	
	printf("出栈:");
	while(!stack_empty(&stack))
		printf("%d " ,stack_pop(&stack));
	printf("\n");
	
	printf("%s\n" ,stack_empty(&stack) ? "空" :"不空");
	
	stack_deinit(&stack);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗里い着迷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值