二栈共享空间静态储存简例

#include<stdio.h>

#define MAX 10

#define FAIL -999999


typedef int Elem;
typedef struct {
    Elem date[MAX];
    int top1;
    int top2;
} Stack;
//top1 attach num=0,top2 attach num=1
void initialStack(Stack *s);
int isEmpty(Stack *s);
int isFull(Stack *s);
int push(Stack *s,int num,Elem e);
Elem pop(Stack *s,int num);

void showStack(Stack *s,int num);


int main(void)
{
    Stack s;
    int i;

    initialStack(&s);
    for ( i=0; i < 20; ++i){
        if(i&1)
            push(&s,0,(Elem)(i));
        else
            push(&s,1,(Elem)(i));
    }
    pop(&s,1);pop(&s,0);
    pop(&s,1);
    showStack(&s,0);puts("");showStack(&s,1);
}

void initialStack(Stack *s)
{
    s->top1 = -1;
    s->top2 = MAX;
}

int isEmpty(Stack *s)
{
    if(s->top1<0 && s->top2==MAX)//stack1 and stack2 both empty
        return 2;
    if(s->top1<0 && s->top2<MAX)//stack1 empty but stack2 isn't
        return 0;
    if(s->top1>0 && s->top2==MAX)
        return 1;
    return -1;

}

int isFull(Stack *s)
{
    if(s->top1+1 == s->top2)
        return 1;
    return 0;
}

int push(Stack *s, int num, Elem e)
{
    if(num>1||num<0)
        return 0;
    if (isFull(s))
        return 0;
    if(num)//if num equals 1,then push in stack2,otherwise push in stack1
        s->date[--s->top2] = e;
    else
        s->date[++s->top1] = e;
    return 1;
}

Elem pop(Stack *s,int num)
{
    if (num>1||num<0)
        return FAIL;
    int k = isEmpty(s);
    if(k!= num && k!=2) {
        if(num)
            return s->date[s->top2++];
        return s->date[s->top1--];
    }
    return FAIL;
}

void showStack(Stack *s,int num)
{
    int i;
    if(num)
        for(i = s->top2; i<MAX; ++i)
            printf("%d ",s->date[i]);
    else
        for(i = s->top1; i>=0; --i)
            printf("%d ",s->date[i]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值