【CS50】Lecture5 Notes: Data Structures数据结构

266 阅读1分钟

在凄风苦雨的心情中开始听 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 address
  • int*: 一个 int 的 address
  • char*:一个 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