共享栈
代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define M 20
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct //定义数据类型
{
ElemType *elem;
int top1,top2;
}sharedstack;
int menu() //菜单
{
int i;
printf("==========共享栈==========\n");
printf("=======1.初始化共享栈=====\n");
printf("=======2.共享栈入栈=======\n");
printf("=======3.共享栈出栈=======\n");
printf("=======4.求栈深度=========\n");
printf("=======5.清空栈元素=======\n");
printf("请输入您的选择(1--5):");
scanf("%d",&i);
return i;
}
int initshared(sharedstack *S) //初始化共享栈
{
S->top1=-1;
S->top2=M;
return OK;
}
int push(sharedstack *S,int e,int i) //元素进栈
{
if(S->top1+1==S->top2)
return ERROR;
switch(i)
{
case 1:S->top1++;
S->elem[S->top1]=e;
break;
case 2:S->top2--;
S->elem[S->top2]=e;
break;
default:
return ERROR;
}
return OK;
}
int pop(sharedstack *S,int *e,int i) //元素出栈
{
switch(i)
{
case 1:
{
if(S->top1==-1)
return ERROR;
*e=S->elem[S->top1];
S->top1=S->top1--;
break;
}
case 2:
{
if(S->top2==M)
return ERROR;
*e=S->elem[S->top2];
S->top2=S->top2++;
break;
}
default:
return ERROR;
}
}
int stackdepth(sharedstack *S,int i) //求共享栈的深度
{
switch(i)
{
case 1:system("cls");
return S->top1+1;
break;
case 2:system("cls");
return M-S->top2;
default:
return ERROR;
}
}
int main()
{
sharedstack *S;
int b,a,i,*e;
while(1)
{
a=menu();
switch(a)
{
case 1:system("cls");
b=initshared(&S);
if(b==1)
printf("初始化成功\n");
else
printf("初始化未成功\n");
break;
case 2:system("cls");
printf("请输入元素的值为和选择的号位栈为:");
scanf("%d %d",&e,&i);
b=push(&S,e,i);
if(b==1)
printf("输入成功\n");
else
printf("输入未成功\n");
break;
case 3:system("cls");
b=pop(&S,&e,i);
printf("请选择输出的号位栈为:");
scanf("%d",&i);
if(b==1)
printf("输出成功\n");
else
printf("输出未成功\n");
printf("输出元素的值为:%d",e);
break;
case 4:system("cls");
b=stackdepth(&S,i);
printf("您选择的%d号位栈的深度为%d\n",i,b);
break;
}
}
return 0;
}