两栈共享空间

(top1的初始值为0,top2的初始值为MAXSIZE-1;)
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20

typedef struct Node
{
    int data[MAXSIZE];
    int top1;
    int top2;
}DoubleSQ;

//typedef struct Node *DoubleSQ;
//压栈
int pushStack(DoubleSQ *s,int num,int flag)
{
        if(s->top1+1!=s->top2)
        {
             if(flag==1)
             {
                 s->data[s->top1]=num;
                 s->top1++;
             }
            else
            {
                s->data[s->top2]=num;
                s->top2--;
            }
            return 1;
        }
        else
            return 0;
}

//出栈
int popStack(DoubleSQ *s,int flag)
{
    if(flag==1)
    {
         if(s->top1==0)
            return -1;
        return s->data[--s->top1];
    }
    else
    {
        if(s->top1==0&&s->top2==MAXSIZE-1)
            return -1;
        return s->data[++s->top2];
    }

}

void putStack(DoubleSQ *s)
{
    printf("stack1:\n");
    int i;
    for(i=0;i<s->top1;i++)
        printf("%d ",s->data[i]);
    printf("\nstack2:\n");
    for(i=MAXSIZE-1;i>s->top2;i--)
        printf("%d ",s->data[i]);
}

int StackEmpty(DoubleSQ * s)
{
    if(0==s->top1&&MAXSIZE-1==s->top2)
        return 1;
    else
        return 0;
}

int getTop(DoubleSQ *s,int flag)
{
    if(flag==1&&s->top1!=0)
    {
        return s->data[s->top1-1];
    }
    else if(flag==2&&s->top2!=0)
    {
        return s->data[s->top2+1];
    }
    else
        return -1;
}

int StackLength(DoubleSQ *s,int flag)
{
    return (flag==1)?s->top1:s->top2;
}
int main()
{
    DoubleSQ * Stack;
    Stack = (DoubleSQ *)malloc(sizeof(struct Node));
    Stack->top1=0;Stack->top2=MAXSIZE-1;

    pushStack(Stack,7,1);
    pushStack(Stack,8,1);
    putStack(Stack);


    pushStack(Stack,9,2);
    pushStack(Stack,10,2);
    putStack(Stack);

    printf("\nStackLength: %d \n",StackLength(Stack,1));

    printf("\ngetTop: %d \n",getTop(Stack,1));
    printf("\ngetTop: %d \n",getTop(Stack,2));

    printf("\npopStack: %d \n",popStack(Stack,1));
    printf("\npopStack: %d \n",popStack(Stack,1));
    printf("\npopStack: %d \n",popStack(Stack,1));
    printf("\npopStack: %d \n",popStack(Stack,2));

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值