双端优先队列
在计算机科学中,双端优先队列(double-ended priority queue,DEPQ)或双端堆(double-ended heap)是一个类似于优先队列或堆的数据结构,但允许根据数据结构中的键对最大值和最小值进行高效的删除操作,即可以对元素按升序或降序删除。每个元素均有一个优先级或值。 操作 一个双端优先队列有如下操作: ;isEmpty():双端优先队列为空时返回true。 ;size():返回双端优先队列中存在的元素个数。…
共 12 篇文章
在计算机科学中,双端优先队列(double-ended priority queue,DEPQ)或双端堆(double-ended heap)是一个类似于优先队列或堆的数据结构,但允许根据数据结构中的键对最大值和最小值进行高效的删除操作,即可以对元素按升序或降序删除。每个元素均有一个优先级或值。 操作 一个双端优先队列有如下操作: ;isEmpty():双端优先队列为空时返回true。 ;size():返回双端优先队列中存在的元素个数。…
迭代器(),是使用户可在容器物件(,例如鏈表或陣列)上遍訪的物件,設計人員使用此介面無需關心容器物件的内存分配的实现细节。其行为很像数据库技术中的游標(),迭代器最早出现在1974年设计的CLU编程语言中。 在各種語言實作迭代器的方式皆不盡同,有些物件導向語言像Java、C#、Ruby、Python、Delphi都已將迭代器的特性內建語言當中,完美的跟語言整合,可稱之為隱式迭代器。但像是C++語言本身就沒有迭代器的特色,但STL仍利用模…
在计算机科学中,关联数组(),又称映射()、字典()是一个抽象的数据结构,它包含着类似于(键,值)的有序对。一个关联数组中的有序对可以重复(如C++中的multimap)也可以不重复(如C++中的map)。 这种数据结构包含以下几种常见的操作: 向关联数组添加配对 从关联数组内删除配对 修改关联数组内的配对 根据已知的键寻找配对 字典问题是设计一种能够具备关联数组特性的数据结构。解决字典问题的常用方法,是利用散列表或搜索树。有些情况下,…
在计算机科学中,容器是指一種类、数据结构、或者抽象数据类型,其实例为其他类的对象。换言之,它们以一种遵循特定访问规则的方法来存储对象。容器的大小取决于其包含的对象(或元素)的数目。潜在的不同容器类型的实现可能在空间和时间复杂度上有所差别,这使得在给定应用场景中选择合适的某种实现具有灵活性。 概览 容器可以三种方式看待: 访问:即访问容器中对象的方式。 在数组中,访问凭借数组索引完成。 在栈中,访问遵循先入后出(或后入先出)的顺序。 在队…
在計算機科學中,多重關連數組(),是一種抽象資料結構,它儲存著(鍵,值)的有序對,和map不同之處在於,多重關連數組的有序對可以重複。通常,多重關連數組是利用在map中使用串列或集合當作值的欄位。這種數據結構包含以下幾種常見操作: 向關聯數組添加配對 從關聯數組內刪除配對 修改關聯數組內的配對 根據已知的鍵尋找配對 使用模式 當需要對一同一個鍵值儲存大量資料時,可以使用多重關連數組。 舉例來說,在學生選課系統中,一個學生可以選擇多門課程…
生成器(Generator),是计算机科学中特殊的子程序。实际上,所有生成器都是迭代器。生成器非常类似于返回数组的函数,都是具有参数、可被调用、产生一系列的值。但是生成器不是构造出数组包含所有的值并一次性返回,而是每次产生一个值,因此生成器看起来像函数,但行为像迭代器。 生成器可以用更有表达力的控制流结构实现,如协程或头等續體。生成器,也被称作半协程(semicoroutine),是特殊的、能力更弱的协程,总是在传回一个值时把控制交还给…
在計算機科學中,串列()或序列(),是一種抽象数据类型,一種有限的有序值的集合,其中每个值可以出现多次。列表的一个实例是在計算機中用來表現出數學上有限-{序列}-的概念;列表的无限类似是流。列表是容器的一个基本例子,因为它们包含其他值。在串列中的每個值(value),稱為項目(item)、條目(entry)或元素(element);如果相同的值出现多次,每一次出现都认为是分立的一个项目。列表和数组区别在列表只允许顺序访问,而数组允许随机…
和3条边的有向图]] 在计算机科学中,图()是一种抽象数据类型,用于实现数学中图论的无向图和有向图的概念。 图的数据结构包含一个有限(可能是可变的)的集合作为节点集合,以及一个无序对(对应无向图)或有序对(对应有向图)的集合作为边(有向图中也称作弧)的集合。节点可以是图结构的一部分,也可以是用整数下标或引用表示的外部实体。 图的数据结构还可能包含和每条边相关联的数值(),例如一个标号或一个数值(即权重,;表示花费、容量、长度等)。 操作…
抽象資料型別(,縮寫:ADT)是计算机科学中具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种程序设计语言的数据类型。抽象数据类型是间接定义的,通过其上的可执行的操作以及这些操作的效果的数学约束(与可能的代价)。 例如,抽象的堆疊(stack)由3个操作定义:推入push,彈出pop(接受约束:每次彈出返回的是最新被推入且没有被弹出的数据,也就是後進先出),查看堆疊頂端数据peek。当分析使用堆疊演算法的效率,所有…
堆疊(stack)又稱為棧或-{zh-cn:堆叠; zh-tw:堆棧;}-,是计算机科學中的一種抽象資料型別,只允許在有序的線性資料集合的一端(稱為堆疊頂端,top)進行加入数据(push)和移除数据(pop)的運算。因而按照後進先出(LIFO, Last In First Out)的原理運作,堆疊常用一維数组或連結串列來實現。常與另一種有序的線性資料集合佇列相提並論。 操作 堆疊使用兩種基本操作:推入(压栈,push)和彈出(弹栈,p…
佇列,又稱為-{zh-hans:伫列;zh-hant:隊列}-(queue),计算机科學中的一種抽象資料型別,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。 队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。 单链队列 单链队列使用链表作为基本数据结构,所以不存在伪溢出…
在计算机科学中,集合是一组可变数量的数据项(也可能是0个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,这些数据项的类型是相同的,或基类相同(若使用的语言支持继承)。列表(或数组)通常不被认为是集合,因为其大小固定,但事实上它常常在实现中作为某些形式的集合使用。 集合的种类包括列表,集,多重集,树和图。枚举类型可以是列表或集。 列表 在列表中,数据项的顺序是确定的,也可以存在多个相同的数据项。列表支持的操…