1、栈
栈的核心思想就是,先入后出,作为复习,我决定用C语言实现一下栈的基本操作
- Init 初始化
- Destroy 销毁
- Clear 清除
- Length 获得栈的长度
- Empty 是否为空
- Top 取栈顶元素
- Pop 出栈
- Push 入栈
- 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