当前位置: 首页 > wzjs >正文

河南省建设厅网站中级职称胖小七网站建设

河南省建设厅网站中级职称,胖小七网站建设,西安专业建设网站,番禺区建站服务商题目 https://leetcode.cn/problems/implement-stack-using-queues/submissions/599882147 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类…

题目

https://leetcode.cn/problems/implement-stack-using-queues/submissions/599882147

请你仅使用两个队列实现一个后入先出(LIFO)的,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

typedef struct {} MyStack;MyStack* myStackCreate();
void myStackPush(MyStack* obj, int x);
int myStackPop(MyStack* obj);
bool myStackEmpty(MyStack* obj);
void myStackFree(MyStack* obj);
/*** Your MyStack struct will be instantiated and called as such:* MyStack* obj = myStackCreate();* myStackPush(obj, x);* int param_2 = myStackPop(obj);* int param_3 = myStackTop(obj);* bool param_4 = myStackEmpty(obj);* myStackFree(obj);
*/

注意:

只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

思路

  1. 保持一个队列为空,一个队列存数据
  2. 出栈,把前面的数据导入空队列

代码

队列实现代码

typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
} QNode;
typedef struct Queue
{QNode* head;QNode* tail;int size;
} Queue;void QueueInit(Queue* pq)
{assert(pq);pq->head = pq->tail = NULL;pq->size = 0;
}
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* del = cur;cur = cur->next;free(del);}pq->head = pq->tail = NULL;pq->size = 0;
}
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("Queue()::malloc fail");return;}newnode->data = x;newnode->next = NULL;if (pq->head == NULL){assert(pq->tail == NULL);pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = pq->tail->next;}pq->size++;
}
void QueuePop(Queue* pq)
{assert(pq && pq->head);if (pq->head == pq->tail){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* del = pq->head;pq->head = pq->head->next;free(del);}pq->size--;
}
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->data;
}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->data;
}

题目实现

typedef struct {Queue q1;Queue q2;
} MyStack;MyStack* myStackCreate() {MyStack* pst = (MyStack*)malloc(sizeof(MyStack));if (pst == NULL){perror("myStackCreate()::malloc fail");return NULL;}QueueInit(&pst->q1);QueueInit(&pst->q2);return pst;
}
void myStackPush(MyStack* obj, int x) {if (!QueueEmpty(&obj->q1)){QueuePush(&obj->q1, x);}else{QueuePush(&obj->q2, x);}
}
int myStackPop(MyStack* obj) {//参考相交链表,先默认一个空队列和一个非空队列Queue* emptyQ = &obj->q1;Queue* noemptyQ = &obj->q2;if (!QueueEmpty(&obj->q1)){emptyQ = &obj->q2;noemptyQ = &obj->q1;}//倒数据while (QueueSize(noemptyQ) > 1){QueuePush(emptyQ, QueueFront(noemptyQ));QueuePop(noemptyQ);}QDataType top = QueueFront(noemptyQ);QueuePop(noemptyQ);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);
}

文章转载自:

http://e62S18Fy.hxxyp.cn
http://ovBF0EgH.hxxyp.cn
http://7QPn9APU.hxxyp.cn
http://kTwGb3ya.hxxyp.cn
http://LDhVrKlo.hxxyp.cn
http://QsMv06IE.hxxyp.cn
http://8pwwF2Ha.hxxyp.cn
http://cqGtE7EP.hxxyp.cn
http://zFKyvf4Y.hxxyp.cn
http://3VvnvIRA.hxxyp.cn
http://x54WfHG7.hxxyp.cn
http://0I9llq3q.hxxyp.cn
http://Ts4ZdQPw.hxxyp.cn
http://nVv0Q1tH.hxxyp.cn
http://Rx8LcdCj.hxxyp.cn
http://E8kSgjFb.hxxyp.cn
http://eXvMB4wK.hxxyp.cn
http://hvR4QB8s.hxxyp.cn
http://U8SbFewJ.hxxyp.cn
http://dNs6m7Gd.hxxyp.cn
http://U9sgn1FC.hxxyp.cn
http://lIM2F4VW.hxxyp.cn
http://We9mTYal.hxxyp.cn
http://6x2k4MaZ.hxxyp.cn
http://qoehpdWM.hxxyp.cn
http://XSFMa0JJ.hxxyp.cn
http://nSykw4Ed.hxxyp.cn
http://NCag6zP0.hxxyp.cn
http://yownBhzd.hxxyp.cn
http://GLvsLPIx.hxxyp.cn
http://www.dtcms.com/wzjs/691410.html

相关文章:

  • 宁波网站建设 华企立方互联网营销培训课程
  • 萍乡企业网站制作收益网站制作
  • 网站建设 资质荣誉东莞建网页
  • 网站如何换空间html旅游网页设计代码
  • 网站建设文件夹结构wordpress adsense主题
  • 无锡定制公司网站做影视网站如何加速
  • 佛山格尔做网站的公司科技股份公司网站模板
  • 财务公司网站源码连城县住房和城乡建设局 网站
  • 网站下载app免费安全在seo优化中
  • 做网站需要什么学专业东莞微网站建设多少钱
  • 兰州网站建设网站建设wordpress内网服务器非常慢
  • 酷炫网站首页企业网站建设的开发方式
  • 网站店招用什么软件做的seo就业前景怎么样
  • 设计网站免费素材南昌校园文化设计公司
  • 马云1688网站在濮阳如何做网站代建设费用吗
  • 快速建站php如何恢复wordpress
  • 泾阳县建设局网站南宁建站方案
  • 传统网站建设团队做网站有什么专业术语
  • 行业网站网址wordpress 容易
  • 学校网站建设教程安装不了wordpress
  • 温州高端网站建设公司哪家好信誉好的武进网站建设
  • mip网站实例wordpress如何批量发布文章
  • 无锡高端网站设计公司建设信用卡网站
  • 电子商务网站建设的方法及流程图线上营销策划案例
  • 做网站做app区别建设路小学查分网站
  • 网站实现步骤及方法农村电商网站建设方案
  • php+mysql网站开发全程实例pdf代码外包平台
  • 艺术网站建设模板合肥手机网站开发
  • 网站优化策划书南京seo排名优化
  • 网站开发费用预算宁波网站seo诊断工具