关于链表

来源:互联网 发布:linux ab url参数 编辑:程序博客网 时间:2024/05/16 10:29

关于链表的一些问题

链表结构的优势:

  • 单个节点创建非常方便,普通的线性内存通常在创建的时候需要在数据结构中添加一个属性,这个属性会记录下面一个数据的地址。有了这个地址之后,所有的数据就像一条链子一样串起来了,那么这个地址属性就起到了穿线连结的作用。
  • 节点的删除非常方便,不需要想线性结构那样移动剩下的数据
  • 节点的访问方便,可以通过循环或者递归的方法访问到任意的数据,但是平均访问的效率低于线性表,那么在实际应用中,链表是怎么设计的那?我们可以以int数据类型作为基础,设计一个简单的链表:

    (1)设计链表的数据结构
    typedef struct_LINK_NODE
    {
    int data;
    struct_LINK_NODE* next;
    }LINK_NODE;

    (2)创建链表
    LINK_NODE*alloca_node(int value)
    {
    LINK_NODE* plinkNode=NULL;
    plinkNode=(LINK_NODE*)malloc(sizeof(LINK_NODE));
    plinkNode->data=value;
    plinkNode->next=NULL;
    return pLinkNode;
    }

    (3)删除链表
    void delete_node(LINK_NODE**pNode)
    {
    LINK_NODE**pNext;
    if(NULL == pNode || NULL==*pNode)
    return;
    pNext=&(*pNode)->next;
    free(*pNode);
    delete_node(pNext);
    }

    (4)链表插入数据
    STAUS_add_date(LINK_NODE** pNode,LINK_NODE* pDateNode)
    {
    if(NULL==*pNode)
    {
    *pNode=pDataNode;
    return TRUE;
    }
    return _add_data(&(*pNode)->next,pDataNode);
    }
    STATUS add_date(const LINK_NODE**pNode,int value)
    {
    LINK_NODE*pDataNode;
    if(NULL==*pNode)
    return FALSE;
    pDataNode=alloca_node(value);
    if(NULL==*pNode)
    return FALSE;
    pDataNode=alloca_node(value);
    assert(NULL!=pDataNode);
    return_add_data(LINK_NODE**)pNode,pDataNode;
    }

    (5)删除数据
    `STATUS _delete_data(LINK_NODE** pNode, int value
    {
    LINK_NODE* pLinkNode;
    if(NULL == (*pNode)->next)
    return FALSE;

    pLinkNode = (*pNode)->next;
    if(value == pLinkNode->data){
    (*pNode)->next = pLinkNode->next;
    free(pLinkNode);
    return TRUE;
    }else{
    return _delete_data(&(*pNode)->next, value);
    }
    }
    STATUS delete_data(LINK_NODE** pNode, int value)
    {
    LINK_NODE* pLinkNode;
    if(NULL == pNode || NULL == *pNode)
    return FALSE;
    if(value == (*pNode)->data){
    pLinkNode = *pNode;
    *pNode = pLinkNode->next;
    free(pLinkNode);
    return TRUE;
    }
    return _delete_data(pNode, value);
    }`

1 0