数据结构1

研究非数据计算的学科,专注于数据的关系及操作
*程序=数据结构+算法

  1. 数据结构的基本概念
    数据:所有能输入到计算机中的描述客观事物的符号
    数据项:有独立含义的数据的最小单位 描述事物的一项指标 (形容人:年龄,身高之类)
    数据元素:数据的基本单位,也叫节点或记录 描述一个事物(一个人)
    数据结构:数据元素+数据关系组成的集合(一个班)
    算法:
    狭义:数据结构所具有的功能
    广义:解决问题的方法

  2. 数据结构3方面
    数据的逻辑结构
    数据的存储结构
    数据结构的算法

  3. 四种基本的逻辑结构(逻辑结构)
    集合:数据元素之间除了同属一个集合外,没有其他关系
    线性结构:数据元素之间存在一对一关系(类似数组下标与元素对应)
    数组、链表、功能受限的表(栈(管理方式)、队列)
    树型结构:数据元素之间存在一对多关系
    普通树、二叉树(完全、满、有序二叉树)
    图(地图)形结构:数据元素之间存在多对多关系(树型结构的一种扩展)
    阾接表、表的遍历(深度优先、广度优先)、最短路径

  4. 数据结构的存储方式(物理结构)
    顺序存储
    数据存储在一段连续的空间,用数据元素在存储器的位置来表示数据元素的关系
    优点:能随机访问,效率高,不易产生内存碎片
    缺点:空间利用率低,对内存要求高(必须是整块内存),元素添加删除不方便
    链式结构(非顺序)
    结构中的每一个元素存储在彼此独立的空间中,每一个元素中增加一个或多个数据项用来存放另外一个元素的地址(指针),用来表示数据元素之间的关系
    优点:插入删除方便,空间利用率高,对内存要求低
    缺点:不能随机访问只能逐个遍历,查找效率低,易产生内存碎片

     	注意:每一种逻辑结构采用什么物理结构实现,没有明确规定。通常根据实现的难度以及在时间空间的要求,再选合适的物理结构。可能是顺序和链式混合存储			
    
  5. 数据结构与存储结构的关系
    表:顺序/链式
    树:顺序/链式
    图:顺序和链式混合
    每种逻辑结构用什么物理结构存储没有规定,通常根据难易程度、时间和空间上的要求,选择最合适的存储物理结构。

  6. 数据结构的运算
    1、创建
    2、销毁
    3、加元素
    4、删除元素
    5、修改元素
    6、查找元素
    7、排序
    8、遍历
    9、访问

表:
顺序表(存储结构)
1、设计数据结构
2、分析所具备的算法
3、分析算法
4、使用算法
链式表(存储结构)(/数据结构与算法/队列/链式队列/list.c old_list.c new_list.c)
m每个元素都独立存储在内存中的任意位置,元素之间有指针指向来维护关系(元素中有一个数据域指针,指向自己的类型)。

功能受限的表
栈(逻辑结构)
限制为只有一个端口进出元素(先进后出),一般常用于表达式解析,内存管理。(为函数的调用提供支持)
顺序栈(/数据结构与算法/栈顺序栈/is_pop.c) 容量有限
链式栈 容量理论上可以无限(受制于电脑内存)
队列(逻辑结构)
限制为两端进出元素,一个管进,一个管出(先进先出)
顺序对列(/数据结构与算法/队列/顺序队列/queue.c)
链式队列

链式栈
创 销毁 入栈 出 栈空 栈顶

链式队列
创 销毁 入队 出队 查看队头 查看队尾 对空

函数指针
函数就是一段数据(由代码编译的二进制指令),存储在代码段中
函数名就是指向这段数据的指针,可以把我函数指针当做参数在函数之间传递
void qsort(void* base,size_t nmemb,size_t size,
int(compar)(const void,const void*))
base 数组的首地址
nmemb 数组大小
size 数组字节

通用链表
void* 万能指针,可与任意类型指针转换
存储数据地址
void*不能直接解引用
注意:由于储存的类型不确定,所以类型的运算规则不确定,但需要运算时,需要使用者提供运算。这叫回调
标准库的qsort函数就是回调

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值