共享栈

#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};

    //将数组a中的元素依次进到栈1中
    for( i = 0;i<sizeof(a)/sizeof(a[0]);i++)
    {
        if(!pushStick(&ss,1,a[i]))
        {
            printf("栈1已满,无法继续进栈!\n");
            return 0;
        }
    }

    //将数组b中的元素依次进到栈1中
    for( i = 0;i<sizeof(b)/sizeof(b[0]);i++)
    {
        if(!pushStick(&ss,2,b[i]))
        {
            printf("栈2已满,无法继续进栈!\n");
            return 0;
        }
    }

    //分别打印栈1和栈2的栈顶元素
    if( getTop(&ss,1,&element))
    {
        printf("栈1的栈顶元素为:");
        printf("%2d\n",element);
    }

    if( getTop(&ss,2,&element))
    {
        printf("栈2的栈顶元素为:");
        printf("%2d\n",element);
    }

    //将栈1的元素都弹出,并打印弹栈的元素序列
    printf("栈1的弹栈序列为:");
    while(!isEmpty(&ss,1))
    {
        if(!popStick(&ss,1,&element))//弹栈;
        {
            printf("栈1为空,无法继续弹栈!\n");
            return 0;
        }
        printf("%4d",element);//打印弹栈的元素
    }

    //将栈2的元素都弹出,并打印弹栈的元素序列
    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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值