一个数组构造两个堆栈

***用一个数组表示两个堆栈,最大限度的利用空间

0 1 2 3

若果像右图中从中间分成两部分,则可能存在其中一个堆栈满了,而另一个堆栈还有空的,为你最大限度的利用空间,需要两边像中间长,知道指针碰头表示堆栈已满

#include<iostream>
using namespace std;
#define Maxsize 100
class stack{
public:
    int a[Maxsize];
    int top1;
    int top2;
};
void push(stack&A, int x, int Tag);
int pop(stack&A, int Tag);
int main(){
    stack A;
    A.top1 = -1; //从数组开头开始长
    A.top2 = Maxsize; //从数组末尾长
    return 0;
}
void push(stack&A, int x, int Tag){
    if (A.top2 - A.top1 == 1) { //这样才能最大限度的利用数组空间
        cout << "堆栈已满";
        return;
    }
    if (Tag == 1) { //Tag==1表示前面一个堆栈
        A.top1++;
        A.a[A.top1] = x;
    }
    else {
        A.top2--;
        A.a[A.top2] = x;
    }
}
int pop(stack&A, int Tag){
    if (Tag == 1) {
        if (A.top1 == -1) {
            cout << "堆栈已空" << endl;
            return 0;
        }
        int l = A.a[A.top1];
        A.top1--;
        return l;
    }
    else {
        if (A.top2 == Maxsize) {
            cout << "堆栈已空" << endl;
            return 0;
        }
        int m = A.a[A.top2];
        A.top1++;
        return m;
    }
}
原文地址:https://www.cnblogs.com/td15980891505/p/4411927.html