数据结构与算法

逻辑结构

对逻辑结构(k,r),其中rϵR k为节点集,
对结点集k建立一个从k到存储器N的单元的映射:K→M,对于每一个结点j∈M

数据的存储结构是从逻辑到其物理存储单元的一个映射,物理存储单元必须在内存中,因为数据必须在内存里才能跟CPU进行直接的通讯才能完成计算操作。

内存可以看作从低到高地址的一个编码的线性结构,我们想访问哪一个内存单元都可以根据地址立即访问不需要搜索。

数据结构有三个方面:逻辑结构、存储结构和运算

存储结构有顺序、链接、索引和散列四种形式。顺序存储对应于数组,链接存储对应于链表。

数组存储地址之后,我们可以根据地址找到其他元素的起始存储地址,数据结构中所定义的节点的存储空间是连续的,主节点申请的地址是连续的,

数据结构中每定义一个节点,所申请的内存中间都必须是连续的,如果节点中有指针域,可以另外开辟空间来存储

四类存储结构:顺序、连接、索引、散列
索引:对这个数据建立一个索引表,通过这个表能够有效的找到相应数据的存储地址
散列是一种特殊的索引结构,本身也是一种存储结构,散列可以通过关键码的一个映射,在整个散列单位中用单位时间快速找到其它的存储地址,然后读出相应的数据。

抽象数据类型

  • 定义一组运算的数学模型
  • 与物理存储结构无关
  • 使软件系统建立在数据之上(面向对象)
  • 模块化的思想的发展
  • 隐藏运算实现的细节和内部数据结构
  • 软件复用
    数据使用者最关心的是数据的逻辑结构,以及能够支持的运算,数据在内存中如何存储并不关心,只需要描述相关逻辑结构和相关运算。
    搭建更复杂系统的时候不需要关注底层的具体实现,而且底层改为不同形式的调用也不影响上层方式的使用,只需要对头文件的实现形式
    抽象数据结构二元组<数据对象D,数据操作P>
    先定义逻辑结构,再定义运算
    –逻辑结构:数据对象及其关系
    –运算:数据操作
    抽象数据类型就是在逻辑结构之上的运算,可以看成一个二元组,
    C++等面向语言中所定义的类(特别是抽象类)其中封装了数据成员和函数成员。描述号逻辑结构之后再描述相应的运算操作,就可以很好的描述这个抽象数据类型。
    栈是一种操作受限制的线性结构
    它的插入和删除操作也就是进栈push、出栈pop限制再同一端进行
    除了压栈和出栈还有读栈顶、判栈空等操作。
template <class T>      // 栈的元素类型为 T
class Stack f
public:                   //栈的运算集
void clear0);              //变为空栈
bool push(const T item)   //item入栈,成功返回真,否则假
bool pop(T & item);      / /弹栈顶,成功返回真,否则返回假
bool top(T& item)/ 读栈顶但不弹出,成功真,否则假
bool isEmpty(;         // 若栈已空返回真
bool isFull()// 若栈已满返回真

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值