目录
一、堆栈的结构体定义
二、堆栈的操作
1.创建一个空栈
2.栈满与栈空判断
3.入栈操作
4.出栈操作
一、堆栈的结构体定义
//重命名,可根据不同的存储元素随时更改
typedef int ElementType;
typedef int Position;
typedef struct SNode *PtrToNode;
struct SNode{
Position top;//确定栈顶位置
ElementType *data;//利用数组存储元素
int MaxSize;//栈容量
};
typedef PtrToNode Stack;
二、堆栈的操作
1.创建一个空栈
// 创建堆栈
Stack CreateStack(int MaxSize){
Stack S = (Stack)malloc(sizeof(struct SNode));
S->data = (ElementType*)malloc(sizeof(ElementType) * MaxSize);//申请元素内存空间
S->top = -1;//初始化栈顶位置
S->MaxSize = MaxSize;//初始化栈容量
return S;
}
2.栈满与栈空判断
// 判断栈满
bool IsFull(Stack S){
return (S->top == S->MaxSize - 1);
}
// 判断栈空
bool IsEmpty(Stack S){
return (S->top == -1);
}
3.入栈操作
// ERROR通过define自定义,设定ERROR值为-1
// 入栈
bool Insert(Stack S, ElementType data){
if(!IsFull(S)){
S->data[++(S->top)] = data;
printf("%d", S->top);
return true;
}
else{
printf("栈满!!!");
return ERROR;
}
}
4.出栈操作
// 出栈
ElementType Pop(Stack S){
if(!IsEmpty(S)){
return S->data[(S->top)--];
}
else{
printf("栈空!!!");
return ERROR;
}
}
全部代码如下:
#include
#include
#include
#define ERROR -1
typedef int ElementType;
typedef int Position;
typedef struct SNode *PtrToNode;
struct SNode{
Position top;
ElementType *data;
int MaxSize;
};
typedef PtrToNode Stack;
// 创建堆栈
Stack CreateStack(int MaxSize){
Stack S = (Stack)malloc(sizeof(struct SNode));
S->data = (ElementType*)malloc(sizeof(ElementType) * MaxSize);
S->top = -1;
S->MaxSize = MaxSize;
return S;
}
// 判断栈满
bool IsFull(Stack S){
return (S->top == S->MaxSize - 1);
}
// 判断栈空
bool IsEmpty(Stack S){
return (S->top == -1);
}
// 出栈
ElementType Pop(Stack S){
if(!IsEmpty(S)){
return S->data[(S->top)--];
}
else{
printf("栈空!!!");
return ERROR;
}
}
// 入栈
bool Insert(Stack S, ElementType data){
if(!IsFull(S)){
S->data[++(S->top)] = data;
printf("%d", S->top);
return true;
}
else{
printf("栈满!!!");
return ERROR;
}
}
int main(){
int MaxSize;
scanf("%d", &MaxSize);
Stack S = CreateStack(MaxSize);
ElementType data;
// 入栈
while(1){
scanf("%d", &data);
if(!IsFull(S)){
Insert(S, data);
}
else{
printf("栈满,无法入栈!!!");
break;
}
}
// 出栈
while(1){
// 注意,堆栈元素中不能出现-1,如果出现,那么出栈之后将进入下面if判断从而跳出循环!!!
ElementType res = Pop(S);
if(res == ERROR){
break;
}
else{
printf("%d ", res);
}
}
return 0;
}
如有错误,欢迎批评指正!!!
- 《寒灵之剑》2025盛夏冰霜试炼:勇者集结挑战极寒魔境赢限定神装 活动详情 活动时间:2025年7月19日00:00 - 2025年8月2日23:59(共14天) 参与条件:角色等级≥50级,完成主线任务【冰封王座的呼唤】 活动内...
- 火影忍者终极风暴羁绊多少钱 游戏各版本价格一览今年2月份万代就公布了火影忍者系列最新作终极风暴羁绊,同时也给出了具体的上线时间,将在今年的11月中旬上线。这时就有一些玩家想知道...
- 螺丝太紧卸不掉怎么办,螺丝太紧的解决办法答电竞桌搬运时,若不注意很容易 桌面划伤、支架变形或电机损坏。下面我给你整理一份详细的搬运指南,按步骤和注意事项讲清楚:一、拆卸...
- 火影忍者ONLINE:忍者大乱斗——忍者节狂欢活动 亲爱的火影忍者ONLINE玩家: 为了庆祝忍者节,我们特别推出了火影忍者ONLINE:忍者大乱斗——忍者节狂欢活动!活动将于2025年5月9日正式开启...
- 成语小夫子:智慧与趣味的成语挑战赛 活动名称:成语小夫子:智慧与趣味的成语挑战赛 活动时间:2025年5月17日开始,持续一个月 活动地点:线上游戏平台及线下体验点 活动详情...
- 婧璃缘起2025春季庆典:探索神秘古境,赢取稀有奖励亲爱的玩家们,我们很高兴地宣布,《婧璃缘起》2025春季庆典活动将于2025年5月12日正式开启!本次活动将持续两周,至2025年5月26日结束。在这...
- FIFA足球经理2025全球挑战赛:缔造绿茵传奇的荣耀之路与策略巅峰对决 活动时间 2025年6月6日 10:00 - 2025年6月20日 22:00(UTC+8) 活动内容 全球联赛模式:以真实球员数据为基础,组建你的终极球队,通过战术模拟+实...
- 《圣树之光》2025盛夏庆典:跨越时空的圣树守护者集结令! 活动详情 活动时间:2025年6月11日 10:00 - 2025年6月25日 23:59 🌳 圣树觉醒仪式 活动期间,所有玩家每日登录可领取"远古圣露"×3,用于浇灌世...
- 《贪婪洞窟》2025年夏季探险狂欢节:无尽宝藏与神秘挑战等你来战!亲爱的《贪婪洞窟》探险家们,准备好迎接2025年夏季最盛大的冒险活动了吗?从2025年6月27日开始,我们将开启为期两周的“无尽宝藏与神秘挑...
- 玫瑰骑士团:2025年盛夏玫瑰庆典与骑士荣耀之战亲爱的玫瑰骑士团玩家们,我们诚挚地邀请您参加2025年7月5日盛大开启的玫瑰骑士团盛夏庆典活动!本次活动将持续两周,至2025年7月19日结束。...