***用一个数组表示两个堆栈,最大限度的利用空间
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;
}
}