数据结构
1.定义
一组用来保存一种或者多种特定关系的 数据的集合(组织和存储数据)
程序的设计: 将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,
并在此基础上实现某个特定的功能的操作;
程序 = 数据结构 + 算法 MVC:软件设计架构 M:数据的管理(数据结构) V:视图,数据的反映及人机交互 C:逻辑控制
程序设计思想: 面向过程: 面向对象:
2.数据与数据之间的关系
数据的逻辑结构:数据元素与元素之间的关系
集合:关系平等
线性结构:元素之间 一对一 的关系(表(数组,链表),队列。栈。。。)
树型结构:元素之间 一对多 的关系(二叉树)
图形结构:元素之间多对多的关系(网状结构)
这里我们主要学习的是线性结构和树形结构,图形结构过于复杂不做讨论
数据的物理结构:数据的逻辑结构在计算机内存中的存储形式
1. 顺序存储(如数组): 采用一段 连续的内存空间 保存元素
优点: 空间 连续 访问 方便
缺点: 插入删除需要移动大量的元素 int a[32] ={1,2,3,4,5,6,7,8,9}
需要 预分配内存空间
容易造成 存储空间碎片 在结构体中,在内存对齐时,字节大小为16字节,而实际大小为10字节 此时产生内存空间碎片为6个字节
2.链式存储: 采用一组 非连续的内存空间 保存元素
缺点: 访问元素 效率低
优点:插入和删除数据 方便
不需要 预分配内存
1.创建链表 2.插入:头插,尾插 3.删除:头删,尾删 4.查找 5.修改 6.销毁 7.遍历
索引存储: 通过 关键字 构建 索引表,通过 索引表 来来找到数据的存储位置 (占内存,效率高)
散列存储(哈希存储): 将数据元素的存储位置与关键码之间建立确定对应关系从而实现查找的存储方式 (效率低)
3. 储备知识
指针
结构体
动态内存分配
链式: 单向链表,双向链表,栈,队列。
二叉树: 哈希表(算法)
链表: 单向链表 有头链表 无头链表
知识散记: malloc堆的返回值是(void *) 指针符号 * 在32位系统中是 4个字节 在64位系统中是 8个字
plist 操作链表的句柄 声明全局变量是不能初始化的,变成局部变量 extern int a =0 (x) 代码分屏推拉指令:set mouse = a (代码页面)
内库 push(推进) pop(弹出)
1、push是什么?(推进)
push就是推,延伸为推进。这个它是汇编的一个指令,(在其它语言中也可能会见到它)。意思都是差不多的,就是把一个元素放入栈中。你可以假想栈是一个放光盘的那种盒子,有底没盖,先push进去的光盘总是要等后push进去的出来后才能出来。
2、pop是什么?(弹出)
pop和push相反,它的意思是弹出,就是从栈里弹出一个元素,每次弹出的都是栈顶(光盘盒最上面那个,也就是最后放进去的那个)的那个元素。
3、push和pop的区别?
push是推进,pop是弹出。
push是把元素先推到最底层,由此类推,后推入的元素在最上面。 而pop是弹出,就是由高到低的一次弹出,每次弹出的就是push后推进去的元素,也就是说pop每次弹出的都是最上面的那个元素。
4、如何判断controller是被push过来的还是pop过来的?
只有push 才会执行 viewDidLoad 等等,
pop是不会执行的。 因为viewDidLoad的意思就是在视图加载后被调用,指的是当程序一执行的时候的就开始创建。所以就好比push的推进。 而pop是弹出,所以不适合用在viewDidLoad里面。
转载于:https://www.cnblogs.com/liuzhi20101016/p/5541442.html