本文已参与「新人创作礼」活动,一起开启掘金创作之路
二、程序设计语言基础知识
1、编译过程
源程序-->词法分析-->语法分析-->语义分析-->中间代码生成-->代码优化-->目标代码生成-->目标程序
词法错误:非法字符,关键字或标识符拼写错误等 语法错误:结构出错,if else不匹配,缺少分号等 语义错误:死循环,零除数等
2、语言举例
Fortran语言:科学计算,执行效率高 Pascal语言:为数学而开发,表达能力强 C语言:指针操作能力强,高效 Lisp语言:函数时程序语言,符号处理,人工智能 C++语言:面向对象,高效 Java语言:面向对象,中间代码,跨平台 C#语言:面向对象,中间代码,Net Prolog语言:逻辑推理,简洁性,数据库和专家系统
3、后缀式计算
例如:求(a-b)(c+d)的后缀式 先将其转换为下列二叉树,再进行后序遍历即可得到它的后缀式 ab-cd+
三、数据结构
1、广义表
广义表是n个表元素组成的有限序列,以递归的形式进行定义Ls=(a0,a1,a2,...,an) 长度:最外层包含的元素个数 深度:所包含括号的重数(原子的深度为0,空表的深度为1) head操作:取头 tail操作:取尾
例如:Ls=(a,(b,c),(d,e)) 长度=3,深度=2,head(Ls)=a,tail(Ls)=((b,c),(d,e)) 若要将b取出,则进行的操作为:head(head(tail(Ls)))
2、队列
先进先出 队空条件:head=tail 队满条件:(tail+1)%size=head
3、二叉树
1、二叉树的重要特性
1、第i层上最多有2^(i-1)个结点 2、深度为k的二叉树最多有2^k-1个结点 3、n0=n2+1 4、若按层次编号: (1) i=1,无父结点 (2) i>0 父结点为i/2(向下取整) (3) 2i>n,为叶子结点,若不是叶子节点,则有左子结点,为2i (4) 2i+1>n,为叶子节点,若不是叶子节点,则有右子结点,为2i+1
2、平衡二叉树
概念:任意结点的左右子树深度相差不超过1,即平衡度只能为-1,0,1
3、二叉树的遍历
前序遍历:根左右 中序遍历:左根右 后序遍历:左右根
4、图
1、图的遍历
深度优先:从顶点V开始,依次搜索任一邻接点,每次都要查到底 广度优先:从顶点V开始,访问完V的全部邻接点再往下走,慢慢扩散
2、AOV网络
拓扑序列:必须等前一个执行完了后面的才能执行
3、邻接矩阵和邻接表
邻接矩阵举例
邻接表举例
5、排序算法
这里有十大经典排序算法的动画演示,代码实现以及总结比较,我就不再赘述了 排序算法总结.