目录
1.算法的空间复杂度
算法在执行过程中所需要的内存空间。
2.算法的时间复杂度
执行程序所需的时间。
常用时间复杂度从小到大的排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
3.数据的逻辑结构与存储结构不是一一对应的。
-逻辑结构指的是关系:比如集合、线性、非线性。抽象的
-存储结构是指数据元素的表示和关系的表示。具体的,可实现的
-同一种逻辑结构采用不同的存储方法,可以得到不同的存储结构。比如线性结构采用顺序存储方法,可以得到顺序表,采用链式存储方法可以的到链表。
4.队列的修改
-队列是一个插入操作和删除操作受到限制的线性数据结结构。
-被限制在表的两端。插入操作在一端进行,删除在另一端进行,故而队列是先进先出的表。
5.循环队列中的元素个数随队头和队尾指针变化而动态变化。
la.front==0;la.rear==n;对内元素总数为n-1.
6.C语言的result只是一个自己定义的量
c语言里没有result这个关键字,是自己定义的变量名。考察的是对关键字和变量名的认识。
7.队空和队满时,头尾指针均相等。
8.冒泡法是在扫描过程中逐次比较相邻两个元素的大小。
-冒泡法是一种稳定排序算法。
-详细运行机制看下面的链接。
冒泡排序算法(超级详细) (biancheng.net)http://c.biancheng.net/view/6506.html-冒泡法优化:
针对问题:
数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。
方案:
设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。
这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。
以Java为例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
static
void
BubbleSort1(
int
[] arr){
int
temp;
//临时变量
boolean
flag;
//
是否交换的标志
for
(
int
i=
0
; i<arr.length-
1
; i++){
//表示趟数,一共
arr.length-1
次
// 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换
flag =
false
;
for
(
int
j=arr.length-
1
; j>i; j--){
//选出该趟排序的最大值往后移动
if
(arr[j] < arr[j-
1
]){
temp = arr[j];
arr[j] = arr[j-
1
];
arr[j-
1
] = temp;
flag =
true
;
//只要发生了交换,flag就置为true
}
}
// 判断标志位是否为false,如果为false,说明后面的元素已经有序,就直接return
if
(!flag)
break
;
}
}
9. 对象间的信息传递靠消息
对象之间通过消息进行交互。
-补充:在UML中,消息表示为箭头线,线的类型代表消息类型。
-消息类型:1.简单消息2.同步消息
3.异步消息4.同步并返回
-UML :(Unified Modeling Language)统一建模语言。图形化语言,视图
10.多态性
是指同一个操作可以是不同对象的行为。操作——对象。
11.C/C++内存的类型
C中:内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。
C++中有自由存储区(new)
全局变量、static变量会初始化为默认值,而堆和栈上的变量是随机的,不确定的。
12.堆和栈
- 堆存放动态分配的对象。即那些在程序运行时动态分配的对象,比如new出来的对象,其生存期由程序控制;
- 栈用来保存定义在函数内非static对象,比如局部变量,仅在其定义的程序块运行时才存在;
- 静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;
- 栈和静态内存的对象由编译器自动创建和销毁。