链表:在内存中,数组的定义需要一整块连续的内存空间,而链表则不需要连续,链表通过指针将若干零散的内存空间连起来,每个内存空间我们称之为结点,每个结点除了存储数据外,还会记录下一个(或上一个)结点的地址(后继或前驱指针:next,prev)
双向链表和单链表:双向链表比之单链表,由于需要额外的内存来记录结点的前驱结点,所以会耗费更多的内存,但同时也是因为如此,在链表的删除和增加操作时,如果需要使用到前驱结点,双向链表会比单链表更加高效(因为单链表不会记录每个结点的前一个结点,需要重新遍历,直到p->next=q,说明 p 是 q 的前驱结点)