C++两栈共享空间
2016-10-08 10:36
459 查看
DouStack:
//两栈共享空间 #include<iostream> using namespace std; typedef int ElemType; #define MAXSIZE 20 struct DouStack { ElemType data[MAXSIZE]; int top1; int top2; }; void InitStack(DouStack *S) { S->top1 = -1; S->top2 = MAXSIZE; } void ClearStack(DouStack *S) { S->top1 = -1; S->top2 = MAXSIZE; } bool IsEmpty(DouStack *S) { if(S->top1==-1 && S->top2==MAXSIZE) { cout<<"栈为空!"<<endl; return true; } else { cout<<"栈为空!"<<endl; return false; } } int LengthStack(DouStack *S) { return (S->top1+1)+(MAXSIZE-S->top2); } void Push(DouStack *S, ElemType *e, int stackNumber) { if(S->top1+1 == S->top2) cout<<"栈已满!"<<endl; if(stackNumber==1) S->data[++S->top1] = *e; else if(stackNumber==2) S->data[--S->top2] = *e; } void Pop(DouStack *S, ElemType *e, int stackNumber) { if(stackNumber==1) { if(S->top1==-1) cout<<"栈1已空!"<<endl; *e = S->data[S->top1--]; } else if(stackNumber==2) { if(S->top2==MAXSIZE) cout<<"栈2已空!"<<endl; *e = S->data[S->top2++]; } } void PrintStack(DouStack *S) { int i = -1; while(i<S->top1) { cout<<S->data[++i]<<" "; } i = S->top2; while(i<MAXSIZE) { cout<<S->data[i++]<<" "; } cout<<endl; } int main() { DouStack S; int e; InitStack(&S); for(int i=1; i<=5; i++) Push(&S, &i, 1); PrintStack(&S); for(int i=MAXSIZE; i>=MAXSIZE-2; i--) Push(&S, &i, 2); PrintStack(&S); cout<<LengthStack(&S)<<endl; Pop(&S,&e,2); cout<<"弹出2的栈顶元素为:"<<e<<endl; IsEmpty(&S); Pop(&S,&e,1); cout<<"弹出1的栈顶元素为:"<<e<<endl; for(int i=6; i<=MAXSIZE-2; i++) Push(&S,&i,1); PrintStack(&S); ClearStack(&S); cout<<LengthStack(&S)<<endl; IsEmpty(&S); return 0; }