数据结构者

数据(data):可被计算机接受处理的符号总称

数据元素(data element):数据的基本单位,常作为一个整体进行考虑和处理

一个数据元素可以由若干个数据项(data item)组成

 

数据对象(data object):性质相同的数据元素集合

 

数据结构(data structure):相互之间存在特定关系的数据元素集合

 

Data_Structure = {D,R}

Data object(D) + Specific existing relationships(R)

 

逻辑结构:描述数据元素间逻辑关系

物理结构/存储结构:数据结构在计算机中的表示

 

按某种物理结构存储数据时,要能恢复其逻辑结构

 

数据类型(data type):值集合和值集合上操作的总称

 

原子类型(atom type)

结构类型(structure type)

作用:实现信息隐藏

 

抽象数据类型(abstract data type):(数据类型是抽象数据类型的物理实现)数据类型的延伸(值集合和值集合上的操作/数学模型和模型上的操作),是一个三元组,(D,R,P)

P -> 对数据的操作/处理

抽象在何处:不关注其物理实现,抓住本质,忽略细节

例如:语文成绩,不关注是浮点还是整型

 

集合结构(sets):none specific relationship

线性结构(linear)

树形结构(tree structure)

可将树组织成堆(heap)

图结构(graph)

网(net):带权图

 

 

线性表(linear list):逻辑结构

顺序表和链表是常用的实现线性表的数据结构

堆栈与队列(stack queue):有特定特征的线性表,两种数据结构

字符串(String):特殊的线性结构,以字符为元素

不讲也不考

 

树(tree):逻辑上表示结点层次关系的非线性结构

 

graph/net:一个结点集合和一个边集合

 

 

 

算法(algorithm):为解决问题的一系列操作

特征:

finity(有限)

certainty(确定/无二义)

feasibility(可行)

input(输入)

output(输出)

 

设计要求:

正确correctness(对几组数据/对苛刻数据/对所有合法数据)

可读性(readability)

健壮性(robustness)(处理异常情况)

efficiency and low storage(高效低耗)

 

算法分析:

事后统计法(empirical comparison):

缺陷(disadvantage):

必须先运行程序/依赖于计算机软硬件环境等因素(vary with the environment)

 

事前估计法(asymptotic algorithm analysis):

因素(factors):

a.算法策略(strategy of algorithm)

b. 问题的规模(scale of problem itself)

c. 编程语言

d.  编译程序产生的机器码质量(quality of machine code after compilation)

e. 机器指令执行速度(speed of machine instruction)

 

语句频度总数->时间复杂度

辅助空间->空间复杂度

 

算法上界(upper bound/worst)和下界(lower bound/best)

average case

O表示上界

 

 

 

数据结构是算法处理的对象,也是设计算法的基础

 

 

 

顺序表(sequential list)

线性表的一种实现,存储在连续空间,亦称向量

计算地址:略

 优缺点

 

链表(linked list):

第二种链表结构:Head node用来记录元信息

H->head->next才表示第一个有效元素

 

 

静态链表(static linked list):

 

 

 静态链表即不想在插入/删除时,大规模移动元素

又不想像普通链表一样存储密度较低,所以使用int cursor(冰云:其实感觉和普通链表比没什么绝对优势)

 

 

内存管理:

用链式结构管理

 

例题:

 

 

环形链表:

下图第一个:head执行第一个有效结点

下图第二个:head指向头结点

 

 

 

双链表:

 

 

 

栈(stack)(限定性线性表)

将入栈/进栈,出栈/退栈操作仅允许在栈顶

又称:LIFO表(Last In First Out)

 

顺序栈:用地址连续的存储单元依次存储元素

 

多栈共享技术

一个程序同时使用多个栈时,可能出现有的栈溢出,有的栈空闲的情况,分配不均,且无法动态调整

故产生多栈共享技术

 

双端栈:两个栈的共享技术

两个栈的栈底分置一维数组两端,栈顶动态变化

 

链栈:以链表作为存储结构

不用预估栈的最大容量,系统空间足够,则链栈不会溢出

 

采用多个链表实现多个链栈

将多个链栈的栈顶指针放在一维数组中统一管理

冰云:hashmap

 

队列

防止队列假满:

1:循环队列

2:队列动态扩展

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值