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

广州市天河区网站设计公司设计排版网站

广州市天河区网站设计公司,设计排版网站,在线做网站有哪些平台,台州网站优化队列是先进先出#xff0c;栈是先进后出。卡哥给了关于C方向关于栈和队列的4个问题#xff1a; C中stack 是容器么#xff1f; 使用的stack是属于哪个版本的STL#xff1f; 使用的STL中stack是如何实现的#xff1f; stack 提供迭代器来遍历stack空间么#xff1f; … 队列是先进先出栈是先进后出。卡哥给了关于C方向关于栈和队列的4个问题 C中stack 是容器么 使用的stack是属于哪个版本的STL 使用的STL中stack是如何实现的 stack 提供迭代器来遍历stack空间么 首先大家要知道 栈和队列是STLC标准库里面的两个数据结构。C标准库是有多个版本的要知道我们使用的STL是哪个版本才能知道对应的栈和队列的实现原理。接下来介绍的栈和队列也是SGI STL里面的数据结构 知道了使用版本才知道对应的底层实现。来说一说栈栈先进后出如图所示 栈提供push 和 pop 等等接口所有元素必须符合先进后出规则所以栈不提供走访功能也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。 栈是以底层容器完成其所有的工作对外提供统一的接口底层容器是可插拔的也就是说我们可以控制使用哪种容器来实现栈的功能。所以STL中栈往往不被归类为容器而被归类为container adapter容器适配器。从下图中可以看出栈的内部结构栈的底层实现可以是vectordequelist 都是可以的 主要就是数组和链表的底层实现。 我们常用的SGI STL如果没有指定底层实现的话默认是以deque为缺省情况下栈的底层结构。deque是一个双向队列只要封住一段只开通另一端就可以实现栈的逻辑了。SGI STL中 队列底层实现缺省情况下一样使用deque实现的。栈的特性对应的队列的情况是一样的。可以指定vector为栈的底层实现初始化语句如下 std::stackint, std::vectorint third; // 使用vector为底层容器的栈队列中先进先出的数据结构同样不允许有遍历行为不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。也可以指定list 为起底层实现初始化queue的语句如下 std::queueint, std::listint third; // 定义以list为底层容器的队列所以STL 队列也不被归类为容器而被归类为container adapter 容器适配器。 题目用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty实现 MyQueue 类 void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开头的元素 boolean empty() 如果队列为空返回 true 否则返回 false 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque双端队列来模拟一个栈只要是标准的栈操作即可。 题解 将一个栈当作输入栈用于压入 push 传入的数据另一个栈当作输出栈用于 pop 和 peek 操作。每次 pop 或 peek 时若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。 class MyQueue { private:stackint inStack,outStack;void in2out(){while(!inStack.empty()){outStack.push(inStack.top());inStack.pop();}} public:MyQueue() {}void push(int x) {inStack.push(x);}int pop() {if(outStack.empty()){in2out();}int res outStack.top();outStack.pop();return res;}int peek() {if(outStack.empty()){in2out();}return outStack.top();} bool empty() {return inStack.empty() outStack.empty();} }; /*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj new MyQueue();* obj-push(x);* int param_2 obj-pop();* int param_3 obj-peek();* bool param_4 obj-empty();*/题目用队列实现栈 请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop 和 empty。实现 MyStack 类 void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的返回 true 否则返回 false 。 只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。所使用的语言也许不支持队列。 你可以使用 list 列表或者 deque双端队列来模拟一个队列 , 只要是标准的队列操作即可。 题解 题目涉及到栈和队列两种数据结构。栈是一种后进先出的数据结构元素从顶端入栈然后从顶端出栈。队列是一种先进先出的数据结构元素从后端入队然后从前端出队。 为了满足栈的特性即最后入栈的元素最先出栈在使用队列实现栈时应满足队列前端的元素是最后入栈的元素。可以使用两个队列实现栈的操作其中 queue1 用于存储栈内的元素queue2 作为入栈操作的辅助队列。 入栈操作时首先将元素入队到 queue2 然后将 queue1 的全部元素依次出队并入队到 queue2 此时 queue2 的前端的元素即为新入栈的元素再将 queue1 和 queue2 互换则 queue1 的元素即为栈内的元素queue1 的前端和后端分别对应栈顶和栈底。 由于每次入栈操作都确保 queue1 的前端元素为栈顶元素因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除 queue1 的前端元素并返回即可获得栈顶元素操作只需要获得 queue1 的前端元素并返回即可不移除元素。由于 queue1 用于存储栈内的元素判断栈是否为空时只需要判断 queue1 是否为空即可。 class MyStack { private:queueint queue1;queueint queue2; public:MyStack() {}void push(int x) {queue2.push(x);while(!queue1.empty()){//C 函数 std::queue::front() 返回对队列第一个元素的引用。 对队列执行 pop 操作后该元素将被删除。queue2.push(queue1.front());queue1.pop();}swap(queue1,queue2);}int pop() {int pop_val queue1.front();queue1.pop();return pop_val;}int top() {return queue1.front();}bool empty() {return queue1.empty();} }; /*** Your MyStack object will be instantiated and called as such:* MyStack* obj new MyStack();* obj-push(x);* int param_2 obj-pop();* int param_3 obj-top();* bool param_4 obj-empty();*/时间复杂度入栈操作 O(n)其余操作都是 O(1)其中 n 是栈内的元素个数。 入栈操作需要将 queue1 中的 n 个元素出队并入队 n1 个元素到 queue2共有 2n1 次操作每次出队和入队操作的时间复杂度都是 O(1)因此入栈操作的时间复杂度是 O(n)。 出栈操作对应将 queue1 的前端元素出队时间复杂度是 O(1)。 获得栈顶元素操作对应获得 queue1 的前端元素时间复杂度是 O(1)。 判断栈是否为空操作只需要判断 queue1 是否为空时间复杂度是 O(1)。 空间复杂度O(n)其中 n 是栈内的元素个数。需要使用两个队列存储栈内的元素。 其实这道题目就是用一个队列就够了。一个队列在模拟栈弹出元素的时候只要将队列头部的元素除了最后一个元素外 重新添加到队列尾部此时再去弹出元素就是栈的顺序了。 class MyStack { private:// queueint queue1;// queueint queue2;queueint one_queue; public:MyStack() {}// void push(int x) {// queue2.push(x);// wile(!queue1.empty()){// //C 函数 std::queue::front() 返回对队列第一个元素的引用。 对队列执行 pop 操作后该元素将被删除。// queue2.push(queue1.front());// queue1.pop();// }// swap(queue1,queue2);// }void push(int x){int queue_size one_queue.size();one_queue.push(x);for(int i0;iqueue_size;i){one_queue.push(one_queue.front());one_queue.pop();}}// int pop() {// int pop_val queue1.front();// queue1.pop();// return pop_val;// }int pop(){int top_val one_queue.front();one_queue.pop();return top_val;}// int top() {// return queue1.front();// }int top(){return one_queue.front();}// bool empty() {// return queue1.empty();// }bool empty(){return one_queue.empty();} }; Queue 队列是一种设计用于在 FIFO先进先出上下文中操作的数据结构。 队列中的元素从 rear 端插入并从 front 端移除。Queue 队列类是容器适配器。 容器是保存相同类型数据的对象。 队列可以从不同的序列容器创建。 容器适配器不支持迭代器因此我们不能将它们用于数据操作。 但是它们分别支持 push() 和 pop() 成员函数用于数据插入和删除。 下面是来自 queue 头文件的 std::queue 的定义 template class T, class Container dequeT class queue;T − 包含的元素的类型。T 可以替换为任何其他数据类型包括用户定义的类型。Container − 基础容器对象的类型。 queue 中的函数 方法说明queue::queue构造一个具有零个元素的空队列对象。queue::~queue通过释放容器内存来销毁队列。queue::back返回对队列最后一个元素的引用。queue::front返回对队列第一个元素的引用。queue::emplace在队列末尾构造并插入新元素。queue::empty测试队列是否为空。queue::pop删除队列的前面元素。queue::push在队列末尾插入新元素。queue::operator通过替换旧内容将新内容分配给队列。queue::size返回队列中存在的元素总数。queue::swap将队列的内容与另一个队列的内容交换。 堆栈是一种设计用于在 LIFO后进先出上下文中运行的数据结构。 在堆栈中元素被插入以及仅从一端移除。Stack 类是容器适配器。 容器是保存相同类型数据的对象。 可以从不同的序列容器创建堆栈。如果未提供容器则使用默认的 deque 容器。 容器适配器不支持迭代器因此我们不能将它们用于数据操作。但是它们分别支持 push() 和 pop() 成员函数用于数据插入和删除。下面是来自 stack 头文件的 std::stack 定义 template class T, class Container dequeT class stack;stack 中的成员函数 方法说明stack::emplace在栈顶构造并插入新元素。stack::empty测试堆栈是否为空。stack::operator通过替换旧内容将新内容分配给堆栈。stack::pop从堆栈中移除顶部元素。stack::push在栈顶插入新元素。stack::size返回堆栈中存在的元素总数。stack::swap将堆栈的内容与另一个堆栈的内容交换。stack::top返回对栈顶元素的引用。
http://www.laogonggong.com/news/105427.html

相关文章:

  • 网站会员后台管理系统素材网网站建设
  • destoon做的网站莆田兼职做外贸网站
  • 查找企业信息的网站哪个好wordpress自建
  • 如何建设好英文网站怎么开发一个游戏
  • discuz蓝色城市门户论坛网站模板天津市今天新闻头条
  • 企业制作网站服务手机淘宝客网站建设
  • 微信官网网站模板下载不了中国外协加工网免费
  • 上海工程建设安全协会网站石家庄企业官网搭建
  • 私人网站开发公司网站配色 绿色
  • html如何做购物网站网站优化软件方案
  • 织梦cms 网站计数建设工程招投标网最专业的网站
  • 一张图片网站代码wordpress验证ticket
  • 越秀网站建设优化广西桂林商贸旅游技工学校
  • 网站 网页区别成都网站制作南昌
  • 中山精品网站建设资讯l凉州区城乡建设部网站首页
  • 汝州住房和城乡建设网站wordpress 上传excel
  • c 网站开发项目教程聊天软件开发技术
  • 后缀是.cc的网站有哪些网站可以做视频
  • 如何对网站的文件和资源进行优化?湖北城乡建设厅网站
  • 杭州网站建设q479185700棒刀具东莞网站建设
  • 台州网站建设解决方案中小微企业名录查询
  • 福州阳楠科技网站建设有限公司wordpress会员等级插件
  • 深圳个人网站制作网站建设费用的会计
  • 二手闲置平台网站怎么做手机建设银行网站进不去
  • 个人做房产网站口碑营销的概念
  • 海报模板免费网站注册安全工程师官网
  • 买域名网站如何做好一名网络销售
  • 自媒体账号申请seo排名优化公司
  • 网站项目在哪接大连市建设工程信息网官网
  • 手机网站可以做百度商桥吗中国最新军事新闻昨天视频