<C++> stack与queue容器概念模型|常用接口汇总

简介: <C++> stack与queue容器概念模型|常用接口汇总

1、stack 容器概念模型

1.1、stack 容器模型图

52ea7f60bff54a44941dd20cdee216d9.png


1.2、stack 基本概念与特点

概念:


stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,其中一端封闭。


生活中栈的例子有很多,就比如一群人排队进入一个死胡同,先进去的人要想出去就要等后面的人都出去,而最后进来的人可以最先出去。


特点:


只有位于栈顶的元素才可以被外界访问

栈用进入数据称为入栈:push

栈中弹出数据成为出栈:pop

stack 不支持遍历操作

遍历需要在不改变原存储空间的条件下进行

通过每次出栈来访问所有元素的方式不能叫遍历

能够判断容器是否为空和得到元素个数

通过入栈来计数,并不是对出栈计数

2、stack 容器常用接口

接口是栈容器封装的一些方法,可以被外调用,实现不同功能


构造函数:


stack<T>stk;

默认构造,T 采用了模板类的写法,存放数据类型

stack(const stack &stk);

拷贝构造函数

赋值操作:


stack& operator=(const stack &stk);

重载赋值运算符,可直接进行赋值

数据存取:


push(elem);

入栈操作,向栈顶添加元素

pop();

出栈操作,从栈顶移除元素

top();

返回栈顶元素

数量操作:


empty();

判断堆栈是否为空

size();

返回栈的大小

2.1、stack 代码综合使用

包含代码具体使用与运行效果


#include<iostream>
#include<stack>
using namespace std;
int main()
{
  //默认构造创建栈
  stack<int>stk;
  //添加元素
  stk.push(99);
  stk.push(66);
  stk.push(123);
  //查看此时容器大小
  cout <<"栈的大小为:"<< stk.size() << endl;
  //结合接口来查看栈内元素
  while (!stk.empty())
  {
    //访问栈顶元素
    cout << stk.top() << endl;
    //出栈,用于更新栈顶元素
    stk.pop();
  }
  //查看此时容器大小
  cout << "出栈后容器的大小为:" << stk.size() << endl;
  return 0;
}


7e1b418bda614807a67413e092f7b830.png

3、queue 容器概念模型

3.1、queue 容器模型图


dff04f78104d440c96b27579662e28dd.png

3.2、queue 基本概念与特点

概念:


queue,队列,是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。


生活中最典型的例子莫过于隧道了,只允许队尾进入隧道,队首驶出隧道,先进先出且不可逆。


特点:


允许从一端添加元素,另一端删除元素

只有队头和队尾可以被外界访问,因此不支持遍历操作

入队操作:push,出队操作:pop

能够判断容器是否为空和得到元素个数

4、queue 容器常用接口

queue与stack常用接口几乎一致,唯一不同的就是队列的队首和队尾与堆栈的栈顶表示有所不同。


front()接口用来返回队首元素

back() 接口用来返回队尾元素

4.1、queue 代码综合使用

包含代码具体使用与运行效果


//定义队列,含重载相等运算符
class Student
{
public:
  Student(string name, int age)
  {
    this->name = name;
    this->age = age;
  }
  //重载相等关系运算符
  bool operator==(Student& s)
  {
    if (s.name == this->name) {
      if (s.age = this->age)
        return true;
      else
        return false;
    }
    else return false;
  }
  string name;
  int age;
};
void testQueue()
{
  //创建空队列
  queue<Student>Q;
  //准备Student数据
  Student s1("青龙", 888);
  Student s2("白虎", 988);
  Student s3("朱雀", 998);
  Student s4("玄武", 999);
  //入队
  Q.push(s1);
  Q.push(s2);
  Q.push(s3);
  Q.push(s4);
  //查看容器大小
  cout << "出队前队列大小为:" << Q.size() << endl;
  //查看队头队尾元素、出队操作
  while (!Q.empty())
  {
    cout << "队头元素\t姓名:" << Q.front().name << " 寿命:" << Q.front().age << endl;
    cout << "队尾元素\t姓名:" << Q.back().name << " 寿命:" << Q.back().age << endl;
    if (Q.front() == Q.back()) {
      cout << "此时队头和队尾元素相等,出队完毕!" << endl;
    }
    Q.pop();
  }
  //查看容器大小
  cout << "出队后容器大小为:" << Q.size() << endl;
}

c4bef87376014b1e817b0fed682b2e05.png


那么stack和queue容器的整合到此结束了,文章中如有不懂得地方完全可以翻阅我的C++专栏,希望能给大家带来帮助,如果觉得写得好就点赞支持博主吧!


目录
相关文章
|
2天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
21 1
|
2天前
|
设计模式 算法 编译器
【C++】开始使用stack 与 queue
队列的相关习题大部分是子啊BFS中使用,这里就不在说明了
13 3
|
2天前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
13 1
|
2天前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
14 1
|
2天前
|
存储 编译器 C++
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
5 0
|
2天前
|
算法 C++ 容器
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
11 0
|
2天前
|
C++
【C++】string类(介绍、常用接口)
【C++】string类(介绍、常用接口)
18 2
|
2天前
|
存储 算法 前端开发
[C++基础]-stack和queue
[C++基础]-stack和queue
|
2天前
|
存储 算法 C++
详解C++中的STL(标准模板库)容器
【4月更文挑战第30天】C++ STL容器包括序列容器(如`vector`、`list`、`deque`、`forward_list`、`array`和`string`)、关联容器(如`set`、`multiset`、`map`和`multimap`)和容器适配器(如`stack`、`queue`和`priority_queue`)。它们为动态数组、链表、栈、队列、集合和映射等数据结构提供了高效实现。选择合适的容器类型可优化性能,满足不同编程需求。
|
2天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
18 0

热门文章

最新文章