抽象数据类型

1.相关术语
抽象数据类型:ADT 指一个用数学模型以及定义在此数学模型上的一组操作。通过高级语言的已有数据类型实现,定义域,类型,,接口,实现,不公开实现的细节。
定义域:由值组成的集合,描述取值范围。
接口:用于沟通的中介物的抽象化。
顺序查找:在无序数组中按顺序查找的算法。
线性查找:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素,又称为顺序查找。

2.在数据集中查找给定值
线性查找:数组版本

int LinearSearch(int k,const int data[],int N)
{
    //输入:k-待查值;data-数据集;N-数据集长度。
    //const 固定结构
    //输出:利用return语句返回。
for(int pos=o\0;pos<N;pos++)
    if(data[pos]==k)
    return pos;//找到k,返回位置信息。
return N;//未找到k,返回N.
}

一:长度受限
以上的代码段缺点明显,数组的长度受到限制。
引入一个新的概念以解决如上问题。
容器:vector–抽象数据类型 向量 ,顺序数据类型,核心为动态分配数组。

线性查找:向量版本

int LinearSearch(int k,const vector<int>&vdata)
{
    //输入:k-待查值;vdata-数据集名;
    //vector<int>仅存储int型变量;
    //&vdata:获取部分控制权。
    //输出:利用return返回。
    //vdata.size()内蕴数据集长度;
    //在for循环中用vdata.size()控制条件
    for(size_t pos=0;pos<vdata.size();pos++)
        if(vdata[pos]==k)
            return pos;
        return vdata.size();
}

二:有顺序则难以改变
引入链表的概念 linked list
有效的应对数据的动态变化,打破连续存储的物理形态。

三:查变难以平衡
有序数组:变动困难,查找简单
无序数组:变动简单,查找困难

引入数据结构:二分查找树
javascript中的DOM文档树模型

数组,链表和树是三种最基本的数据存储结构形态。

数据库和数据集
术语:
数据库:数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据集:又称为资料集,数据集合,或资料集合,是一种数据所组成的集合。
抽象数据类型:SET
数据集x存放T型元素,key为T型对象,考虑一种与T有关的类型D
,x中每个元素都唯一对应一个D型指针*p,对p使用p->data可得到对应的元素;

STL容器一览
使用vector容器必须包含对应的头文件

#include<vector>//头文件
using std::vector;//使用vector在std空间中的对应的名字

向量容器–vector
动态伸缩
列表容器–list
不可像vector 一样用下标进行位置访问
list操作表首:
front(返回表首元素)
push_front(在表首插入新元素)
pop_front(删除表首元素)
list操作表尾
back
push_back
pop_back
注意:
只能操作表首和表尾的抽象数据类型称谓双端队列,封闭一个方向可以实现栈或队列.
栈容器–stack
pop删除栈顶元素
push将新元素置顶
top返回栈顶元素
队列容器–queue
pop删除队首元素
push将新元素放于队尾
front返回队首元素
优先级队列容器–priority——queue
集合容器–set
多重集合–multiset
映射容器–map

迭代器
SET中容器多提供了迭代器,SET抽象数据类型提供指针以访问其元素地址,位置。
类似于导游 通常将遍历多个数据接口,访问受限制的容器一般不可使用迭代器。栈,队列,优先级队列
适配器
如果原有的抽象数据类型所提供的功能过于庞杂或者接口不是特别满足实际需求,则可对其进行简单的改装,借鉴了黑盒,在盒内对其进行改装,改装所得到的新的数据类型成为适配器。
组合
当常见的抽象数据类型不足以达成目的时,组合可为我们提供另一种解决问题的思路,简单的组合是将较小的基本抽象数据类型组合成更大的数据类型,以实现更加复杂的功能。
完美的混乱
桌上办公是算法和数据结构的完美结合
查 和 变 两个永恒的主题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值