您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: