#include<stdio.h>
#define MaxSize 10
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int top1;
int top2;
}Shstack;
/* 初始化操作 */
void init(Shstack *stack)
{
stack->top1 = -1;
stack->top2 = MaxSize;
}
/* 销毁操作 */
int destroy(Shstack *stack)
{
stack->top1 = -1;
stack->top2 = MaxSize;
return 1;
}
/* 判空操作 */
int isempty(Shstack stack)
{
return (stack.top1 == -1 && stack.top2 == MaxSize);
}
/* 判满操作 */
int isfull(Shstack stack)
{
return (stack.top1+1 == stack.top2);
}
/* 入栈操作 */
int push(Shstack *stack,int x,int y) //x表示要入栈的值,y表示入哪个栈,取值为1或2
{
if (y==1)
{
if (stack->top1 +1 == stack->top2)
return -1;//栈满,入栈失败
stack->top1 = stack->top1+1;
stack->data[stack->top1] = x;
return 1;
}else{
if (stack->top1 +1 == stack->top2)
return -1;//栈满,入栈失败
stack->top2 = stack->top2 -1;
stack->data[stack->top2] = x;
return 1;
}
}
/* 出栈操作 */
int pop(Shstack *stack,int *x,int y) //x用于接收栈顶元素,y用于指定栈1或栈2
{
if (y==1)
{
if (stack->top1 == -1)//栈1为空
return -1;
*x = stack->data[stack->top1]; //取栈1栈顶元素
stack->top1 = stack->top1 - 1; //指针下移
return 1;
}else{
if (stack->top2 == MaxSize)
return -1;
*x = stack->data[stack->top2+1]; //取栈2栈顶元素
stack->top2 = stack->top2 + 1; //指针上移
return 1;
}
}
/* 取顶操作 */
int pick(Shstack stack,int *x,int y)
{
if(y==1)
{
if (stack.top1 == -1)
return -1;
*x = stack.data[stack.top1];
return 1;
}else{
if (stack.top2 == MaxSize)
return -1;
*x = stack.data[stack.top2+1];
return 1;
}
}
/* 输出操作 */
void dispStack(Shstack stack)
{
printf("栈1中元素为:");
if (stack.top1 == -1)
printf("栈1为空");
else{
for(int i=0;i<=stack.top1;i++)
{
printf("a[%d]=%d \n",i,stack.data[i]);
}
}
printf("栈2中元素为:");
if (stack.top2 == MaxSize)
printf("栈2为空");
else{
for(int i = stack.top2; i<MaxSize;i++)
{
printf("a[%d]=%d \n",i,stack.data[i]);
}
}
}
int main()
{
Shstack stack;
init(&stack);
int flag = 1;
// printf("1.入栈操作\n");
// printf("2.出栈操作\n");
// printf("3.输出操作\n");
// printf("4.判空操作\n");
// printf("5.销毁操作\n");
while (flag!=-1)
{ printf("\n");
printf("--------------------------------工具栏------------------------------------\n");
printf("1.入栈操作\n");
printf("2.出栈操作\n");
printf("3.取顶操作\n");
printf("4.判空操作\n");
printf("5.输出操作\n");
printf("6.销毁操作\n");
printf("7.是否栈满\n");
printf("8.退出\n");
printf("\n");
int a = 0;
int e = 0;
int x = 0;
printf("请选择你的操作:");
scanf("%d",&a);
switch (a)
{
case 1: printf("请输入你入栈的元素: ");
int num = 0;
scanf("%d",&num);
printf("请输入你想入的栈,1或2: ");
int y = 0;
scanf("%d",&y);
if (push(&stack,num,y))
printf("入栈成功!\n");
else
printf("入栈失败,栈满!\n");
break;
case 2: printf("选择你要出的栈,1或2 ");
int y2 = 0;
scanf("%d",&y2);
if (pop(&stack,&e,y2))
printf("出栈成功,栈顶元素为%d\n",e);
break;
case 3: printf("请选择你要取顶的栈,1或2 ");
int y3 = 0;
scanf("%d",&y3);
if(pick(stack,&x,y3))
printf("栈顶元素为:%d\n",x);
else
printf("栈空!\n");
break;
case 4: if (isempty(stack))
printf("栈空\n");
else
printf("栈非空!\n");
break;
case 5: dispStack(stack);break;
case 6: if(destroy(&stack))
printf("销毁成功!\n");
else
printf("销毁失败!\n");
break;
case 7: if(isfull(stack))
printf("栈满");
else
printf("栈非满");
break;
case 8: flag = -1;break;
default: flag = -1;
break;
}
}
}
运行结果如图所示: