[数据结构]——栈的实现(初始化销毁入栈出栈记录数据总数判断栈是否为空获取栈顶数据)
Posted FortunateJA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构]——栈的实现(初始化销毁入栈出栈记录数据总数判断栈是否为空获取栈顶数据)相关的知识,希望对你有一定的参考价值。
Stack.h
#pragma onece
#include <stdio.h>
#include <assert.h>
typedef int STDataType;
typedef struct Stack
{
STDataType *a;
int top;
int capacity;
}Stack;
void StackInit(Stack *pst); //初始化
void StackDestory(Stack *pst); //销毁
void StackPush(Stack *pst, STDataType x); //插入数据
void StackPop(Stack *pst); //删除数据
int StackSize(Stack *pst); //记录实际数据个数
int StackEmpty(Stack *pst); //判断栈是否为空(是空返回1 非空返回0)
STDataType StackTop(Stack *pst); //获取栈顶数据
Stack.c
#include "Stack.h"
void StackInit(Stack *pst) //初始化
{
assert(pst);
pst->a = (STDataType *)malloc(sizeof(STDataType)* 4);
if (pst->a == NULL)
{
printf("malloc fail\\n");
exit(-1);
}
pst->capacity = 4;
pst->top = 0;
}
void StackDestory(Stack *pst) //销毁
{
assert(pst);
free(pst->a); //释放 置空 置零
pst->a = NULL;
pst->top = pst->capacity = 0;
}
void StackPush(Stack *pst, STDataType x) //插入数据
{
assert(pst);
if (pst->top == pst->capacity) //栈满
{
STDataType *tmp = realloc(pst->a, pst->capacity * 2 * sizeof(STDataType));
if (tmp == NULL)
{
printf("realloc fail\\n");
exit(-1);
}
pst->a = tmp;
pst->capacity = pst->capacity * 2; //扩容后记得修改capacity的数值
}
pst->a[pst->top] = x;
pst->top++;
}
void StackPop(Stack *pst) //删除数据
{
assert(pst);
assert(!StackEmpty(pst)); //判断栈是否为空
--pst->top;
}
int StackSize(Stack *pst) //记录实际数据个数
{
assert(pst);
return pst->top;
}
int StackEmpty(Stack *pst) //判断栈是否为空(是空返回1 非空返回0)
{
assert(pst);
return pst->top == 0 ? 1 : 0; //注意:判断是否相等为双等号
}
STDataType StackTop(Stack *pst) //获取栈顶数据
{
assert(pst);
assert(!StackEmpty(pst)); //判断是否为空,为空不能取
return pst->a[pst->top-1]; //top记录栈的顶部在哪,获取栈顶数据应从数组中取出
}
Test.c
#include "Stack.h"
int main()
{
Stack S;
StackInit(&S);
StackPush(&S, 1);
StackPush(&S, 2);
StackPush(&S, 3);
StackPush(&S, 4);
while (!StackEmpty(&S))
{
printf("%d ", StackTop(&S)); //StackTop函数有参数,不要忘记
StackPop(&S);
}
printf("\\n");
StackDestory(&S);
return 0;
}
测试结果
以上是关于[数据结构]——栈的实现(初始化销毁入栈出栈记录数据总数判断栈是否为空获取栈顶数据)的主要内容,如果未能解决你的问题,请参考以下文章
[数据结构]——栈的实现(初始化销毁入栈出栈记录数据总数判断栈是否为空获取栈顶数据)
[数据结构]——栈的实现(初始化销毁入栈出栈记录数据总数判断栈是否为空获取栈顶数据)