C++几种常见的数据结构
一、数据结构
数据结构可以分为如下几种:
1、线性表
线性表存储的数据是依次排列的,具有一对一的相连方式。每个元素的左右两边都具有小于或等于1个相邻节点。
线性表从存储方式来说,分为顺序存储和链式存储。
1)顺序存储结构
具有顺序存储结构的线性表又叫顺序表。顺序表相邻(逻辑地址相邻)的两个节点,在内存中具有相邻的物理地址。比如数组(C++中使用 int arr[10]、STL中的vector)。
数组和STL中的vector都是顺序存储容器。区别是数组是静态分配内存的,在定义时就已经确认好大小;而vector具有自己的扩容机制,只要内存够用可以不断push进数据。
由于vector是顺序存储结构,所以如果发生了扩容,需要重新申请一块更大的连续内存空间,并将原数据复制过去,所以存储地址有可能发生变化。
2)链式存储结构
具有链式存储结构的线性表又叫链表。链表相邻(逻辑地址相邻)的两个节点,在内存中的物理地址不一定相同。
STL中的 list 就是双向链表结构
3)栈和队列
栈和队列是特殊的线性表,因为他们对数据的进出顺序做出了明确的要求。
栈:进入栈的数据要符合先入后出的原则。见如下栈结构,A、B、C依次入栈,则弹出顺序为C、B、A
STL中具有栈的容器类型 stack
队列: 进入队列的数据要符合先入先出的原则。见如下队列结构,A、B、C依次进队列,则出队列顺序为:A、B、C
STL中具有栈的容器类型 queue
2、树结构
树是具有1对多的对应关系的数据存储结构。如下图所示是我们比较常用的二叉树结构,二叉树具有1对2的对应关系
STL中没有树的容器,但是我们可以简单实现一个树节点,下面是一个二叉树的节点
template<typename T>
struct TreeNode
{T data; //数据TreeNode* left; //指向左孩子节点的指针TreeNode* right; //指向右孩子节点的指针TreeNode(T dat, TreeNode* lft = nullptr, TreeNode* rig = nullptr):data(dat), left(lft), right(rig) {}
};
3、图结构
树是具有多对多的对应关系的数据存储结构。
STL中没有图的容器
推荐下面的文章学习图结构
图——C++实现_Mind_V的博客-CSDN博客_图c++https://blog.csdn.net/mind_v/article/details/75941252
C++几种常见的数据结构相关推荐
- 【算法】图文并茂,一文了解 8 种常见的数据结构
百度百科对数据结构的定义是:相互之间存在一种或多种特定关系的数据元素的集合.定义很抽象,需要大声地朗读几遍,才有点感觉.怎么让这种感觉来得更强烈,更亲切一些呢?我来列举一下常见的 8 种数据结构,数组 ...
- redis五种常见的数据结构
文章目录 概述 一.对象的类型和编码 二.五种数据结构 五种数据结构的底层实现结构 1.字符串(String) 1)int 编码 2)embstr 编码 3)raw 编码 2.列表(List) 1)z ...
- 几种常见树形数据结构小结
最近新学习了很多厉害的数据结构,在大佬们的熏陶之下,也感悟了很多,对大佬们的实力也有了更加深厚的了解(先膜一番orz,换个姿势zto,再来一次owz) 左偏树 左偏树又名可并堆,多被用来对一些需要合并 ...
- 面试中常见的数据结构
上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈.队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~ 首先,先来回顾下C语言中常见 ...
- 数据结构和算法练习网站_视频和练习介绍了10种常见数据结构
数据结构和算法练习网站 "Bad programmers worry about the code. Good programmers worry about data structures ...
- java八种基础数据结构_8种常见数据结构及其Javascript实现
摘要: 面试常问的知识点啊... Fundebug经授权转载,版权归原作者所有. 做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其是数据结构和算法这块,所以今天整理了一下常见的 ...
- JavaScript 数组拼接打印_8种常见数据结构及其Javascript实现
摘要: 面试常问的知识点啊- 原文:常见数据结构和Javascript实现总结 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 做前端的同学不少都是自学成才或者半路出家,计算 ...
- Javascript中的8种常见数据结构(建议收藏)
1.Stack(栈) 堆栈遵循LIFO(后进先出)的原则.如果你把书堆叠起来,上面的书会比下面的书先拿.或者当你在网上浏览时,后退按钮会引导你到最近浏览的页面. Stack具有以下常见方法: push ...
- 【数据结构】549- 8种常见数据结构(JS实现)
来源 | https://segmentfault.com/a/1190000020011987 本文代码较多,建议PC阅读~ 做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其 ...
最新文章
- init-connect mysql_MySQL利用init-connect增加访问审计功能异常
- eclipse 向HDFS中创建文件夹报错 permission denied
- 八皇后算法python_Python学习二(生成器和八皇后算法)
- 快手-中科大最新研究:利用对话式推荐解决用户冷启动问题
- 内存中原码,反码,补码,查看数值范围,,或,异或,取反,左右移位操作
- python中execute函数_Python中的函数定义与参数使用
- java mail 设置参数
- 【图精】徐克镜头里的十大美人
- 初学python之路-day15
- myisam为什么比innodb查询快_mysql存储引擎之MyISAM 和 InnoDB的比较
- 10 JavaScript函数
- Ubuntu安装显卡驱动
- 应用程序无法正常启动(0xc0150002)
- 数理经济模型(1)---蒙特卡洛仿真Monte Carlo Simulation
- OAuth2:资源服务器
- java中汉语转化成拼音的使用详解
- 2018-PAT春季考试小结
- UE4编辑器修改界面显示语言
- GTK槽回调函数,组件颜色,布局控件
- calendar java起始于结束时间,java获取一天的开始时间和一天的结束时间
热门文章
- 二叉搜索树,二叉平衡术,红黑树,B树,B+树
- VS2019 特别慢_慢囤句:25句简短俏皮可爱的秋天句子,热爱生活的你,读过多少?...
- 定时给ta讲笑话python3.x
- 单键四档调色手电筒方案
- python,路径拼接,字符串拼接,os.path.join()函数怎么用?
- MySQL员工部门查询
- 【项目一】基于Qt平台的交互式输入与输出窗口
- UEFI BIOS启动过程
- 前台Autoform 选择下拉框的值进行判断(js)
- re学习笔记(59)BUUCTF - re - [ACTF新生赛2020]Oruga