#include<stdio.h>
#define STICKSIZE 100
typedef int DataType ;
typedef struct
{
DataType stick[STICKSIZE];
int top1;
int top2;
}ShareStick;
void initStick(ShareStick * ss);
int getTop(ShareStick * ss,int number,DataType * element);
int pushStick(ShareStick * ss,int number, DataType element);
int popStick(ShareStick * ss, int number, DataType * element);
int isEmpty(ShareStick * ss, int number);
void initStick(ShareStick * ss)
{
ss->top1 = -1;
ss->top2 = STICKSIZE;
return ;
}
int getTop(ShareStick * ss,int number,DataType * element)
{
if( 1 == number)
{
if(-1 == ss->top1)
return 0;
else
{
*element = ss->stick[ss->top1];
return 1;
}
}
else if( 2 == number)
{
if(STICKSIZE == ss->top2)
return 0;
else
{
*element = ss->stick[ss->top2];
return 1;
}
}
}
int pushStick( ShareStick * ss,int number, DataType element)
{
if( 1 == number)
{
if(STICKSIZE-1 == ss->top1)
return 0;
else
{
ss->top1++;
ss->stick[ss->top1] = element;
return 1;
}
}
else if( 2 == number)
{
if(0 == ss->top2)
return 0;
else
{
ss->top2--;
ss->stick[ss->top2] = element;
return 1;
}
}
}
int popStick(ShareStick * ss, int number, DataType * element)
{
if( 1 == number)
{
if(-1 == ss->top1)
return 0;
else
{
*element = ss->stick[ss->top1];
ss->top1--;
return 1;
}
}
else if( 2 == number)
{
if(STICKSIZE == ss->top2)
return 0;
else
{
*element = ss->stick[ss->top2];
ss->top2++;
return 1;
}
}
}
int isEmpty(ShareStick * ss, int number)
{
if( 1 == number)
{
if(-1 == ss->top1)
return 1;
else
return 0;
}
else if( 2 == number)
{
if(STICKSIZE == ss->top2)
return 1;
else
return 0;
}
}
int main(void)
{
int i;
ShareStick ss;
DataType element;
initStick(&ss);
DataType a[] = {10,20,30,40,50,60};
DataType b[] = {100,200,300,400,500,600};
for( i = 0;i<sizeof(a)/sizeof(a[0]);i++)
{
if(!pushStick(&ss,1,a[i]))
{
printf("栈1已满,无法继续进栈!\n");
return 0;
}
}
for( i = 0;i<sizeof(b)/sizeof(b[0]);i++)
{
if(!pushStick(&ss,2,b[i]))
{
printf("栈2已满,无法继续进栈!\n");
return 0;
}
}
if( getTop(&ss,1,&element))
{
printf("栈1的栈顶元素为:");
printf("%2d\n",element);
}
if( getTop(&ss,2,&element))
{
printf("栈2的栈顶元素为:");
printf("%2d\n",element);
}
printf("栈1的弹栈序列为:");
while(!isEmpty(&ss,1))
{
if(!popStick(&ss,1,&element))
{
printf("栈1为空,无法继续弹栈!\n");
return 0;
}
printf("%4d",element);
}
printf("\n");
printf("栈2的弹栈序列为:");
while(!isEmpty(&ss,2))
{
if(!popStick(&ss,2,&element))
{
printf("栈2为空,无法继续弹栈!\n");
return 0;
}
printf("%4d",element);
}
printf("\n");
return 0;
}