STL库中的stack和queue及其模拟实现
来源:互联网 发布:浙江师范行知学院 编辑:程序博客网 时间:2024/06/06 03:14
在学完了list和vector之后,紧接着就是与其相关联的两个数据结构栈(stack)和队列(queue)。栈的特点是先进后出,即先进栈的元素后出栈;队列的特点是后进先出,即先入队列的元素先出队列。
栈只允许在栈顶插入和删除数据,其基本结构如下
队列只允许在队尾插入数据,在队头删除数据,其基本结构如下
栈更像是一个线性表,因为vector的push_back 和 pop_back更容易实现,所以可以用vector来模拟实现stack;而队列更像是一个链表,因为它有队头的概念,list中有两个接口front和back,可以用来表示队头队尾,出队操作也可以用pop_front来实现。下面我们来简单地模拟实现以下stack。
因为我们是直接使用库中的vector来模拟实现stack,stack是一个容器适配器,这是用了一个封装了的类作为他的特定容器,提供了一组成员函数去访问他的元素,元素从特定的容器,也就是堆栈的头取出元素。
这个基础的容器可能是任何标准的容器类,和一些其他特殊设计的模板类,唯一的要求就是要支持以下的操作
实现C++ STL,栈有两个参数。
templete <class T,class Container=deque> class stack;
T表示元素类型,Container表示被用于存储和访问元素的类型。这里因为我们用vector实现,所以Container就被赋值为vector的类型。
#pragma once#include <iostream>using namespace std;#include <vector>////静态的栈//template <class T,size_t n=100>//class Stack//{//protected:// T _a[N];//};//动态的栈template <class T, class Container = vector<T>>//容器适配器class Stack{public: void Push(const T& x) { _a.push_back(x); } void Pop() { _a.pop_back(); } size_t Size() { return _a.size(); } bool Empty() { return _a.empty(); } T& Top() { T& top = _a.back(); return top; }protected: Container _a;};void TestStack(){ int a[] = { 1, 2, 3, 4 }; Stack<int> s; for (size_t i = 0; i < sizeof(a) / sizeof(a[0]); ++i) { s.Push(a[i]); } s.Pop(); int b = s.Size(); cout << b;}
queue也是一样的,可以使用库中的list实现,具体的实现方法与stack一样,这里直接附上代码。
#pragma once#include <iostream>using namespace std;#include <list>template<class T, class Container = list<T>>class Queue{public: Queue() {} void Push(const T& x) { _a.push_back(x); } void Pop() { _a.pop_front(); } T Back() { return _a.back(); } T Front() { return _a.front(); } size_t Size() { return _a.size(); } bool Empty() { return _a.empty(); }protected: Container _a;};void TestQueue(){ Queue<int> q; int a[] = { 1, 2, 3, 4 }; for (size_t i = 0; i < sizeof(a) / sizeof(a[0]); ++i) { q.Push(a[i]); } cout << q.Back() << endl; cout << q.Front() << endl; cout << q.Size() << endl; q.Pop(); cout << q.Empty() << endl;}
阅读全文
0 0
- STL库中的stack和queue及其模拟实现
- STL中的queue和stack
- 模拟实现 stack和queue
- 模板模拟实现stack和queue
- 【数据结构】Stack和Queue的模拟实现
- STL中的stack详解及其自我实现
- 使用List模拟实现STL中的Queue
- 使用Vector模拟实现STL中的stack
- STL中stack和queue
- .net中的Queue和Stack
- .net中的Queue和Stack
- java中的stack和queue
- STL中stack和queue的用法
- STL之queue和stack容器
- STL之queue和stack容器
- STL中stack和queue的用法
- STL容器之stack和queue
- STL----stack 和queue的使用
- HDU 4474 Yet Another Multiple Problem
- bzoj 1899: [Zjoi2004]Lunch 午餐
- 怎么把图片转换成BMP格式
- 虽然微不足道但是很有用的JAVA基础—数组
- [BZOJ]1899: [Zjoi2004]Lunch 午餐 DP
- STL库中的stack和queue及其模拟实现
- springmvc学习笔记(19)-RESTful支持
- 类加载
- Java的值传递,没有引用传递
- springcloud记录篇3-springcloud客户端ribbon和feign
- Knights
- JaveEE请求转发和重定向的区别
- C++ 数据封装
- Mybatis的基本配置和使用