Linux主控 ——链表操作

链表重要性

在Linux内核里,大量使用了链表操作,list_head

设备管理、驱动管理、内存管理、等待队列、中断资源

·list_head使用

typedef struct msg_pack{
    char msg_type;
    char text[27];
}link_datatype;

typedef struct _node_{
    link_datatype data;
    struct _node_ *next;
}linknode,*linklist;

一、链表操作

1、创建链表

linklist envlinkHead,envlinkTail;

linklist CreatEmpatyLinklist()
{
    linklisk h;
    h = (linklist)malloc(sizeof(linknode));
    h->next = NULL;
    envlinkTail = h;
    return h;
}

envlinkHead = CreatEmpatyLinklist();

2、插入节点

int InsertLinknode(link_datatype x)
{
    linklist q = (linknode *)malloc(sizeof(linknode));
    if(NULL==q)
    {
        printf("insert node error!");
        return -1;
    }
    envlinkTail->next = q;
    envlinkTail = q;
    q->data = x;
    q->next = NULL:

    return 0;

}

link_datatype data;
data.msg_type = 0x1;
memcpy(data.text,"1111",sizeof(data.text));
InsertLinknode(data);

3、遍历所有节点

void show_list(linklist h)
{
    linklist p = h;
    int i = 0;
    p = h->next;
    while(p)
    {
        printf("node[%d]:%s\n",i,p->data.text);
        i++;
        p = p->next;
    }

}

4、提取一个节点

int EmptyLinklist(linklist h)
{
    return NULL == h->next;
}

linknode *GetLinknode(linklist h)
{
    if(1 == EmptyLinklist(h))
    {       
        return NULL: 
    }
    linklist p = h->next;
    h->next = p->next;
    if(NULL == p->next)
    {
        envlinkTail = h;
    }
    return p;
    
}

linklist tmpnode;
tmpnode  = GetLinknode(envlinkHead);
free(tmpnode);

你可能感兴趣的:(cc2530项目,链表,数据结构)