Head First C学习值链表

链表就是一连串的数据,是一种抽象的数据结构

  • 与数组相比,链表的优点,可以很快的插入数据,如果想在数组中插入一个值,久不得不将插入点后面的所有塑胶后移一个位置。

递归结构

  • 如果一个结构包含一个链向同种结构的链接,这张结构就被称为递归结构
  • 递归结构中含有指向同种结构的指针
    位于Head First C的第271页:
Head First C学习值链表_第1张图片
链表递归.jpg

虽然typedef命名结构时可以跳过结构名,但是因为在递归结构中需要包含一个相同类型的指针,C语言不允许用typedef别名来声明它,因此为该结构起一名。

#include 
typedef struct island {
    char *name;
    char *opens;
    char *closes;
    struct island *next;
} island;

void display(island *start)
{
    island *i = start;
    for (;i != NULL;i = i-> next)
    {
        printf("name :%s\n open:%s - %s\n",i->name,i->opens,i->closes);
    }
}
int main()
{
    island amity = {"Amity","09:00","17:00",NULL};
    island craggy = {"Craggy","09:00","17:00",NULL};
    island isla_nublar = {"Isla Nublar","09:00","17:00",NULL};
    island shutter = {"Shutter","09:00","17:00",NULL};
    amity.next = &craggy;
    craggy.next = &isla_nublar;
    isla_nublar.next = &shutter;
    island skull = {"SKull","09:00","17:00",NULL};
    isla_nublar.next = &skull;
    skull.next = &shutter;
    
    display(&amity);
    return 0;
只有C99和C11标准才允许在中间声明变量,在ANSI C中必须在函数的顶部声明变量。

你可能感兴趣的:(Head First C学习值链表)