Makefile:

Makefile:用来管理代码的编译和链接

make工具解释:Makefile  makefile

Makefile的语法:gcc main.c fun.c -o a.out -I$(INC) -L$(LIB)

                            目标文件:a.out

                             依赖文件:main.c fun.c

                             -I :指定头文件所在的位置

                             -L:指定使用到的库所在的位置

语法规则:目标文件:依赖文件

                        编译方法

Makefile中的变量:1.自定义变量

                                   定义:

                                   变量名 = 值

                                   引用:

                                   $(变量名)

                                   OBJ=a.out

                                    $(OBJ) -> a.out

                                 2.系统变量

                                     $^ : 所有依赖        $< : 第一个依赖        $@ : 生成的目标

时间戳:在编译代码时,只编译修改后的源文件,其他没有修改的,只进行链接即可。

※ gcc编译的四个步骤:

                                     1.预处理:处理和#相关的指令

                                                      gcc -E main.c -o main.i

                                      2.编译:将源程序转换为汇编指令

                                                        gcc -S main.i -o main.s

                                       3.汇编:将汇编指令生成二进制指令

                                                          gcc -c main.s -o main.o

                                        4.链接:处理多文件及函数的链接关系

                                                            gcc main.o -o app

双向链表:  

创造一个双向链表:
DLink_t *create_doulink()
{
    DLink_t *pdlink= malloc(sizeof(DLink_t));
    if (NULL == pdlink)
    {
        printf("malloc error");
        return NULL;
    }
    pdlink->phead = NULL;
    pdlink->clen = 0;

    return pdlink;
}
判断一个双向链表是否为空链表:
int is_empty_doulink(DLink_t *pdlink)
{
    return NULL == pdlink->phead;

}
向双向链表的头部插入一个结点:
int insert_doulink_head(DLink_t *pdlink, Data_type_t data)
{
    DNode_t *pnode = malloc(sizeof(DNode_t));
    if (NULL == pnode)
    {
        printf("malloc error");
        return -1;
    }
    pnode->data = data;
    pnode->ppre = NULL;
    pnode->pnext = NULL;

    if (is_empty_doulink(pdlink))
    {
        pdlink->phead = pnode;
    }
    else
    {
        pnode->pnext = pdlink->phead;
        pdlink->phead->ppre = pnode;
        pdlink->phead = pnode;
    }
    pdlink->clen++;

    return 0;
}
遍历双向链表:
void doulink_for_each(DLink_t *pdlink, int dir)
{
    if (is_empty_doulink(pdlink))
    {
        return ;
    }
    DNode_t *ptmp = pdlink->phead;
    if (dir)
    {
        while (ptmp != NULL)
        {
            printf("%d %s %d\n", ptmp->data.id, ptmp->data.name, ptmp->data.score);
            ptmp = ptmp->pnext;
        }
    }
    else
    {
        while (ptmp->pnext != NULL)
        {
            ptmp = ptmp->pnext;
        }
        while (ptmp != NULL)
        {
             printf("%d %s %d\n", ptmp->data.id, ptmp->data.name, ptmp->data.score);
             ptmp = ptmp->ppre;
        }
    }
    printf("\n");
}
在双向链表的尾部插入一个结点:
int insert_doulink_tail(DLink_t *pdlink, Data_type_t data)
{
    DNode_t *pnode = malloc(sizeof(DNode_t));
    if (NULL == pnode)
    {
        printf("malloc error\n");
        return -1;
    }
    pnode->data = data;
    pnode->ppre = NULL;
    pnode->pnext = NULL;

    if (is_empty_doulink(pdlink))
    {
        pdlink->phead = pnode;
    }
    else
    {
        DNode_t *ptmp = pdlink->phead;
        while (ptmp->pnext != NULL)
        {
            ptmp = ptmp->pnext;
        }
        ptmp->pnext = pnode;
        pnode->ppre = ptmp;
    }
    pdlink->clen++;

    return 0;
}

删除双向链表的头结点:
int delete_doulink_head(DLink_t *pdlink)
{
    if (is_empty_doulink(pdlink))
    {
        return -1;
    }

    DNode_t *pdel = pdlink->phead;
    pdlink->phead = pdel->pnext;
    if (pdlink->phead != NULL)
    {
        pdlink->phead->ppre = NULL;
    }
    free(pdel);
    pdlink->clen--;

    return 0;
}
删除双向链表的尾结点:
int delete_doulink_tail(DLink_t *pdlink)
{
    if (is_empty_doulink(pdlink))
    {
        return -1;
    }

    DNode_t *ptmp = pdlink->phead;
    if (1 == pdlink->clen)
    {
        free(ptmp);
        pdlink->phead = NULL;
    }
    else
    {
        while (ptmp->pnext != NULL)
        {
            ptmp = ptmp->pnext;
        }
        ptmp->ppre->pnext = NULL;
        free(ptmp);
    }
    pdlink->clen--;

    return 0;
}


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐