一个数组构造两个堆栈

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

0123

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

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值