在凄风苦雨的心情中开始听 lecture5. 谢谢 David,他激情澎湃的声音和激昂壮阔的片头唤醒了我对人生的向往(也没有)。
一点哲理话语:garbage 不是 bad 而是你不 care 的那些东西
vector in Java:可以扩展长度的 array,但是在 c 中,不可以。
Data sturctures
To build a data structure, we’ll need some tools:
struct创建数据类型->to access properties in a structure pointed to by a pointer.:go to somewhere*:get particular addressint*: 一个 int 的 addresschar*:一个 char 的 address
linked lists
用一个例子来看如何实现 link。
注意点: 当一个 function 会返回一个指针的时候,都应该检查这个 pointer 是否是 NULL 值。
表达上的注意点:
list[0] = 1 // 亦可使用 * list = 1;
list[1] = 2 //亦可使用 * (list+1) = 2;
list[2] =3 // 亦可使用 * (list+2) = 3;
realloc()
- realloc 需要两个值;
- 之前已经 malloc 过的对象,新的 size
- realloc 后,之前的内容会直接 copy 到 realloc 出的 memory 中。
Trees
- tree 是一种 data structure,其特点是每个 node 可以有指向其他两个 nodes 的指针。
- a kind of recursive data structure
typedef struct node
{
int number;
struct node *left;
struct node *right;
}
node;
以下是一个例子,在 tree 中进行 search:
bool search(node *tree, int number)
{
if (tree == NULL)
{
return false
}
else if (number < tree -> number)
{
return search(tree -> left, number);
}
else if (number > tree -> number)
{
return search(tree -> right, number);
}
else if (number == tree -> number)
{
return true;
}
}
inserting into a binary search tree O(log n) : 插入一个新的数值其实就是寻找某个所属位置(和 binary search 类似)
More data structures
Hash Tables
- an arrary of linked lists
- get access to data more quickly
- O(1)
Queues
FIFO - first in, first out
- enqueue: get in
- dequeue: get out
Stack
LIFO - last in, first out
- pop: take sth out
- push: other things be added on
Dictionary
- 可以 map keys to values