///////////////////队列的实现之链式存储///////////////////////////////////////////////////

#include<cstdio>

#include<iostream>


using namespace std;


#define MAXN  10005

#define Item int


typedef struct data

{

Item e;

data *next;

data()

{

next=NULL;

}

}queue;


queue *front,*rear;


void init()//队列的初始化

{

front=rear=NULL;

}


bool empty()//判断队列是否为空

{

if(front==NULL)

{

return true;

}

return false;

}


Item Pop()//出队列

{

if(empty())//队列为空

{

return -1;

}

data *del=front;

if(front==rear)

front=rear=NULL;

else

front=front->next;

Item p=del->e;

delete del;

return p;

}

bool Insert(Item p)//入队列

{

queue *ins=new data();

if(ins==NULL)

return false;

ins->e=p;

if(rear==NULL)

front=rear=ins;

else

{

rear->next=ins;

rear=ins;

}

return true;

}


int main()

{

Item x;

init();

while(scanf("%d",&x)==1)

{

if(x==-1)

{

printf("%d\n",Pop());

}

else

{

Insert(x);

}

}

return 0;

}

////////////////////队列实现之顺序存储///////////////////////////////////////////////////

#include<cstdio>

#include<iostream>


using namespace std;


#define MAXN  10005

#define Item int


Item queue[MAXN];

int front,rear;

void init()//队列的初始化

{

front=0;

rear=0;

}


bool empty()//判断队列是否为空

{

if(front==rear)

{

return true;

}

return false;

}


Item Pop()//出队列

{

if(empty())

{

return -1;

}

else

{

return queue[front++];

}

}


bool Insert(Item p)//入队列

{

if(rear<MAXN)

{

queue[rear++]=p;

return true;

}

return false;

}


int main()

{

Item x;

init();

while(scanf("%d",&x)==1)

{

if(x==-1)

{

printf("%d\n",Pop());

}

else

{

Insert(x);

}

}

return 0;

}

/////////栈实现之链式存储//////////////////////////////////////////////

#include<cstdio>

#include<iostream>


using namespace std;


#define MAXN  10005

#define Item int


typedef struct data

{

Item e;

data *next;

data()

{

next=NULL;

}

}stack;


stack *top;


void init()//栈的初始化

{

top=NULL;

}


bool empty()//栈的判空

{

return top==NULL;

}


bool Push(Item p)//入栈

{

stack *ins=new data();

if(ins==NULL)

return false;

ins->e=p;

ins->next=top;

top=ins;

return false;

}


Item Pop()//出栈

{

if(empty())//栈空不能出栈

{

return -1;

}

data *del=top;

top=top->next;

Item p=del->e;

delete del;

return p;

}

int main()

{

Item x;

init();

while(scanf("%d",&x)==1)

{

if(x==-1)

{

printf("%d\n",Top());

}

else

{

Push(x);

}

}

return 0;

}

//////////////////////////栈实现之顺序存储///////////////////////////////////////////////

#include<cstdio>

#include<iostream>


using namespace std;


#define MAXN  10005

#define Item int


Item stack[MAXN];

int top;


void init()//栈的初始化

{

top=0;

}


bool empty()//栈的判空

{

return top==0;

}


bool Push(Item p)//入栈

{

if(top<MAXN)

{

stack[top++]=p;

return true;

}

return false;

}


Item Top()//出栈

{

if(empty())//栈空不能出栈

{

return -1;

}

return stack[--top];

}

int main()

{

Item x;

init();

while(scanf("%d",&x)==1)

{

if(x==-1)

{

printf("%d\n",Top());

}

else

{

Push(x);

}

}

return 0;

}