[数据结构 & 算法] C语言实现栈容器

1、栈栈的核心思想就是,先入后出,作为复习,我决定用C语言实现一下栈的基本操作Init 初始化Destroy 销毁Clear 清除Length 获得栈的长度Empty 是否为空Top 取栈顶元素Pop 出栈Push 入栈Iterator 对栈进行遍历想清楚栈顶指针的位置,以及栈空间不够时要增加栈空间,其他方面都不是很复杂,直接贴代码,有简单注释//Stack.h//a...
摘要由CSDN通过智能技术生成

1、栈

栈的核心思想就是,先入后出,作为复习,我决定用C语言实现一下栈的基本操作

  1. Init 初始化
  2. Destroy 销毁
  3. Clear 清除
  4. Length 获得栈的长度
  5. Empty 是否为空
  6. Top 取栈顶元素
  7. Pop 出栈
  8. Push 入栈
  9. Iterator 对栈进行遍历

想清楚栈顶指针的位置,以及栈空间不够时要增加栈空间,其他方面都不是很复杂,直接贴代码,有简单注释

//Stack.h
//author: 芒果和小猫

#include <malloc.h>
#define SElemType int//定义栈里存储的数据类型
#define STACKINITSIZE 50//栈初始的大小
#define STACKINCREAMENT 50//每次栈增加的大小

typedef struct 
{
   
	SElemType* base;//指向栈底,也就是第一个元素
	SElemType* top;//指向栈顶元素的下一个
	int stackSize;//当前栈的空间大小,就是可以放多少个定义的数据类型
}Stack;

typedef int(*StackVisit)(SElemType* element);//函数指针,对栈里的元素进行操作

/*初始化栈*/
int InitStack(Stack* stack)
{
   
	//给栈分配空间,malloc是从堆里取空间,要手动归还
	stack->base = (SElemType*)malloc(STACKINITSIZE * sizeof(SElemType));
	if (stack->base == NULL)
		return 0;
	stack->top = stack->base;
	stack->stackSize = STACKINITSIZE;
	return 1;
}

void DestroyStack(Stack* stack)
{
   
	//归还分配的空间
	free(stack->base);
	stack->base = NULL;
	stack->top = NULL;
	stack->stackSize = 0;
}

void ClearStack(Stack* stack)
{
   
	//清除栈元素,也就是将栈顶移到栈底
	stack->top = stack->base;
}

int StackEmpty(Stack* stack)
{
   
	if (stack->base == stack->top||stack->top==NULL)
		return 1;
	else
		return 0;
}

int StackLength(Stack* stack)
{
   
	if (stack->base == NULL)
		return 0;
	else
		return stack->top - stack->base;
}

SElemType StackGetTop(Stack* stack)
{
   
	//因为top指向的顶上元素的下一个,所以要-1
	if (!StackEmpty(stack))
		return *(stack->top - 1);
	else
		return NULL;
}

int StackPush(Stack* stack,SElemType element)
{
   
	//如果空间不够要重新分配空间
	if 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值