您现在的位置是:首页 >技术教程 >数据结构与算法网站首页技术教程
数据结构与算法
简介数据结构与算法
逻辑结构
对逻辑结构(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(): // 若栈已满返回真
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。