用队列实现栈与用栈实现队列(c语言版)

用队列实现栈
push时只要queue1不为空就向queue1中进元素,为空就向queue2进元素
pop时只要nonempty大于1个元素就将nonempty的元素弹到empty中去,最后一个为要pop的
1.对于myStackCreate函数,即将这个stack进行初始化,只需要

MyStack*obj=(MyStack*)malloc(sizeof(MyStack));

再将这个自定义栈里面的两个队列置空

obj->q1=NULL;
obj->q2=NULL;

即可
2.myStackPush函数
只要obj->queue1不为空,就向queue1中放入元素

if(!queueempty(&obj->queue1)) 
queuepush(&obj->queue1,x)

如果obj->queue1为空,就向queue2中放入元素

else queuepush(&obj->queue2,x);

3.myStackPop函数
让empty这个指针指向obj->queue1
让nonempty这个指针指向obj->queue2
但如果obj->queue1不为空
那就让nonempty指向obj->queue1,而empty指向obj->queue2;
只要nonempty的元素个数大于1,那么就将nonempty的元素出队列到empty中去
只到只剩下这一个元素,这一个元素就是所要pop的元素

queue*empty=obj->queue1;
queue*nonempty=obj->queue2;
if(!queueempty(&obj->queue1)){empty=queue2;
nonempty=queue1;
empty=queue2;
}

4.myStackTop函数
只要queue1不为空,就返回obj->queue1队尾的元素,为空返回obj->queue2队尾的元素

if(!queueempty(obj->queue1)) return queueback(&obj->queue1);
else return  queueback(&obj->queue2);

5.myStackEmpty函数
只需将两个队列queueempty即可
queueempty(&obj->q1)&&queueempty(&obj->q2);
6.myStackFree
直接free(obj)即可

用栈实现队列
需要用到两个栈,一个栈记为popstack,一个记作pushstack
1.myQueuePush函数
直接将数据压入pushstack中即可
2.myQueuePeek函数
如果popstack这个栈不为空,那么就将pushstack的元素全部转移到popstack中去,

if(!stackempty(&obj->popstack)) {
while(!stackempty(&obj->pushstack)){
stackpush(&obj->popstack,stacktop(&obj->pushstack);
stackpop(&obj->popstack);
}
}
return stacktop(&obj->popstack);

最后返回popstack的top元素
3.myQueuePop函数
用myQueuePeek函数,再用popstack弹出popstack中的栈顶元素即可

int front=myQueuePeek(obj);
stackpop(&obj->popstack);
returnm front;

你可能感兴趣的:(c语言,java,开发语言)