微网站的优缺点,wordpress 3.9 for sae,政网站首页怎么做试,WordPress引用阿里云矢量图这里写目录标题 用两个队列实现栈题目描述思路#xff1a;结构逻辑图如下完整解析代码 用两个队列实现栈
leetcode
题目描述 思路#xff1a; 准备两个队列#xff0c;第一个队列依次出队到只剩一个数据时停止#xff0c;将已出队的数据依次入队到第二个队列#xff0c;… 这里写目录标题 用两个队列实现栈题目描述思路结构逻辑图如下完整解析代码 用两个队列实现栈
leetcode
题目描述 思路 准备两个队列第一个队列依次出队到只剩一个数据时停止将已出队的数据依次入队到第二个队列将第一个队列仅剩的一个数据出队即实现了栈的出栈。入栈时哪个队列不为空则在哪个队列入队。 结构逻辑图如下 完整解析代码
typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;void QueueInit(Queue* pq)
{assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0;
}
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur pq-phead;while (cur) {QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0;
}
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL) {perror(mallloc fail\n);return;}newnode-data x;newnode-next NULL;if (pq-ptail NULL) {assert(pq-phead NULL);pq-phead pq-ptail newnode;}else {pq-ptail-next newnode;pq-ptail newnode;}pq-size;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq-size 0;
}
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL) {free(pq-phead);pq-phead pq-ptail NULL;}else {QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--;
}
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq-phead-data;
}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data;
}
int QueueSize(Queue* pq)
{assert(pq);return pq-size;
}//------以下为OJ提供-------typedef struct {Queue q1;Queue q2;
} MyStack;MyStack* myStackCreate() {MyStack* obj (MyStack*)malloc(sizeof(MyStack));if (obj NULL) {perror(malloc fail);return NULL;}QueueInit(obj-q1);QueueInit(obj-q2);return obj;
}void myStackPush(MyStack* obj, int x) {if (!QueueEmpty(obj-q1)) {QueuePush(obj-q1, x);}else {QueuePush(obj-q2, x);}
}int myStackPop(MyStack* obj) {Queue* pEmptyQ obj-q1;Queue* pNonEmptyQ obj-q2;if (!QueueEmpty(obj-q1)) {pEmptyQ obj-q2;pNonEmptyQ obj-q1;}while (QueueSize(pNonEmptyQ) 1) {QueuePush(pEmptyQ, QueueFront(pNonEmptyQ));QueuePop(pNonEmptyQ);}int top QueueFront(pNonEmptyQ);QueuePop(pNonEmptyQ);return top;
}int myStackTop(MyStack* obj) {if (!QueueEmpty(obj-q1)) {return QueueBack(obj-q1);}else {return QueueBack(obj-q2);}
}bool myStackEmpty(MyStack* obj) {return QueueEmpty(obj-q1) QueueEmpty(obj-q2);
}void myStackFree(MyStack* obj) {QueueDestroy(obj-q1);QueueDestroy(obj-q2);free(obj);
}