用两个栈实现队列,支持队列的基本操作。
实现基本思路是:对栈做两次压入(push)操作,第一次压栈是先入后出的操作,比如1,2,3,4,5,6,如栈后按照入栈顺序由栈顶到栈底部为6,5,4,3,2,1,第二次对入栈的数字,再次push,顺序由从栈顶到栈底为1,2,3,4,5,6,最后对栈pop,出栈顺序为1,2,3,4,5,6.从第一次入栈到出栈,模拟队列,实现先进先出的顺序。
datatype get_stack_data(lstack *ls)
{
struct node * inode;
inode=ls->top;
ls->top=inode->next;
return inode->data;
}
int two_stack_be_queue()
{
lstack * stack push ,*stackpop;
int i;
datatype data;
stackpush=malloc(sizeof(*stackpush));
if(!stackpush)
return -1;
stackpop=malloc(sizeof(*stackpop));
if(!stackpop)
return -1;
stackpush->top=stackpop->top=NULL;
/***be push stack onece **/
for(i=0;i<num;i++)
{
stackpush=push_stack(stackpush,i);
}
/**be push stack two**/
for (i=0;i<num,i++)
{
data=get_stack_data(stackpush);
stackpop=push_stack(stackpop,data);
}
/**be queue pop*/
while(stackpop->top!=NULL)
{
data=pop_stack(stackpop);
}
if(stackpop&&stackpush)
{
free(stackpop);
free(stackpush);
}
return 0;
}