栈原理及C语言实现
一、栈的概念
栈在生活中的应用同样随处可见,比如装东西的箱子、袋子等,这些都是一个栈。
二、栈的特征
同样的,我们可以从这些日常物品中找到栈的特征。
想象一个装书本的箱子,你正在往里面放书(那么书本就对应于栈的成员),那么你就得按照以下规则存放:
1、新增成员都存在放当前栈的栈顶。(对应箱子来说,新存放的书每次都在顶部)
2、每次删除操作只能删除当前栈顶成员。(对应箱子来说,从箱子中取书,只能取最上面的一本)
三、栈支持的操作
1、创建一个栈
Stack* StackCreate()
2、栈是否为空栈
bool IsStackEmpty()
3、往栈中添加一个成员
void StackPush()
4、获取栈顶成员
TYPE GetStackTop() // TYPE为栈成员类型
5、从栈中取出一个成员
void StackPop()
四、栈的实现
具体代码如下:
const int StackSize = 15000;
typedef struct {
int *stackArray; // 实现栈的数组
int size; // 栈的大小
int used; // 栈中的元素数量
} Stack;
Stack* StackCreate()
{
Stack *mStack = malloc(sizeof(Stack));
if(mStack == NULL)
{
return NULL;
}
mStack->stackArray = malloc(sizeof(int) * StackSize);
if(mStack->stackArray == NULL)
{
return NULL;
}
mStack->size = StackSize;
mStack->used = 0;
return mStack;
}
bool IsStackFull(Stack *obj)
{
return obj->used == obj->size;
}
bool IsStackEmpty(Stack *obj)
{
return obj->used == 0;
}
void StackPush(Stack* obj, int val)
{
if(IsStackFull(obj))
{
return;
}
obj->stackArray[obj->used] = val; // 存当前入栈值
obj->used++;
}
void StackPop(Stack* obj)
{
if(IsStackEmpty(obj))
{
return;
}
obj->used--;
}
int GetStackTop(Stack* obj)
{
return obj->stackArray[obj->used - 1];
}
void StackFree(Stack* obj)
{
free(obj->stackArray);
free(obj);
}