C++之常用的三类数据结构--栈、队列、数组

   更多关于C++的总结汇总博客可以参考这个:C++刷题基础知识(栈、队列、hash、STL、基础函数等)---持续更新-CSDN博客

一、基本的数据结构

1.1 栈stack

1.1.1 stack的基本特性

C++ stack(堆栈)是一种基于后进先出(LIFO)原则操作的容器。它具有以下基本特性:

  • 后进先出(LIFO):只有位于堆栈顶部的元素可以被访问和删除,新添加的元素也会被放在堆栈的顶部。
  • 动态性:stack的大小是动态的,可以根据需要自动增长或缩小。
  • 随机访问:stack支持随机访问,可以通过索引直接访问任意位置的元素。但是注意,由于stack是后进先出(LIFO)的,所以最后一个添加到stack中的元素是第一个被访问的。
  • 容器的通用性:stack可以容纳任何类型的元素,包括基本类型和自定义类型。

1.1.2 stack的代码使用例程

#include <stack> //头文件

std::stack<int> myStack;  // 栈的声明创建

using namespace std;   //忽略std::
stack<int> myStack;


myStack.push(10);      //通过push添加元素
myStack.push(20);  

int top = myStack.top(); // 获取栈顶元素

myStack.pop(); // 删除栈顶元素

bool isEmpty = myStack.empty(); // 判断栈是否为空

int size = myStack.size(); // 获取栈的大小



//一些高级使用方法,自定义栈(固定类型和固定长度)
std::stack<int, std::vector<int>> myStack;

1.1.3 stack的用法总结(表格)

函数名 功能描述
push() 向栈顶添加一个元素
pop() 删除栈顶元素
top() 返回栈顶元素的值
empty() 判断栈是否为空,如果为空则返回true,否则返回false
size() 返回栈中元素的个数
clear() 清空栈中的所有元素。

1.2 单端队列queue

1.2.1 queue的基本特性

C++ queue是一种基于先进先出(FIFO)原则操作的容器。它具有以下基本特性:

  • 先进先出(FIFO):队列的头部是第一个被添加的元素,也是第一个可以被删除的元素。新添加的元素总是被放在队列的尾部。
  • 动态性:queue的大小是动态的,可以根据需要自动增长或缩小。
  • 随机访问:queue不支持随机访问,不能通过索引直接访问任意位置的元素。只能从队头开始依次访问。
  • 容器的通用性:queue可以容纳任何类型的元素,包括基本类型和自定义类型。

1.2.2 queue的代码使用例程

#include <queue>    //头文件声明
  
using namespace std;  
  
    
queue<int> q;  // 创建一个整数类型的队列  
  
q.push(10);  // 在队列尾部添加元素 

bool em=q.empty(); //判断队列是否为空

int ans=q.front(); //获取队列的头部第一个元素


int ans=q.back(); //获取队列的尾部第一个元素
   
q.pop();  //删除队列头部第一个元素

int qsize=q.size();    //获取队列大小

1.2.3 queue的用法总结(表格)

函数名 功能描述
push() 在队列尾部添加一个元素
pop() 删除队列的头部元素
front() 返回队列的头部元素
back() 返回队列的尾部元素
empty() 判断队列是否为空(元素个数为0)
size() 返回队列中元素的个数
clear() 清空栈中的所有元素。

 1.3 双端队列deque

1.3.1 deque的基本特性

C++ deque(双端队列)是一种具有队列和栈的性质的数据结构。它支持在队列的前端和后端进行插入和删除操作。其基本特性包括:

  • 双向队列:deque在队列的两端都可以进行插入和删除操作。
  • 动态数组:deque底层通常使用动态数组实现,可以动态地增长和缩小。
  • 顺序存储:deque中的元素是顺序存储的,相邻元素在内存中相邻存储。
  • 支持随机访问:deque支持使用索引进行访问,可以随机访问队列中的元素。
  • 高效的插入和删除操作:deque在队列的两端插入和删除元素的复杂度为O(1)。

1.3.2 deque的代码使用例程

#include <iostream>  
#include <deque>   //头文件声明 

using namespace std;
deque<int> d;  // 创建一个空的deque  
  
     
d.push_front(1);   // 在队列前端插入元素
  
    
d.push_back(3);  // 在队列后端插入元素   

int ans=d.size();//队列大小

d.pop_front();  //删除队列第一个元素
d.pop_back(); //删除队列最后一个元素

bool em=d.empty();//队列是否为空

1.3.3 deque的用法总结(表格)

函数名 功能描述 时间复杂度
push_front() 在队列前端插入一个元素 O(1)
push_back() 在队列后端插入一个元素 O(1)
pop_front() 删除队列前端的一个元素 O(1)
pop_back() 删除队列后端的一个元素 O(1)
front() 返回队列前端的元素 O(1)
back() 返回队列后端的元素 O(1)
empty() 判断空

 1.4 数组容器vector

1.4.1 vector的基本特性

C++ vector是一种动态数组,它具有以下基本特性:

  • 动态性:vector的大小是动态的,可以在运行时添加或删除元素。
  • 随机访问:vector支持随机访问,可以通过索引直接访问任意位置的元素。
  • 容器的通用性:vector可以容纳任何类型的元素,包括基本类型和自定义类型。
  • 高效性:vector在内存中连续存储元素,因此访问元素的速度非常快。

1.4.2 vector的代码使用例程

#include <iostream>  
#include <vector>  
   
std::vector<int> v;  // 创建一个空的vector  
  
 
v.push_back(1);  // 在vector末尾添加元素 

int siz=v.size();   //返回vector数组大小

  
    
v.insert(v.begin(), 0);  // 在vector前端插入元素  

  
    
v.erase(v.begin() + 1);  // 删除vector中的元素  
  
     
v.clear();  // 清空vector中的元素 
  

1.4.3 vector的用法总结(表格)

函数名 描述
push_back() 在vector末尾添加一个元素
insert() 在vector前端或后端插入一个或多个元素
erase() 删除vector中的一个或多个元素
clear() 清空vector中的所有元素
resize() 调整vector的大小
empty() 判断vector是否为空
size() 获取vector的大小
capacity() 获取vector的容量
front() 获取vector第一个元素的值
back() 获取vector最后一个元素的值
operator[] 通过索引访问vector中的元素
begin() 获取vector的起始迭代器
end() 获取vector的结束迭代器
rbegin() 获取vector的逆向起始迭代器(从尾部开始)
rend() 获取vector的逆向结束迭代器(从尾部开始)

    更多关于C++的总结汇总博客可以参考这个:C++刷题基础知识(栈、队列、hash、STL、基础函数等)---持续更新-CSDN博客

相关推荐

  1. C++常用三类数据结构--队列数组

    2023-12-05 19:46:03       41 阅读
  2. 数据结构----队列

    2023-12-05 19:46:03       12 阅读
  3. 数据结构】 - 队列 &

    2023-12-05 19:46:03       26 阅读
  4. [数据结构] 队列C++作业

    2023-12-05 19:46:03       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 19:46:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 19:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 19:46:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 19:46:03       20 阅读

热门阅读

  1. 【Android】IntentService

    2023-12-05 19:46:03       38 阅读
  2. Android 监听User 切换的方法

    2023-12-05 19:46:03       26 阅读
  3. 【LeetCode周赛】LeetCode第374场周赛

    2023-12-05 19:46:03       39 阅读
  4. 分享一波chatgpt的常用prompt

    2023-12-05 19:46:03       28 阅读
  5. dockerfile的面试题

    2023-12-05 19:46:03       36 阅读
  6. 备忘录模式-C++实现

    2023-12-05 19:46:03       39 阅读
  7. Oracle行转列,列转行使用实例

    2023-12-05 19:46:03       32 阅读
  8. docker 切换镜像源

    2023-12-05 19:46:03       32 阅读