1. 编程的目的
为了让计算机帮我们计算解决问题
- 算法——解决问题的方法
- 高级语言——py
数据非常多或庞大的话怎么存储?了解数据结构。
数据存储在内存中,数字1需要4个字节存储,12345都要存储,线性存储,
1 | 2 | 3 | 4 | 5 |
除了首元素,所有的元素都有前区元素,除了尾元素,其他的元素都有后区元素;
第一个元素的地址为0x10,第二个为0x14,第三个为0x18,第四个为0x1C,第五个为0x20。
第一个地址记录为p,那么第三个为p+4*2.
数列的元素类型可以不同,但是数组的元素元素类型必须一样.
数组:3 5 8 9
想把6加入到数组中不改变有序性,第一步比较第一个元素,发现不符合,第二个不符合,第三个符合,6存放在8的位置,8后移,最后添加一个位置
3 | 5 | 9 | 10 |
a | b | c | null |
数据
指针 :每一个数据存放的地址,a存放5的地址,b存放9的地址,c存放10的地址
链表中一个节点分为两个区域,一个指针域一个数据域,指针域的内容就是指针。指针指向下一个节点,a
数组的元素必须挨着存放,连续,而且如果想找到10的地址,要从第一个一次遍历,到最后一个,这样比较麻烦,所以如果想要多次删除和添加时用链表。
线性存储:数组
>优点:很便捷的访问数组中的每一个元素
>缺点:插入删除操作,代价过大
元素与元素之间在内存中连续存储,需要占用一整块内存
链式存储:链表
>优点:便于及进行插入删除操作,
>缺点:访问指定元素代价过大(与数组比较)
元素与元素之间位置没有要求,可以在任意位置,不需要连续存储空间,但是内存使用要比数组大
- 栈
结构特点:后进先出,先进后出,入栈顺序与出栈顺序相反。栈顶与栈尾的结构
比如进制转换中10进制的10转换为2进制,依次除2取余,为0 1 0 1,第一个0先进栈,再依次进行,那么出栈时最后一个1先出
迷宫求解也是用了栈的特点来记录每一个走过的栈的位置,
- 队列
队列特点:先进先出,后进后出。
练习:现在有一个队列,后面有一个栈,A B C D依次进入队列,进入栈出栈的可能情况。那么出队列的顺序为A B C D,
!!!!
树与二叉树结构
- 树
第一层为根节点,第二层叶节点!!!!!,后面的子节点。由同一个节点产生的节点为兄弟节点,上一节点为父节点,下面的某一个节点的上n个节点叫本节点的祖先,从根结点到该结点所经过分支上的所有结点。
1.树的度
某一个子节点最大的节点数。
2.树的深度
从第一层依次往下一共多少层。
- 二叉树
不是度为2的树。一个叫做左节点一个叫做右节点。树和二叉树是完全不同的概念。
二分查找:比如1 2 3 4 5 6……
> 满二叉树
>>每一层节点取满,每一层的节点为2^(n-1)个,如果节点数小于该数那么就不是满二叉树。
>>求n层的满二叉树的节点总个数。等比数列求和:2^n-1
>>叶子节点的个数等于度为2的节点数+