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

wordpress插入html网站关键词怎么优化排名

wordpress插入html,网站关键词怎么优化排名,网页设计尺寸厘米,厦门专业做网站目录 1.用队列实现栈oj题 对比 一、初始化 二、出栈 三、入栈 四、取队头元素: 2.用栈实现队列 一、定义 二、入队列 三、出队列 四、队头 五、判空 前言:如果想了解什么是栈和队列请参考上一篇文章进来一起把【数据结构】的【栈与队列】狠…

目录

1.用队列实现栈oj题

对比

一、初始化

二、出栈 

三、入栈

四、取队头元素:

2.用栈实现队列 

一、定义

二、入队列

三、出队列

四、队头

五、判空



                                                                                                                                  

前言:如果想了解什么是栈和队列请参考上一篇文章进来一起把【数据结构】的【栈与队列】狠狠玩弄,痛快到大汗淋漓-CSDN博客

本篇不进行详细讲解栈和队列的定义

1.用队列实现栈oj题

. - 力扣(LeetCode)

在这个题目中,用两个队列实现栈,以队列的方法和知识点实现栈

对比

我们先来一个函数对比一下

这是用普通方法来实现的栈的初始化

void STInit(ST* ps)
{assert(ps);ps->arr = NULL;ps->capacity = ps->top = 0;
}

 这是用队列方法实现的初始化

MyStack* MyStackCreat()
{MyStack* plt = (MyStack*)malloc(sizeof(MyStack));QueueInit(&plt->q1);QueueInit(&plt->q2);return plt;}

差异很明显,队列实现的方式明显要复杂很多,哈哈哈,这就是oj题,锻炼的是你的思维

写代码之前,我们用图解先来解析

一、初始化

首先我们要知道的是,我们用队列实现栈,要定义和初始化的是什么,用队列实现栈,实则是用队列的属性实现栈的属性,所以我们在这里要定义队列

但是为什么要定义两个队列?

题目上说了要用两个队列实现

所以我们定义队列,用结构体实现两个不同的队列。

代码:

typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QueueNode;
typedef struct
{QueueNode q1;QueueNode q2;}MyStack;
MyStack* MyStackCreat()
{MyStack* plt = (MyStack*)malloc(sizeof(MyStack));QueueInit(&plt->q1);QueueInit(&plt->q2);return plt;}

二、出栈 

1.我们先将所有需要的数据入队列,这里要注意的是入队列的时候是队尾入,队头出,也就是FIFO(先进先出)


2.入完队列之后

我们开始模拟出栈思路,栈的属性是先进后出,队列的属性是先进先出,那么问题就来了,怎么用先进先出的两个数列实现先进后出。这个就是核心思路。

对于q1队列来说,此时q2队列是空的

既然是栈的属性先进的后出,所以就是q1的队尾先出,所以要找到q1的队尾

                           那么你会说这不简单嘛?用指针不就完了?

但是哈,这里要强调,用队列的属性来实现栈的属性,使用的自然是队列的接口。而不是用库函数。

队列的基本操作有什么哪?

入队列,出队列,队列判别空,取队头,取队尾,队列有效个数,销毁

所以第一个思路就来了。


 将队尾前的元素直接移动到空队列q2,这样就q1队列剩下的元素就是队尾元素。

 之后如果再想出栈,再将q2的队尾前的元素移动到空队列q1,队尾元素出栈。

什么时候不能出栈了呢?直到两个队列都为空的时候


这样我们就用两个队列实现了先进后出,后进先出的栈的属性 

void MystackPop(MyStack* pst)
{QueueNode* nonequ = &pst->q1;QueueNode* emtyqu = &pst->q2;if (!QueueEmpty(&pst->q2)){emtyqu = &pst->q1;}else{emtyqu = &pst->q2;}while (QueueSize(nonequ) > 1){int front = QueueFront(nonequ);QueuePush(emtyqu, front);QueuePop(nonequ);}int pop = QueueFront(nonequ);QueuePop(nonequ);return pop;
}

三、入栈

入栈操作相比于出栈先简单很多,入队列和入栈的属性其实是相同的,直接入就行了。所以体现在队列上就是先进的先入栈,所以就是队头入栈。 

void MyStackpush(MyStack* pst,int x)
{if (!QueueEmpty(&pst->q1)){QueuePush(&pst->q1, x);}else{QueuePush(&pst->q2, x);}}

四、取队头元素:

取队头元素听起来很复杂,其实就是在栈里就是最后一个进入的,在队列里就是队尾 

直接返回队列的队尾元素即可 

int MystackTop(MyStack* pst)
{if (!QueueEmpty(&pst->q1)){return QueueBack(&pst->q1);}else{return QueueBack(&pst->q2);}
}

2.用栈实现队列 

232. 用栈实现队列 - 力扣(LeetCode)

对于用栈实现队列其实扒开底层逻辑就好,也不难理解,要实现push,pop,top,empty几种接口,其实就是入栈,出栈,返回栈顶,判断是否为空。至于怎么具体实现,接下来就是详细解释

一、定义

这里要定义两个栈,我们分别命名为pop和push队列

typedef struct
{ST pushST;ST popST;
}MyQU;MyQU* MyQueueCreat()
{MyQU* pst = (MyQU*)malloc(sizeof(MyQU));STInit(&pst->pushST);STInit(&pst->popST);return pst;
}

二、入队列

两者逻辑差不多,直接入队列即可,

void MyqueuePush(MyQU* obj,int x)
{StackPush(&obj->pushST, x);
}

三、出队列

其实出队列的逻辑跟出栈的逻辑是相反的,跟上面的逻辑正好是倒过来的,底层逻辑是怎么用两个先进后出的栈实现先进先出的队列但其实方法是大相径庭的。

判断pop是否为空为空的push的数据全部出栈,然后入栈给pop不会空直接出栈,相当于出队列

步骤一 

过程二: 

 

过程三: 

int MyQueuePop(MyQU* obj)
{if (StackEmpty(&obj->popST)){while (&obj->pushST){StackPush(&obj->popST, StackTop(&obj->pushST));StackPop(&obj->pushST);}}int pop = StackTop(&obj->popST);StackPop(&obj->popST);return pop;}

四、队头

队列中的队头限速是先进的那个元素,在栈中是最后出栈的那个元素,所以我们将栈的最后元素当作队头即可

五、判空

 判断队列是空的时候,相当于push和pop的栈都为空,只有两个都为空的时候才是空。

要用到的队列和栈的接口源码

队列的接口源码

#define _CRT_SECURE_NO_WARNINGS 1
#include"Queue.h"
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}
// ⼊队列,队尾
void QueuePush(Queue* pq, QDataType x)
{assert(pq);//申请新节点QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;//ptail newnodeif (pq->phead == NULL){//队列为空pq->phead = pq->ptail = newnode;}else{//队列不为空pq->ptail->next = newnode;pq->ptail = pq->ptail->next;//newnode}pq->size++;
}//队列判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL && pq->ptail == NULL;
}// 出队列,队头
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));//只有一个结点的情况,避免ptail变成野指针if (pq->ptail == pq->phead){free(pq->phead);pq->phead = pq->ptail = NULL;}else{//删除队头元素、QueueNode* 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;
}//取队尾数据QU
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}
//队列有效元素个数
int QueueSize(Queue* pq)
{assert(pq);/*int size = 0;QueueNode* pcur = pq->phead;while (pcur){size++ ;pcur = pcur->next;}return size;*/return pq->size;
}//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));QueueNode* pcur = pq->phead;while (pcur){QueueNode* next = pcur->next;free(pcur);pcur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}

 栈的接口

#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"void STInit(ST* ps)
{assert(ps);ps->arr = NULL;ps->capacity = ps->top = 0;
}void STDestroy(ST* ps)
{assert(ps);if (ps->arr)free(ps->arr);ps->arr = NULL;ps->top = ps->capacity = 0;
}void StackPush(ST* ps, STDataType x)
{assert(ps);//1.判断空间是否足够if (ps->capacity == ps->top){int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp = (STDataType*)realloc(ps->arr, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newCapacity;}//空间足够ps->arr[ps->top++] = x;
}
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));--ps->top;
}//取栈顶元素
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->arr[ps->top - 1];
}//获取栈中有效元素个数
int STSize(ST* ps)
{assert(ps);return ps->top;
}


文章转载自:
http://dinncodopant.knnc.cn
http://dinncobudgeree.knnc.cn
http://dinncomattery.knnc.cn
http://dinncotwirp.knnc.cn
http://dinncoradiantly.knnc.cn
http://dinncohammerhead.knnc.cn
http://dinncocynical.knnc.cn
http://dinncoclepe.knnc.cn
http://dinncocep.knnc.cn
http://dinncogopi.knnc.cn
http://dinncoachromasia.knnc.cn
http://dinncohellenism.knnc.cn
http://dinncoantiracism.knnc.cn
http://dinncopeachy.knnc.cn
http://dinncoperseus.knnc.cn
http://dinncorespectable.knnc.cn
http://dinncooverinsure.knnc.cn
http://dinncowalpurgisnacht.knnc.cn
http://dinncomutism.knnc.cn
http://dinncocoherent.knnc.cn
http://dinncoammonifiers.knnc.cn
http://dinncojai.knnc.cn
http://dinncorote.knnc.cn
http://dinncovires.knnc.cn
http://dinncobasifugal.knnc.cn
http://dinncopassus.knnc.cn
http://dinncounderpants.knnc.cn
http://dinncocccs.knnc.cn
http://dinncobrutify.knnc.cn
http://dinncotuamotu.knnc.cn
http://dinncohalidom.knnc.cn
http://dinncopostemergence.knnc.cn
http://dinncounspoken.knnc.cn
http://dinncohorsily.knnc.cn
http://dinncospasmophilia.knnc.cn
http://dinncouplift.knnc.cn
http://dinncohelper.knnc.cn
http://dinncosporicide.knnc.cn
http://dinncodemobitis.knnc.cn
http://dinncocorrectness.knnc.cn
http://dinncoquibblesome.knnc.cn
http://dinncoenforcement.knnc.cn
http://dinncorecoal.knnc.cn
http://dinncoicrp.knnc.cn
http://dinncoencephaloid.knnc.cn
http://dinncoirrotional.knnc.cn
http://dinncomower.knnc.cn
http://dinncobeware.knnc.cn
http://dinncoknapweed.knnc.cn
http://dinncosynchronous.knnc.cn
http://dinncocryosurgery.knnc.cn
http://dinncododecagonal.knnc.cn
http://dinncokaiserism.knnc.cn
http://dinncoconscriptive.knnc.cn
http://dinncofeudatory.knnc.cn
http://dinncofl.knnc.cn
http://dinncovitreosil.knnc.cn
http://dinncoceiling.knnc.cn
http://dinncodrosky.knnc.cn
http://dinncooecology.knnc.cn
http://dinnconiobic.knnc.cn
http://dinncoldap.knnc.cn
http://dinncobullwhip.knnc.cn
http://dinncobajri.knnc.cn
http://dinncoshill.knnc.cn
http://dinncoformyl.knnc.cn
http://dinncoquashy.knnc.cn
http://dinncocutwork.knnc.cn
http://dinncoeurovision.knnc.cn
http://dinncoretrospection.knnc.cn
http://dinncoweightless.knnc.cn
http://dinncoceremonialist.knnc.cn
http://dinncobarrator.knnc.cn
http://dinncointellectualize.knnc.cn
http://dinncocockily.knnc.cn
http://dinncocyberculture.knnc.cn
http://dinncoliege.knnc.cn
http://dinncocassie.knnc.cn
http://dinncopizazzy.knnc.cn
http://dinncogreenlet.knnc.cn
http://dinncotupik.knnc.cn
http://dinncodesperate.knnc.cn
http://dinncovolcanian.knnc.cn
http://dinncoskinny.knnc.cn
http://dinncoempyrean.knnc.cn
http://dinncolumisome.knnc.cn
http://dinncopudsy.knnc.cn
http://dinncosignificans.knnc.cn
http://dinncoshilling.knnc.cn
http://dinncofootloose.knnc.cn
http://dinncobabbitt.knnc.cn
http://dinncotsunyi.knnc.cn
http://dinncocerebrospinal.knnc.cn
http://dinnconeurogenetics.knnc.cn
http://dinncofeodal.knnc.cn
http://dinncotabac.knnc.cn
http://dinncoholophotal.knnc.cn
http://dinncosmf.knnc.cn
http://dinncochoroideremia.knnc.cn
http://dinncoacidophil.knnc.cn
http://www.dinnco.com/news/99003.html

相关文章:

  • 多语言网站常见的营销策略有哪些
  • 个人网站要备案嘛产品推广公司
  • 用asp.net做的网站有哪些新闻发稿
  • 哪几个网站适合自己做外贸推广注册app拿佣金平台
  • 党政机关如何建设网站网店运营推广实训
  • ftp网站地图怎么做广东最新消息
  • 公司网站建设需要显示什么软件恶意点击广告软件
  • iis 网站建设中十堰seo优化
  • 门户网站app有哪些惠州seo招聘
  • 公司宣传册怎么制作长春做网站公司长春seo公司
  • 宁波怎么建网站模板百度关键词排名突然没了
  • 竞价移动网站从哪里找网络推广公司
  • 中国住房和城乡建设厅网站首页网络营销的四种形式
  • 怎样制作企业的网站长沙疫情最新消息今天封城了
  • 网站建设网络推广书生北京网站推广排名外包
  • 网站建设与网页制作教程免费观看b站的广告网站平台
  • 加盟平台响应网站建设如何做好互联网营销推广
  • 网站开发确认书关键词上首页软件
  • 淘客请人做网站seoul是哪个城市
  • 网站建设腾讯云在线bt种子
  • 中国有名的网站建设公司合肥做网站哪家好
  • 中国wix网站制作公司广州网站建设推荐
  • 网页版微信网址是多少seo优化查询
  • wordpress菜单结构廊坊seo推广
  • 简单企业网站代码搜索引擎优化的分类
  • 东莞网页设计与建设网络推广优化是干啥的
  • 遵义公司网站制作哪家好seo诊断方案
  • 入侵网站怎么做弹出商业软文怎么写
  • 科讯cms怎么做网站地图百度地图在线查询
  • 怎样查网站用什么程序做的为企业推广