两栈共享实现
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/15318373.html
两栈共享实现
#include <stdio.h> #define MAXSIZE 100 typedef int SElemType; typedef struct{ SElemType data[MAXSIZE]; int top1; //栈1栈顶指针 int top2; //栈2栈顶指针 }Sq; //入栈 int push(Sq* S, int stackNum, SElemType e){ if(S->top1+1 == S->top2) //栈满 return 0; if(stackNum == 1){ S->data[++S->top1] = e; }else{ S->data[--S->top2] = e; } return 1; } //出栈 int pop(Sq* S, int stackNum, SElemType *e){ if(stackNum == 1){ if(S->top1 == -1){ //栈空 return 0; } *e = S->data[S->top1--]; return 1; }else{ if(S->top2 == MAXSIZE){ //栈空 return 0; } *e = S->data[S->top2++]; return 1; } } //返回栈顶元素 SElemType getTop(Sq* S, int stackNum, SElemType* e){ if(stackNum == 1){ if(S->top1 == -1){ //栈空 return 0; } *e = S->data[S->top1]; return 1; }else{ if(S->top2 == MAXSIZE){ //栈空 return 0; } *e = S->data[S->top2]; return 1; } } // 栈空 bool stackEmpty(Sq* S, int stackNum){ if(stackNum == 1){ if(S->top1 == -1) return true; return false; }else{ if(S->top2 == MAXSIZE) return true; return false; } } //栈满 bool stackFull(Sq* S){ if(S->top1+1 == S->top2) return true; return false; } int main(){ bool Flag = true; SElemType popNum, pushNum; Sq doubleStack, *S = &doubleStack; doubleStack.top1 = -1; doubleStack.top2 = MAXSIZE; int stackNum; int function; printf("输入功能:\n"); scanf("%d",&function); while(Flag){ switch(function){ //入栈 case 1: printf("选择栈(1或2):\n"); scanf("%d", &stackNum); printf("请输入要入栈的元素:\n"); scanf("%d", &pushNum); if(push(S, stackNum, pushNum)) printf("入栈成功!\n"); else printf("入栈失败!\n"); break; //出栈 case 2: printf("选择栈(1或2):\n"); scanf("%d", &stackNum); if(pop(S, stackNum, &popNum)) printf("出栈元素:%d\n",popNum); else printf("栈空!\n"); break; //返回栈顶元素 case 3: printf("选择栈(1或2):\n"); scanf("%d", &stackNum); if(getTop(S, stackNum, &popNum)) printf("栈顶元素:%d!\n",popNum); else printf("栈空!\n"); break; //栈满 case 4: if(stackFull(S)) printf("栈满!\n",popNum); else printf("栈不满!\n"); break; //退出 case 5: Flag = false; printf("已退出\n"); break; default: printf("功能不存在!\n"); break; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」