#include#define Status int#define STACK_INIT_SIZE 100#define STACKINCREMENT 10using namespace std;typedef struct{ int *base; int *top; int stacksize;}SqStack;Status InitStack(SqStack &S){ S.base=(int*)malloc(STACK_INIT_SIZE*sizeof (int)); if(!S.base) exit(-2); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 1;}Status GetTop(SqStack S,int &e){ if(S.top==S.base) return 0; e=*(S.top-1); return 1;}Status Push(SqStack &S,int e){ if(S.top-S.base>=S.stacksize) { S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base)exit(-2); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 1;}Status Pop(SqStack &S,int &e){ if(S.top==S.base) return 0; e=*--S.top; return 1;}typedef struct QNode{ int data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear;}LinkQueue;Status InitQueue(LinkQueue &Q){ Q.front=Q.rear=(QueuePtr)malloc(sizeof (QNode)); if(!Q.front) exit(-2); Q.front->next=NULL; return 1;}Status DestroyQueue(LinkQueue &Q){ while(Q.front) { Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; } return 1;}Status EnQueue(LinkQueue &Q,int e){ QueuePtr p=(QueuePtr)malloc(sizeof (QNode)); if(!p) exit(-2); p->data=e;p->next=NULL; Q.rear->next=p; Q.rear=p; return 1;}Status DeQueue(LinkQueue &Q,int &e){ QueuePtr p; if(Q.front==Q.rear) return 0; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; free(p); return 1;}int main(){ SqStack S; LinkQueue Q; InitStack(S); int e1=100,e2=101,d,e3; Push(S,e1); Push(S,e2); GetTop(S,d); cout< <