【数据结构】表(List)与其在C++中的实现与迭代器itera

2019-08-08  本文已影响0人  超级超级小天才

这是数据结构类重新复习笔记的第 一 篇,同专题的其他文章可以移步:https://www.jianshu.com/nb/39256701

抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。An abstract data type (ADT) is a set of objects together with a set of operations.

标准模板库(Standard Template Library,SLT)。实现了ADT等数据结构,这些数据结构被称为集合(collection)或者容器(container)

表(List)

表的实现方式

表的常用操作

表的两种简单形式

简单链表实现

简单链表

双向链表

双向链表

表的两种重要操作

链表的插入

链表的插入

链表的删除

链表的删除

时间复杂度

基本操作 静态 数组实现 动态 链表实现
printList O(n) O(n)
makeEmpty O(n) O(1)
find O(1) O(i)
insert O(n) O(1)
remove O(n) O(1)
findKth O(1) O(i)
next O(1) O(1)
previous O(1) O(i)

STL中的向量和表

表AST的实现方式

表ADT有两种流行的实现:

方法

迭代器

在STL中,使用迭代器(内置类型 iterator)给出数据在表中的位置。通常可以使用对应的模板来声明 iterator:

STLType<dataType>::iterator

获得迭代器

SLT的所有容器都拥有如下的方法可以获得容器中指向的第一个和终止标志的迭代器:

两种方法均可以根据所指向的容器类型返回一个恰当的迭代器,所以可以使用 auto 来声明它们,当你不知道应该如何声明的时候:

auto myIterator = STLCollection.begin();

迭代器方法

迭代器很多方法都来自于运算符的重载

从而,利用迭代器打印STL容器的方式如下:

for(vector<int>::iterator itr=v.begin(); itr != v.end(); ++itr)
  cout<<*itr<<endl;

vector<int>::iterator itr=v.begin();
while(itr!=v.end())
  cout<<*itr<<endl;

需要迭代器的表方法

一些表中常用的需要使用迭代器的容器方法:

迭代器的分类

迭代器的参考:http://www.cplusplus.com/reference/iterator/


转载请注明出处,本文永久更新链接:https://blogs.littlegenius.xin/2019/08/08/【数据结构】一表与迭代器/

上一篇 下一篇

猜你喜欢

热点阅读