19.链表

1.数组

优点:随机访问元素效率高
缺点:需要分配一块连续的存储区域(很大区域,有可能分配失败),删除和插入某个元素效率低。

2.链表

节点:数据域,指针域
尾结点:指针域指向NULL

优点:不需要一块连续的存储区域,删除和插入某个元素效率高。

缺点:随机访问元素效率低。

3.结构体嵌套

(1).结构体可以嵌套另外一个结构体的任何类型变量

(2).结构体嵌套本结构体普通变量(不可以);

         本结构体的类型大小无法确定,类型本质:固定大小内存块别名;
(3).结构体嵌套本结构体指针变量(可以)指针变量的空间能确定,32位, 4字节, 64位, 8字节;

typedef struct A
{
    int a;
    int b;
    char *p;
}A;
typedef struct B
{
    int a;
    A tmp1; //ok
    A *p1; //ok

    //struct B tmp2;   //结构体嵌套本结构体普通变量(不可以)
                                  //本结构体的类型大小无法确定,类型本质:固定大小内存块别名 
    struct B *next;    //指针类型大小确定:32位, 4字节, 64位, 8字节    
}B;

4.静态链表

typedef struct Stu
{
    int id;    //数据域
    char name[100];
    struct Stu *next; //指针域
}Stu;

int main(void)
{
    //初始化三个结构体变量
    Stu s1 = { 1, "mike", NULL };
    Stu s2 = { 2, "lily", NULL };
    Stu s3 = { 3, "lilei", NULL };

    s1.next = &s2; //s1的next指针指向s2
    s2.next = &s3;
    s3.next = NULL; //尾结点

    Stu *p = &s1; 

    while (p != NULL)
    {
        printf("id = %d, name = %s\n", p->id, p->name);

        //结点往后移动一位
        p = p->next; //&s2
    }

猜你喜欢

转载自www.cnblogs.com/xigongxiaosha/p/10328678.html