两栈共享实现

作者:@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;
}

}
}

 
复制代码

 

posted @   kuaiquxie  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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 热点速览」
点击右上角即可分享
微信分享提示