利用队列先进先出的特性开辟两个队列一个为pushobj另一个为popobj当插入操作时先进pushobj假设插入的数据为 1234。再把数据导到popobj里时则为 4321。符号栈的后进先出特性pushobj主要是插入数据当出栈时想从popobj队列查看是否有数据如果为空则查看pushobj队列是否有数据当两个队列都为空时则为空栈typedefintQ_type;typedefstructQueueNode//以单链表实现队列{structQueueNode*next;Q_type data;}QNode;typedefstructQueue//记录队列的队头节点和队尾节点以及队列的个数{QNode*head;QNode*tail;intsize;}Queue;voidQueueInit(Queue*pq)//初始化队列{assert(pq);pq-headpq-tailNULL;pq-size0;}voidQueueDestroy(Queue*pq)//销毁队列{assert(pq);QNode*curpq-head;while(cur){QNode*nextcur-next;free(cur);curnext;}pq-headpq-tailNULL;pq-size0;}boolQueueEmpty(Queue*pq)//判断是否为空{assert(pq);returnpq-size0;}voidQueuePush(Queue*pq,Q_type x)//插入{assert(pq);QNode*newnode(QNode*)malloc(sizeof(QNode));//申请空间newnode-datax;newnode-nextNULL;if(pq-headNULL){pq-headpq-tailnewnode;}else{pq-tail-nextnewnode;pq-tailnewnode;}pq-size;}voidQueuePop(Queue*pq)//删除{assert(pq);assert(!QueueEmpty(pq));QNode*curpq-head-next;free(pq-head);pq-headcur;if(pq-headNULL){pq-tailNULL;}pq-size--;}intQueueSize(Queue*pq)//队列的元素个数{assert(pq);assert(!QueueEmpty(pq));returnpq-size;}Q_typeQueueFront(Queue*pq)//队头的元素{assert(pq);assert(!QueueEmpty(pq));returnpq-head-data;}Q_typeQueueBack(Queue*pq)//队尾的元素{assert(pq);assert(!QueueEmpty(pq));returnpq-tail-data;}typedefstruct{//创建两个队列Queue pushobj;Queue popobj;}MyQueue;MyQueue*myQueueCreate(){MyQueue*obj(MyQueue*)malloc(sizeof(MyQueue));//为两个队列申请空间if(objNULL){perror(malloc);returnNULL;}QueueInit(obj-pushobj);QueueInit(obj-popobj);returnobj;}voidmyQueuePush(MyQueue*obj,intx){//往pushobj队列插入数据QueuePush(obj-pushobj,x);}boolmyQueueEmpty(MyQueue*obj){//当两个队列同时为空才是空returnQueueEmpty(obj-pushobj)QueueEmpty(obj-popobj);}intmyQueuePeek(MyQueue*obj){//查看obj-popobj队头元素if(QueueEmpty(obj-popobj))//当popobj队列为空时{while(!QueueEmpty(obj-pushobj))//把pushobj里的数据导到popobj里{QueuePush(obj-popobj,QueueFront(obj-pushobj));QueuePop(obj-pushobj);}}returnQueueFront(obj-popobj);//返回popobj队列的队头}intmyQueuePop(MyQueue*obj){//栈的删除inttmpmyQueuePeek(obj);QueuePop(obj-popobj);returntmp;}voidmyQueueFree(MyQueue*obj){//销毁栈QueueDestroy(obj-pushobj);QueueDestroy(obj-popobj);free(obj);}