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