定义一个栈
顺序栈的存储结构:
| #define MAXSIZE 20 |
| typedef int ElemType; |
| typedef struct { |
| ElemType data[MAXSIZE]; |
| int top; |
| }SqStack; |
通常更简单的做法是在主函数中直接定义一个数组用作栈,并定义一个整数 top,始终指向栈顶元素的上一个位置,同时 top 也等于栈中元素的个数。
| #define MAXSIZE 20 |
| typedef int ElemType; |
| int main(void) { |
| |
| ElemType SqStack[MAXSIZE]; |
| int top = 0; |
| |
| return 0; |
| } |
入栈
入栈仅需一条语句:
| #include <stdio.h> |
| |
| #define MAXSIZE 20 |
| |
| typedef int ElemType; |
| |
| |
| void Push(ElemType* SqStack, int* top) { |
| printf("请输入入栈元素的值:"); |
| ElemType e; |
| scanf("%d", &e); |
| SqStack[(*top)++] = e; |
| } |
| |
| |
| void Print(ElemType* SqStack, int top) { |
| if (top == 0) |
| printf("栈为空\n"); |
| else { |
| for (int i = 0; i < top; i++) { |
| printf("%d ", SqStack[i]); |
| } |
| } |
| } |
| |
| int main(void) { |
| |
| ElemType SqStack[MAXSIZE]; |
| int top = 0; |
| Print(SqStack, top); |
| Push(SqStack, &top); |
| Print(SqStack, top); |
| |
| return 0; |
| } |
执行结果:
出栈
当不需要栈顶元素时:
当需要栈顶元素时:
| ElemType e = SqStack[--top]; |
| #include <stdio.h> |
| |
| #define MAXSIZE 20 |
| |
| typedef int ElemType; |
| |
| |
| void Push(ElemType* SqStack, int* top) { |
| printf("请输入入栈元素的值:"); |
| ElemType e; |
| scanf("%d", &e); |
| SqStack[(*top)++] = e; |
| } |
| |
| |
| void Pop(ElemType* SqStack, int* top, ElemType* e) { |
| *e = SqStack[--(*top)]; |
| } |
| |
| |
| void Print(ElemType* SqStack, int top) { |
| if (top == 0) |
| printf("栈为空\n"); |
| else { |
| for (int i = 0; i < top; i++) { |
| printf("%d ", SqStack[i]); |
| } |
| } |
| } |
| |
| int main(void) { |
| |
| ElemType SqStack[MAXSIZE]; |
| int top = 0; |
| Print(SqStack, top); |
| Push(SqStack, &top); |
| Print(SqStack, top); |
| ElemType e; |
| Pop(SqStack, &top, &e); |
| printf("\n出栈元素:%d\n", e); |
| Print(SqStack, top); |
| |
| return 0; |
| } |
执行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术