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

专做宠物的网站wordpress什么样

专做宠物的网站,wordpress什么样,怎么自己做网站挣钱,营销网站设计上海天气题目#xff1a;用队列实现栈 思路 队列的特点是先进先出#xff0c;而栈的特点是后进先出。所以想要用队列实现模拟栈#xff0c;我们可以使用两个队列#xff0c;一个队列负责压栈#xff0c;一个队列负责出栈。压栈很简单就是检空再调用队列的push就好#xff0c;那出… 题目用队列实现栈 思路 队列的特点是先进先出而栈的特点是后进先出。所以想要用队列实现模拟栈我们可以使用两个队列一个队列负责压栈一个队列负责出栈。压栈很简单就是检空再调用队列的push就好那出栈呢这里可以利用另外一个空队列先把一部分数据给空队列原来的队列只保留最后一个数据就好这时再对这个队列出栈再Pop掉。始终保持一个队列有数据一个队列为空。两个队列相互交换数据达到模拟实现栈的效果。 这里的结构实际就是一个套娃栈包含队列队列里包含链表 具体实现 首先手搓一个队列如果是其他语言也可以直接调用库这里是用c语言。接着实现题目给的函数。 myStackCreate MyStack* myStackCreate() {MyStack* pst(MyStack*)malloc(sizeof(MyStack));if(pstNULL){perror(Malloc Failed\n);return NULL;}QueueInit(pst-q1);QueueInit(pst-q2);return pst; } 这里创建栈要想清楚结构有三层其中两层你已经再队列里完成。所以这里我们还需要再创建一个栈动态开辟一个指针用这个指针来维护栈和实现各种功能 myStackPush void myStackPush(MyStack* obj, int x) {if(!(QueueEmpty(obj-q1))){QueuePush(obj-q1,x);}else{QueuePush(obj-q2,x);} } 这里压栈还是比较简单首先检查一下队列是否为空如果为空就入队另一个队列。当然刚开始入队两个都为空。所以在检查完一个队列为空后直接就入队到另一个队列就行了。不用再多余判断了。 myStackPop int myStackPop(MyStack* obj) {Queue* emptyobj-q1;Queue* nonemptyobj-q2;if(!QueueEmpty(obj-q1)){emptyobj-q2;nonemptyobj-q1;}while(QueueSize(nonempty) 1){QueuePush(empty,QueueFront(nonempty));QueuePop(nonempty);}int retQueueFront(nonempty);QueuePop(nonempty);return ret; } 这里出栈是有点复杂设计到两个队列相互转化。所以为了逻辑清晰。我们直接创建两个新队列分别命名为empty和nonempty。这样容易区分不容易逻辑混乱。 这里我们可以直接选择一个队列赋值给empty另一个队列赋值给nonempty。在进行检空如果不对在进行交换就行。接下来就是依次出队把头部元素依次入队到empty,依次Pop nonempty队列。当只剩一个数据循环停止。退出循环后把剩余的数据出队Pop队列返回。这样就实现了后进先出的效果。 myStackTop int myStackTop(MyStack* obj) {if(!QueueEmpty(obj-q1)){return QueueBack(obj-q1);}else{return QueueBack(obj-q2);} }这里可以检空再调用QueueBack这里也把这个函数体现的淋漓尽致。虽然从队列定义看这个函数是不合理的。但是这个函数再很多地方都会用到。所以我们不妨写一下。cSTL中就也有这个函数。 myStackEmpty bool myStackEmpty(MyStack* obj) {return QueueEmpty(obj-q1)QueueEmpty(obj-q2); } 这里返回的是两个队列的检空因为这个栈是由这两两个队列实现的 myStackFree void myStackFree(MyStack* obj) {QueueDestroy(obj-q1);QueueDestroy(obj-q2);free(obj);objNULL; } 这里释放可不能直接free栈。我们这里队列还需要一个一个释放。如果你直接释放掉栈那就会内存泄漏。所以我们先调用下队列的销毁函数把两个队列释放掉,再free栈最后记得置空 代码 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); //销毁队列 void QueueDestroy(Queue* pq); //队尾入队列 void QueuePush(Queue* pq, QDataType x); //队头出队列 void QueuePop(Queue* pq); //获取队列头部yuansu QDataType QueueFront(Queue* pq); //获取队列尾部元素 QDataType QueueBack(Queue* pq); //获取队列中有效数据个数 int QueueSize(Queue* pq); //检测队列是否为空检空 bool QueueEmpty(Queue* pq); void QueueInit(Queue* pq) {pq-head pq-tail NULL;pq-size 0; } void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-head;while (cur){QNode* next cur-next;free(cur);cur next;}pq-head pq-tail NULL;pq-size 0; } void QueuePush(Queue* pq, QDataType x) {QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(Malloc Failed\n);return;}newnode-next NULL;newnode-data x;if (pq-head NULL){assert(pq-tail NULL);pq-head pq-tail newnode;}else{pq-tail-next newnode;pq-tail newnode;}pq-size; } void QueuePop(Queue* pq) {assert(pq);assert(pq-head ! NULL);/*QNode* next pq-head-next;free(pq-head);pq-head next;if (pq-head NULL){pq-tail NULL;}*/if (pq-head-next NULL){free(pq-head);pq-head pq-tail NULL;}else{QNode* next pq-head-next;free(pq-head);pq-head next;}pq-size--; } 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; } int QueueSize(Queue* pq) {assert(pq);return pq-size; } bool QueueEmpty(Queue* pq) {assert(pq);return pq-size 0; }typedef struct {Queue q1;Queue q2; } MyStack;MyStack* myStackCreate() {MyStack* pst(MyStack*)malloc(sizeof(MyStack));if(pstNULL){perror(Malloc Failed\n);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* emptyobj-q1;Queue* nonemptyobj-q2;if(!QueueEmpty(obj-q1)){emptyobj-q2;nonemptyobj-q1;}while(QueueSize(nonempty) 1){QueuePush(empty,QueueFront(nonempty));QueuePop(nonempty);}int retQueueFront(nonempty);QueuePop(nonempty);return ret; }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);objNULL; }/*** 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); */总结 这里复杂的主要是结构在具体的函数实现上如果你思路清晰其实是比较简单的。比较复杂的就是出栈这个函数需要多想一下 题目链接225. 用队列实现栈 - 力扣LeetCode
http://www.w-s-a.com/news/233212/

相关文章:

  • 一流的常州网站建设机械加工网报价
  • 上海响应式网站建设公司seo课程总结
  • vs网站开发教程昆山普立斯特做的有网站
  • 柳州网站seo网站swordpress 输出内容
  • 网站设计制作电话多少网站流量下降
  • 沈阳做网站推广的公司唐山哪家做网站好
  • 国外著名网站建设公司WordPress破解怎样主题修复
  • 网站建设济南云畅网络广州电力建设有限公司网站
  • 查看公司信息的网站思特奇是外包公司吗
  • 制作企业网站的目的啥都能看的浏览器
  • 做网站可以用哪些语言如何进行网站运营与规划
  • 做效果图网站有哪些电子商城网站制作数据库
  • 小刘网站建设wordpress调用php文件上传
  • 建设银行对账网站网络营销广告案例
  • 做网站开票是多少个点的票wordpress扫码提交数据库
  • 织梦网站改版需要怎么做企业网站备案管理系统
  • 大规模网站开发语言宁夏建设职业技术学院网站
  • 寻花问柳专注做一家男人爱的网站北京展台设计制作
  • 中卫网站设计做自己的卡盟网站
  • 广州网站推广自助做网站人家直接百度能搜到的
  • 电子商务网站建设目标及利益分析安徽建设厅网站施
  • 制作网站策划书网站建设公司的性质
  • 哪个网站可以做免费宣传简单的网页设计网站
  • 福州专业网站制作公司金湖建设局网站
  • 好的移动端网站模板下载兰州线上广告推广
  • 宁波高端建站深圳品牌营销策划机构
  • 权威网站优化价格建设厅科技中心网站首页
  • 保定模板建站软件腾讯云做淘客网站
  • 单位建设一个网站的费用正规刷手机单做任务网站
  • 北京定制网站价格开网店怎么卖到外国