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

外贸seo网站大全贵阳市观山湖区网站建设

外贸seo网站大全,贵阳市观山湖区网站建设,网站设计策划书,任丘建设银行网站文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列 stack的模拟实现queue的模拟实现 前言 栈和队列这一块其实有数据结构的基础#xff0c;学起来非常简单。 stack 栈的成员函数就这么写#xff0c;除了emplace其他都已经非常熟悉了。 stack没有迭代器吗#xff… 文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列 stack的模拟实现queue的模拟实现 前言 栈和队列这一块其实有数据结构的基础学起来非常简单。 stack 栈的成员函数就这么写除了emplace其他都已经非常熟悉了。 stack没有迭代器吗 没有因为栈已经不是容器了它是容器适配器。给它一个迭代器还能保证先进先出这些吗不能。 stack跟我们之前学的list其实很不太一样。 模板参数不同。 先快速用一下stack让它跑起来。 void test_stack() {stackint st;st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout st.top() ;st.pop();}cout endl; }栈的题目 最小栈 接下来我们做题来加深一下对stack的理解。 最小栈 思路 首先定义两个栈一个栈是正常的栈实现正常的操作。 我们用另一个栈是最小栈来实现O(1)检索到最小元素的栈。 这里要不要写那4个默认成员函数 不用。 push 如果是空栈或者需要push的数据小于最小栈栈顶元素我们就push.否则最小栈不做处理。 注意如果需要push的数据等于栈顶元素也要push否则pop的时候会把最小值也pop掉 pop 如果最小栈的栈顶元素和正常栈的栈顶元素相等我们就pop class MinStack { public: //不用写MinStack() {}void push(int val) {_st.push(val);if (_minst.empty() || val _minst.top()){_minst.push(val);}}void pop() {if (_minst.top() _st.top()){_minst.pop();}_st.pop();}int top() {return _st.top();}int getMin() {return _minst.top();} private:stackint _st;stackint _minst; }; 优化 如果是这样那不是很浪费。 可以这样优化每个地方不是存一个值而是存一个结构。 给大家看一下结构具体实现就先不实现了。 stackint _st; struct Data {int _val;int _count; } stackDate _minst;这就是模板的好处如果没有模板那自己还需要再写一个栈。 JZ31 栈的压入、弹出序列 栈的压入、弹出序列 这道题稍有不慎就会写的很复杂如果想清楚了也挺简单的。 不匹配的一种情况 思路 这道题有很多种思路最简单的就是用一个栈模拟入栈出栈的过程。 如果能模拟出来就匹配了如果模拟不出来就不行。 所以我们的重点在于模拟这个栈。 先要第一个出4那就入数据1234。只要不匹配就入数据。 下一个出5不匹配继续入 再看下一个要出的数据是不是栈顶的元素是就直接出。 如果能把入栈序列走完出栈序列也走完那就匹配了。 以pushi为主要的因为popi不一定能走到结尾。 第一步入栈 第二步判断是否要出栈(注意不一定只出一次) 凡是这样写一定要小心栈出了一个然后栈空了。 空栈调用会报错。 怎么样匹配 两种方式 1.popi走到尾了 2.栈为空 stack的模拟实现 栈的实现有两种方式。 1.数组栈尾部当作栈顶。 2.链表栈头部当作栈顶。 数组栈更有优势一点。 传统的写法无非就是搞一个数组不够了就扩容。 我们这里用一个适配器的玩法。 适配器的本质是什么 现实生活中我们的充电头也叫电源适配器。电源适配器是干嘛的是生产电源的吗 其实是用来变压的。 所以适配器的本质是用来转换的把原来的东西给转换过来。 容器适配器它不是自己存储数据它是把已有的东西进行转换。 我们要实现一个顺序栈链表栈我们需要自己写吗 我们可以拿一个已有的容器封装这样写起来更简单。 但是这还不是适配还要转换。 再增加一个模板参数Container,他具体是啥我也不知道但是它肯定是符合我们要求的容器。 要实现顺序栈传vector. 要实现链表栈传list. namespace but {templateclass T, class Containerclass stack{public:void push(const T x){_con.push_back(x);}void pop(){_con.pop_back();}const T top(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private://vectorT _v;Container _con;};void test_stack(){stackint, vectorint st;//顺序栈//stackint, listint st;//链式栈//stackint st //缺省类型st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout st.top() ;st.pop();}cout endl;} }还可以给缺省类型。 templateclass T, class Container vectorT函数传参如果不从右往左会有歧义。 假设传两个参数你就不知道传给谁了。 queue的模拟实现 快速手搓。 namespace but {templateclass T, class Container listTclass queue{public:void push(const T x){_con.push_back(x);}void pop(){_con.pop_front();}const T front(){return _con.front();}const T back(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};void test_queue(){queueint q;q.push(1);q.push(2);q.push(3);q.push(4);while (!q.empty()){cout q.front() ;q.pop();}cout endl;} }队列还能不能用vector适配 队列要头插尾删vector不支持头删。如果强行用erase效率有点低。 在实现队列的头文件里没有包括vector和list为什么还能用 如果编译它是会报错的但是编译器不编译它。.h是不会被编译的它是在包含的地方展开然后编译器向上找。 这样写就不行了 为什么? 因为c和c编译的时候都有一个特点他不会在整个文件里面找。一展开像上去找找不到vector,因为vector在std里面又没有指定std. 在命名空间里只有指定或者展开才能找到。 从string开始只写.h,不写cpp,为什么 从规范角度来说肯定要写的模板不能这么写这样写出来是有问题的。 你可以尝试用声明和定义分离写一下stack。 为什么又找不到vector? stack.cpp这里展开.h又找不到vector. 声明和定义分离会导致很多问题他会导致链接错误。链接错误就是找不到定义。 模板不能声明和定义分离。
http://www.pierceye.com/news/97200/

相关文章:

  • 做房地产网站wordpress 文章页面模板
  • 深圳做app网站建设网站申请支付宝支付
  • 巴音郭楞库尔勒网站建设知名企业门户网站建设
  • 免费域名申请哪个网站好去除wordpress 广告插件
  • 塘厦做网站定制和订制有什么区别
  • 昆明网站空间好习惯网站
  • 做导航网站赚钱吗建立网站需要多少钱费用
  • 大同网站建设哪家好网站后台登录模板html
  • 网站建设过程中准备的工作手机制作网站
  • 做专业网站设计多少钱代理小企业网站建设
  • 怎样提升网站关键词免费的html模版下载
  • 栖霞网站定制三合一建站网站
  • 免费建立一个个人网站设计官网登录入口
  • 门户网站模板之家北京网上服务平台
  • 合肥网站优化方案东莞做网站那家好
  • 个人备案网站可以做论坛吗山东住房建设厅官网站首页
  • 寺院网站模板网站策划制作公司 北京
  • 昆山教育云平台网站建设宁晋县建设局网站
  • 廊坊网站公司dw做网站背景音乐
  • 阜南做网站搜索引擎优化seo多少钱
  • 贵州建设厅网站怎样查询电工证天津网站备案
  • 常州做网站的公司在盐城做网站的网络公司电话
  • seo站外推广如何用wampp 做网站
  • 怎样用手机做网站中企动力百度百科
  • 哪些网站可以做任务挣钱免费app软件
  • 国内简约网站平潭县机场建设网站
  • wordpress 全站通知wordpress怎样打开速度快
  • 广州市建设职业培训学校网站移除wordpress版本
  • 如何申请一个网站 新网动画制作大师
  • 动易后台 网站统计调查 报表类型怎样使用手机相册备份网站源码