栈原理及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);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端