栈的基本操作
栈的顺序存储结构
缺点:要设置栈存储的最大值
顺序栈的实现
#include "iostream" #define MaxSize 50 //栈的结构体 struct Stack{ int data[MaxSize]; int top; }stack; //初始化栈 void init(){ stack.top = -1; } //判断是否栈空 bool isEmpty(){ if (stack.top == -1){ printf("栈空\n"); return true; } return false; }; //判断是否栈满 bool isFull(){ if (stack.top == MaxSize - 1){ printf("栈满\n"); return true; } return false; }; //入栈 int push(int num){ if (!isFull()){ stack.top = stack.top + 1; stack.data[stack.top] = num; } return -1; //当栈满的时候返回-1 } //出栈 int pop(){ if (!isEmpty()){ stack.top = stack.top - 1; return stack.data[stack.top + 1]; } return -1; //当栈空的时候返回-1 } int main(){ init(); //入栈 for (int i = 1; i <=5; i++){ push(i); } //出栈,调用一次出栈一次 pop(); printf("%d\n", pop()); }
共享栈
优点:更有效的利用存储空间,两个栈的空间相互调节
栈的链式存储结构
栈链
优点:不存在栈满上溢的情况
#include "iostream" struct Stack{ Stack *next; int data; }stack; //判断栈是否为空 bool isEmpty(Stack *top){ if (top == NULL){ printf("栈空\n"); return true; } else{ return false; } } //入栈 Stack *push(Stack *top, int num){ Stack *s = (Stack *) malloc(sizeof (Stack)); s -> data = num; s -> next = top; top = s; return top; } //出栈 Stack *pop(Stack *top){ if (!isEmpty(top)){ printf("%d\n", top -> data); top = top -> next; return top; } } int main(){ Stack *top = (Stack *) malloc (sizeof (Stack)); top = NULL; //入栈 for (int i = 1; i <=2; i++){ top = push(top, i); } //出栈 top = pop(top); top = pop(top); top = pop(top); }
本文作者:MiYol
本文链接:https://www.cnblogs.com/miyol/p/16734094.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步