栈、向量、映射(多重映射)、列表、集合、队列、优先队列(小知识--待补充)

栈(Stack)

原则:先进后出(LIFO)、后进先出(FOLI)

先进入的数据被压入栈底,最后进入的数据在栈顶;读取数据时从栈顶开始弹出数据(最后一个压入的数据被第一个读取出来)

允许进行插入和删除操作的一端称为栈顶(Top),另一端为栈底(Bottom),栈底固定,而栈顶浮动

栈中元素个数为零时称为空栈。插入一个元素称为进栈(Push),删除一个栈顶元素称为出栈(Pop)

#include <stack>
成员函数功能
bool empty()栈为空,返回true,否则返回false
void pop()删除栈顶元素,即出栈
void push(const TYPE & val)将新元素val进栈,使其成为栈顶的第一个元素
TYPE & top()查看当前栈顶元素
size_type_size()返回堆栈中的元素数目

向量(vector)

是一个动态数组,随机存取任何元素都能在常数时间完成。

vector是一个线性顺序结构,相当于数组

#include <vector>

映射(Map)、多重映射(Multimap)

一种基于某一类型Key的键集的容器,提供对TYPE类型的数据进行快速和高效的检索

Multimap允许重复键值,Map不允许

Map内部数据的组织是一颗红黑树(一种严格意义上的平衡二叉树),这棵树具有对数据自动排序的功能,所以在Map内部所有的Key都是有序的

#include <map>

列表(list)

是一个线性链表结构(Double-Linked Lists,双链表),数据由若干个结点构成,每一个结点都包括一个信息块Info(即实际存储的数据)、一个前驱指针Pre和一个后驱指针Post

无须分配内存大小且可以任意收缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来

由于结构原因,List随机检索的性能非常不好,因为它要从头一个一个地顺序查找。检索时间与目标元素的位置成正比。

虽然随机检索不够快,但是它能够迅速地在任意结点进行插入和删除操作

#include <list>

集合(Set)

是一个容器,其中包含的元素的值是唯一的。

集合中的元素按一定的顺序排列,并被作为集合中的实例

一个集合通过一个链表来组织,其具体实现采用了红黑树的数据结构。

在插入操作和删除操作上比向量(Vector)快,但查找或添加末尾的元素时会有些慢

#include <set>

队列(Queue)

原则:先进先出(FIFO)

是一种特殊的线性表,只允许在表的前端(Front)进行删除操作,而在表的后端(Rear)进行插入操作。

进行插入操作的端称为队尾,进行删除操作的端称为队头。队中无元素时,称为空队列

#include <queue>

优先队列(Priority Queue)

与队列一样,只能从队尾插入元素,从队首删除元素

但是,与队列不同的是,优先队列中最大的元素总是位于队首,所以出队时,并非按照先进先出原则进行;而是将当前队列中最大的元素出队。

元素的比较规则默认按元素值从大到小排序,可以重载<操作符来重新定义比较规则

#include <queue>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值