两栈共享实现
两栈共享实现
#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; } } }

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号