stack&queue的模拟实现

这篇具有很好参考价值的文章主要介绍了stack&queue的模拟实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

stack模拟:
stack的源代码:
stack&queue的模拟实现
stack的全部源代码就这些。
stack的代码少,原因在于采用了适配器模式,所谓适配器,以电器为例,每个电器都有电源适配器,中国的家用电源为220V的交流电,但是几乎没有电器需要220V的交流电,所以每个电器都有一个电源适配器,将家庭电压转换为自己需要的电压。stack的适配器原理就是将某个容器转换为符合stack语法的容器。就不需要再进行开辟空间之类的操作了。
图示位置可见,是对deque容器进行转换。deque是什么?
stack&queue的模拟实现
stack&queue的模拟实现
stack&queue的模拟实现
简单的来说,deque是一个双端队列,虽然是队列,但并不是先进先出,而且deque支持随机访问,头插,头删,尾插,尾删,就机制而言,集合了list和vector的优点,但不代表能代替list和vector,因为在效率方面不如list和vector。
目前知道这些就可以了。
deque适合进行头尾删除的操作,作为stack的源容器很适合。vector和list也可以。stack的特性要求,vector和list都能满足。
queue模拟:
queue的源代码:
这些也是queue的全部代码。
stack&queue的模拟实现
简单总结一下:
stack的适配容器包括:deque,list,vector;
queue的适配容器包括:deque,list;
priority_queue的适配容器包括:vector,deque
queue不支持vector是因为vector不支持头删;虽然priority_queue也支持deque,但是deque的随机访问效率并不高,所以不推荐使用deque。
创建queue.h   stack.h   test.cpp
queue.h中:
#pragma once
#include<deque>
using namespace std;
template<class T, class container = deque<T>>
//deque是一个双端队列,虽然是队列,但并不是先进先出,而且deque支持随机访问,头插,头删,尾插,尾删
class myQueue
{
public:
        void push(const T& x)
        {
               _con.push_back(x);
        }
        void pop()
        {
               _con.pop_front(); //vector不支持头部的删除,所以vector不能做queue的原容器。
        }
        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;
};
stack.h中
#pragma once
#include<deque>
using namespace std;
template<class T, class container = deque<T>>
//deque是一个双端队列,虽然是队列,但并不是先进先出,而且deque支持随机访问,头插,头删,尾插,尾删
class myStack
{
public:
        void push(const T& x)
        {
               _con.push_back(x);
        }
        void pop()
        {
               _con.pop_back();
        }
        const T& top() //直接引用返回数据可以被修改,不加引用如果T是string之类的,深拷贝代价较大
        {
               return _con.back();
        }
        size_t size()
        {
               return _con.size();
        }
        bool empty()
        {
               return _con.empty();
        }
private:
        container _con;
};
test.cpp中
#define _CRT_SECURE_NO_WARNINGS 1
#include"queue.h"
#include"stack.h"
#include<iostream>
#include<vector>
#include<list>
using namespace std;
void test_stack1()
{
        myStack<int> st;
        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);
        st.push(5);
        cout << st.empty() << " " << st.size() << endl;
        for (; !st.empty(); )
        {
               cout << st.top() << " ";
               st.pop();
        }
}
void test_stack2()
{
        myStack<int,vector<int>> st; //stack之所以叫空间适配器就是因为可以适配不同类型的容器
         //传的容器如果为string似乎也能实现,string中的字符类型本质上也是整形,
        //但是用string意味着存储范围只能是char类型的范围,准确来说是数据被截断了。
        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);
        st.push(5);
        cout << st.empty() << " " << st.size() << endl;
        while (!st.empty()) //执行效果和test_stack1是一样的。
        {
               cout << st.top() << " ";
               st.pop();
        }
        cout << endl;
}
void test_queue1()
{
        myQueue<int> qu;
        qu.push(1);
        qu.push(2);
        qu.push(3);
        qu.push(4);
        qu.push(5);
        cout << qu.empty() << " " << qu.size() << endl;
        while (!qu.empty())
        {
               cout << qu.front() << " ";
               qu.pop();
        }
        cout << endl;
}
void test_queue2()
{
        myQueue<int,list<int>> qu;
        qu.push(1);
        qu.push(2);
        qu.push(3);
        qu.push(4);
        qu.push(5);
        cout << qu.empty() << " " << qu.size() << endl;
        while (!qu.empty())
        {
               cout << qu.front() << " ";
               qu.pop();
        }
        cout << endl;
}
int main()
{
        test_stack2();
        test_queue2();
        return 0;
}

文章来源地址https://www.toymoban.com/news/detail-464146.html

到了这里,关于stack&queue的模拟实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++随笔录] stack && queue模拟实现

    🗨️stack的容器适配器应该选什么比较好呢? 首先, stack的特点是 头部入, 尾部出 ⇒ 尾插 和 尾删操作比较频繁 我们前面学过的容器有 vector 和 list, vector 和 list的尾插 和 尾删的时间复杂度是 O(1) , 还是适合做容器适配器的. stack的基本结构 用这个容器对象来进行模拟实现stac

    2024年02月06日
    浏览(41)
  • 为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)

    为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码) LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序

    2024年02月06日
    浏览(51)
  • 【STL】stack、queue基本使用和模拟实现

    目录 前言 stack 接口介绍 模拟实现 queue 接口介绍 模拟实现 没有迭代器  deque介绍 stack 和 queue 本质上是一种容器配接器,就像我们平时充电时使用的电源适配器,能够将电压转换成设备能够接受的程度。 其通过封装特定容器作为其底层容器的类,通过一组特定的成员函数来

    2024年02月07日
    浏览(36)
  • 【C++】STL——stack和queue使用及模拟实现

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C++  🛹Linux 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同

    2024年02月13日
    浏览(43)
  • [C++] STL_stack && queue接口的模拟实现

    stack的文档介绍 1. stack是一种容器适配器,专门用在具有 后进先出 操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将

    2024年02月05日
    浏览(38)
  • C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

    我们先来看看 stack的相关接口有哪些: 从栈的接口,我们可以知道栈的接口是一种特殊的vector,所以我们完全可以使用vector来模拟实现stack。 因此我们可以将底层容器定义成模板,然后将容器类变量作为成员变量进行封装。在实现satck的各种接口时,通过成员变量来调用底层

    2024年02月03日
    浏览(42)
  • 【STL】容器适配器stack和queue常见用法及模拟实现

    1.stack介绍及使用 1.1 stack的介绍 stack文档介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 stack是作为容器适配器被实现的,容器适配器是使用特定容器类的封装对象作为其基础容器的类,提供一

    2024年02月06日
    浏览(44)
  • 【C++】——栈和队列(stack、queue)及优先队列(priority_queue)的介绍和模拟实现

    今天我们来学习C++stl六大组件的其中一种,容器适配器,stack、queue及priority_queue都是容器适配器。我们循序渐进,接下来让我们先认识一下什么是容器适配器。 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该

    2024年02月08日
    浏览(46)
  • 【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

    适配器是一种设计模式 (设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 例如我们常见的充电器就是一种适配器,它将我们常用的220V交流电压转化为4,5V (或者其他更高的电

    2023年04月26日
    浏览(59)
  • 容器适配器---deque和STL ---stack queue priority_queue的模拟实现 C++

    目录 一、容器适配器 deque原理 deque的缺陷 deque的优势 二、stack的模拟实现  三、queue的模拟实现 四、优先级队列的模拟实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包