c语言单向链表建立

在这里插入图片描述

typedef struct Node{
    int val;
    struct Node *next;
}Node,*ptrNode;

1、结构体的大小
参考链接
https://blog.csdn.net/jiaozhenxinaichenme/article/details/53097007
char 1
int 4
64位系统中,不管什么类型的指针的大小都是8
cpu一次读取8字节,在结构体中会对不满足8字节的类型补全为8字节
一个实体结构体的大小为补全后所有变量大小的和。
sizeof(struct Node)=16;(补全)
sizeof(struct Node *)=8;(指针的大小都为8,存放结构体的首地址)

2、静态链表

    Node node1={1,NULL};
    Node node2={2,NULL};
    Node node3={3,NULL};
    node1.next=&node2;
    node2.next=&node3;
    node3.next= nullptr;

3、malloc动态内存申请
malloc向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

3、动态链表

头插法

void insertNode(ptrNode headNode,int data){

    struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->val=data;
    newNode->next=headNode->next;
    headNode->next=newNode;
}

尾插法

void insertNOdeTail(ptrNode headNode){

    ptrNode last=headNode;
    for(int i=0;i<4;i++){
        struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
        newNode->val=i;
        last->next=newNode;
        last=newNode;
    }
}

需要有个头指针,存放第一个节点的地址
尾结点指针域为空
实时分配空间

发布了73 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Jiiaaaoooo/article/details/98749622
今日推荐