Problem1399--Two Stacks In One Array

1399: Two Stacks In One Array

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 0  Solved: 1
[Submit] [Status] [Web Board] [Creator:]

Description

Write routines to implement two stacks using only one array. Your stack routines should not declare an overflow unless every slot in the array is used. Format of functions: Stack CreateStack( int MaxElements ); int IsEmpty( Stack S, int Stacknum ); int IsFull( Stack S ); int Push( ElementType X, Stack S, int Stacknum ); ElementType Top_Pop( Stack S, int Stacknum ); where int Stacknum is the index of a stack which is either 1 or 2; int MaxElements is the size of the stack array; and Stack is defined as the following: typedef struct StackRecord *Stack; struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */ } Note: Push is supposed to return 1 if the operation can be done successfully, or 0 if fails. If the stack is empty, Top_Pop must return ERROR which is defined by the judge program. Sample program of judge: #include #include #define ERROR 1e8 typedef int ElementType; typedef enum { push, pop, end } Operation; typedef struct StackRecord *Stack; struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */ }; Stack CreateStack( int MaxElements ); int IsEmpty( Stack S, int Stacknum ); int IsFull( Stack S ); int Push( ElementType X, Stack S, int Stacknum ); ElementType Top_Pop( Stack S, int Stacknum ); Operation GetOp(); /* details omitted */ void PrintStack( Stack S, int Stacknum ); /* details omitted */ int main() { int N, Sn, X; Stack S; int done = 0; scanf(

Input

where int Stacknum is the index of a stack which is either 1 or 2; int MaxElements is the size of the stack array; and Stack is defined as the following: typedef struct StackRecord *Stack; struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */ }

Output

where int Stacknum is the index of a stack which is either 1 or 2; int MaxElements is the size of the stack array; and Stack is defined as the following: typedef struct StackRecord *Stack; struct StackRecord { int Capacity; /* maximum size of the stack array */ int Top1; /* top pointer for Stack 1 */ int Top2; /* top pointer for Stack 2 */ ElementType *Array; /* space for the two stacks */ }

Sample Input Copy

5
Push 1 1
Pop 2
Push 2 11
Push 1 2
Push 2 12
Pop 1
Push 2 13
Push 2 14
Push 1 3
Pop 2
End

Sample Output Copy

Stack 2 is Empty!
Stack 1 is Full!
Pop from Stack 1: 1
Pop from Stack 2: 13 12 11

Source/Category