使用一个数组实现两个堆栈

/*
使用一个数组实现两个堆栈,要求最大的利用数组空间,使数组只要有空间入栈操作就可以 成功

分析:一种比较聪明的方法是使这两个栈分别从数组
两头开始向中间生长,当两个栈的栈顶指针相遇,表示栈满
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int MaxSize = 1e3;
struct Dstack{
    int Data[MaxSize];
    int top1,top2;
} S;

void Push(struct Dstack *Ptrs,int item,int tag){
    if(Ptrs->top2-Ptrs->top1==1){
        printf("堆栈满了\n");return;
    }
    if(tag==1)
        Ptrs->Data[++(Ptrs->top1)]=item;
    else
        Ptrs->Data[--(Ptrs->top2)]=item;

}
int pop(struct Dstack *Ptrs,int tag){
    if((tag&&Ptrs->top1==-1)||((!tag)&&Ptrs->top2==MaxSize)){
        printf("栈空\n");return NULL;
    }
    if(tag){
        return Ptrs->Data[(Ptrs->top1)--];
    }
    else
        return Ptrs->Data[(Ptrs->top2)++];
}
int main()
{
    int item,flag;
    S.top1=-1;
    S.top2=MaxSize;
    for(int i=0;i<5;i++){
        scanf("%d%d",&item,&flag);
        Push(&S,item,flag);
    }
    for(int i=0;i<5;i++){
        scanf("%d",&flag);
        printf("%d\n",pop(&S,flag));
    }
    return 0;
}

 

posted on 2016-09-28 19:43  acmtime  阅读(2073)  评论(0编辑  收藏  举报

导航