题目:设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[O…maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计有关结构和操作。
思想:一个栈底在最左侧,另一个栈底在最右侧,判断两个栈的top相减大于1则可以继续操作
代码展示:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct Stack
{
int data[10];
int top;
}Stack;
Stack S;
Stack S1,S2;
void InitStackS1(Stack &S1)
{
S1.top = -1;
}
void InitStackS2(Stack &S2)
{
S2.top = 10;
}
void PushS1(Stack &S1,int e)
{
if(S2.top-S1.top>1)
{
S.data[++S1.top] = e;
}
else
{
printf("栈满");
}
}
void PushS2(Stack &S2,int e)
{
if(S2.top-S1.top>1)
{
S.data[--S2.top] = e;
}
else
{
printf("栈满");
}
}
void PopS1(Stack &S1,int &e)
{
e = S.data[S1.top--];
}
void PopS2(Stack &S2,int &e)
{
e = S.data[S2.top++];
}
void PrintStackS1(Stack S1)
{
while(S1.top>-1)
{
printf("%d ",S.data[S1.top--]);
}
}
void PrintStackS2(Stack S2)
{
while(S2.top<10)
{
printf("%d ",S.data[S2.top++]);
}
}
int main() {
InitStackS1(S1);
InitStackS2(S2);
PushS1(S1,1);PushS1(S1,2);PushS1(S1,1);PushS1(S1,1);PushS1(S1,0);
PushS2(S2,1);PushS2(S2,3);PushS2(S2,1);PushS2(S2,8);PushS2(S2,1);
PrintStackS1(S1);
printf("\n");
PrintStackS2(S2);
return 0;
}