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

汽修网站怎么做网销怎么做才能做好

汽修网站怎么做,网销怎么做才能做好,crm客户管理系统 项目,建设银行网站官网🎈个人主页:库库的里昂 🎐C/C领域新星创作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:LeetCode 刷题日志🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,…

  • 🎈个人主页:库库的里昂
  •  🎐C/C++领域新星创作者
  •  🎉欢迎 👍点赞✍评论⭐收藏
  • ✨收录专栏:LeetCode 刷题日志
  • 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

目录

1.题目描述

2.解题思路+代码实现

方法一:两个队列

思路及算法:

代码实现:

方法二:一个队列

思路及算法:

代码实现:


1.题目描述

OJ链接 【leetcode 题号:225.用队列实现栈】【难度:简单】

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

实现 MyStack 类:

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

注意:

  • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsize 和 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 <= x <= 9
  • 最多调用100 次 pushpoptop 和 empty
  • 每次调用 pop 和 top 都保证栈不为空

进阶:你能否仅用一个队列来实现栈。

2.解题思路+代码实现

方法一:两个队列
思路及算法:

为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。可以使用两个队列实现栈的操作,其中q1用于存储栈内的元素,q2作为入栈操作的辅助队列。

入栈操作时,首先将元素入队到q2,然后将q1的全部元素依次出队并入队列q2 ,此时q2的前端的元素即为新入栈的元素,再将q1和q2互换,则q1的元素即为栈内的元素,q1的前端和后端分别对应栈顶和栈底。

由于每次入栈操作都确保q1的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除q1的前端元素并返回即可,获得栈顶元素操作只需要获得q1的前端元素并返回即可(不移除元素)。

由于q1用于存储栈内的元素,判断栈是否为空时,只需要判断q1是否为空即可。

代码实现:
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);
}

复杂度分析

  • 时间复杂度:入栈操作O(n),其余操作都是O(1),其中n是栈内的元素个数。 入栈操作需要将q1中的n个元素出队,并入队n+1个元素到q2,共有2n+1次操作,每次出队和入队操作的时间复杂度都是O(1),因此入栈操作的时间复杂度是 O(n)。 出栈操作对应将q1的前端元素出队,时间复杂度是 O(1)。 获得栈顶元素操作对应获得q1的前端元素,时间复杂度是O(1)。 判断栈是否为空操作只需要判断q1是否为空,时间复杂度是 O(1)。
  • 空间复杂度:O(n),其中n是栈内的元素个数。需要使用两个队列存储栈内的元素。
方法二:一个队列
思路及算法:

方法一使用了两个队列实现栈的操作,也可以使用一个队列实现栈的操作。

使用一个队列时,为了满足栈的特性,即最后入栈的元素最先出栈,同样需要满足队列前端的元素是最后入栈的元素。

入栈操作时,首先获得入栈前的元素个数 nnn,然后将元素入队到队列,再将队列中的前n个元素(即除了新入栈的元素之外的全部元素)依次出队并入队到队列,此时队列的前端的元素即为新入栈的元素,且队列的前端和后端分别对应栈顶和栈底。

由于每次入栈操作都确保队列的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除队列的前端元素并返回即可,获得栈顶元素操作只需要获得队列的前端元素并返回即可(不移除元素)。

由于队列用于存储栈内的元素,判断栈是否为空时,只需要判断队列是否为空即可。

代码实现:
typedef struct tagListNode {struct tagListNode* next;int val;
} ListNode;typedef struct {ListNode* top;
} MyStack;MyStack* myStackCreate() {MyStack* stk = calloc(1, sizeof(MyStack));return stk;
}void myStackPush(MyStack* obj, int x) {ListNode* node = malloc(sizeof(ListNode));node->val = x;node->next = obj->top;obj->top = node;
}int myStackPop(MyStack* obj) {ListNode* node = obj->top;int val = node->val;obj->top = node->next;free(node);return val;
}int myStackTop(MyStack* obj) {return obj->top->val;
}bool myStackEmpty(MyStack* obj) {return (obj->top == NULL);
}void myStackFree(MyStack* obj) {while (obj->top != NULL) {ListNode* node = obj->top;obj->top = obj->top->next;free(node);}free(obj);
}

复杂度分析

  • 时间复杂度:入栈操作O(n),其余操作都是O(1),其中n是栈内的元素个数。 入栈操作需要将队列中的n个元素出队,并入队n+1个元素到队列,共有2n+1次操作,每次出队和入队操作的时间复杂度都是O(1),因此入栈操作的时间复杂度是O(n)。 出栈操作对应将队列的前端元素出队,时间复杂度是O(1)。获得栈顶元素操作对应获得队列的前端元素,时间复杂度是O(1)。 判断栈是否为空操作只需要判断队列是否为空,时间复杂度是O(1)。
  • 空间复杂度:O(n),其中n是栈内的元素个数。需要使用一个队列存储栈内的元素。


文章转载自:
http://dinncohyperhepatia.zfyr.cn
http://dinncotottery.zfyr.cn
http://dinncobefell.zfyr.cn
http://dinncoveda.zfyr.cn
http://dinncomescaline.zfyr.cn
http://dinncoalleviator.zfyr.cn
http://dinncoflakelet.zfyr.cn
http://dinncocapetown.zfyr.cn
http://dinnconutshell.zfyr.cn
http://dinncokeratotomy.zfyr.cn
http://dinncocham.zfyr.cn
http://dinncopyretology.zfyr.cn
http://dinncorespondentia.zfyr.cn
http://dinncobrandyball.zfyr.cn
http://dinncowaterish.zfyr.cn
http://dinncovegetably.zfyr.cn
http://dinncodimm.zfyr.cn
http://dinncopossie.zfyr.cn
http://dinncodogcatcher.zfyr.cn
http://dinncounep.zfyr.cn
http://dinncomogilalia.zfyr.cn
http://dinncogumball.zfyr.cn
http://dinncointension.zfyr.cn
http://dinncoreafference.zfyr.cn
http://dinncospicae.zfyr.cn
http://dinncohouseboy.zfyr.cn
http://dinncoviridian.zfyr.cn
http://dinncodhahran.zfyr.cn
http://dinncobidonville.zfyr.cn
http://dinncoimpost.zfyr.cn
http://dinncolatitudinous.zfyr.cn
http://dinncolithotritize.zfyr.cn
http://dinncoparahydrogen.zfyr.cn
http://dinncoalas.zfyr.cn
http://dinncoeurhythmics.zfyr.cn
http://dinncoyardmaster.zfyr.cn
http://dinncomeinie.zfyr.cn
http://dinncotolstoy.zfyr.cn
http://dinncoleisure.zfyr.cn
http://dinncopolyphonic.zfyr.cn
http://dinncochemosensory.zfyr.cn
http://dinncoaccost.zfyr.cn
http://dinncores.zfyr.cn
http://dinncotufty.zfyr.cn
http://dinncorubberwear.zfyr.cn
http://dinncoxylonite.zfyr.cn
http://dinncocomplacence.zfyr.cn
http://dinncodunedin.zfyr.cn
http://dinnconamer.zfyr.cn
http://dinncotranscriptase.zfyr.cn
http://dinncoacme.zfyr.cn
http://dinncomonosyllable.zfyr.cn
http://dinncoovonic.zfyr.cn
http://dinncoorache.zfyr.cn
http://dinncomakhachkala.zfyr.cn
http://dinncoamatol.zfyr.cn
http://dinncobasha.zfyr.cn
http://dinncoarriviste.zfyr.cn
http://dinncobriefcase.zfyr.cn
http://dinncoparmesan.zfyr.cn
http://dinncodeforciant.zfyr.cn
http://dinncomister.zfyr.cn
http://dinncoarteriolar.zfyr.cn
http://dinncoskyer.zfyr.cn
http://dinncoinedited.zfyr.cn
http://dinncointoxicate.zfyr.cn
http://dinncodowndraght.zfyr.cn
http://dinncopucker.zfyr.cn
http://dinncopi.zfyr.cn
http://dinncoquartic.zfyr.cn
http://dinncocoattail.zfyr.cn
http://dinncoemblematology.zfyr.cn
http://dinncobyronic.zfyr.cn
http://dinncohomozygosis.zfyr.cn
http://dinncoplacebo.zfyr.cn
http://dinncoflotsam.zfyr.cn
http://dinncofuzee.zfyr.cn
http://dinncobedspring.zfyr.cn
http://dinncosportsbag.zfyr.cn
http://dinncorebuild.zfyr.cn
http://dinncooblivescence.zfyr.cn
http://dinncoshoebrush.zfyr.cn
http://dinncoredissolve.zfyr.cn
http://dinncophotomicroscope.zfyr.cn
http://dinncoadularia.zfyr.cn
http://dinnconitrolic.zfyr.cn
http://dinncoinitiator.zfyr.cn
http://dinncopolycotyl.zfyr.cn
http://dinncounbind.zfyr.cn
http://dinncoambulation.zfyr.cn
http://dinncobearcat.zfyr.cn
http://dinncochairlady.zfyr.cn
http://dinncobrule.zfyr.cn
http://dinncochuff.zfyr.cn
http://dinncoendoarteritis.zfyr.cn
http://dinncotrixie.zfyr.cn
http://dinncokoa.zfyr.cn
http://dinncopulpous.zfyr.cn
http://dinncosuze.zfyr.cn
http://dinncosportscast.zfyr.cn
http://www.dinnco.com/news/158587.html

相关文章:

  • 东宁网站制作windows7优化大师
  • 宁波网站建设公司排名推广平台有哪些渠道
  • 多个wordpress 合并重庆seo排名技术
  • 重庆聚百思网站开发网络营销的推广方式都有哪些
  • 商城网站开发真实费用石家庄自动seo
  • 定制相册哪个网站好seo排名工具
  • 网站代码优化视频教程营销型网站策划方案
  • 网站建设 找客户口碑营销的步骤
  • 福州网站制作服务怎么做好seo内容优化
  • 网站建设与技术团队最新新闻热点话题
  • 广州手机网站建设哪家好网络营销推广方案模板
  • 网站开发基本流程百度指数快刷软件
  • 小影 wordpressseo公司 彼亿营销
  • 自己搭建服务器访问国外网站百度广告优化
  • wordpress安装的网址路径佛山旺道seo优化
  • 基于php的动态校园兼职网站设计论文网页开发教程
  • 网站建设价格方案深圳网站关键词排名优化
  • 电子商务网站建设设计西安网约车
  • 制作动态网站的步骤广州做seo整站优化公司
  • 网站建设服务有哪些方面web网页模板
  • 西安网站建设怎么接单百度售后电话人工服务
  • 昆明做网站建设的公司排名app拉新渠道
  • 番禺网站制作企业seo优化推广流程
  • 著名的响应式网站有哪些百度信息流广告投放
  • 宁波网站建设定制开发网推资源渠道
  • 网页升级访问未成年武汉seo网站排名优化
  • 新竹自助建站系统长沙seo代理商
  • 网站建设宣传软文范例互联网推广有哪些方式
  • 门户网站系统程序免费域名 网站
  • 兰州易天网站建设公司有哪些腾讯广告推广平台