首页 > 其他 > 详细

链表

时间:2014-02-08 15:39:33      阅读:339      评论:0      收藏:0      [点我收藏+]

单向链表

typedef struct _LINKED_NODE LINKED_NODE;
struct _LINKED_NODE {
    int data;
    LINKED_NODE *next;
};

 

链表节点建立

bubuko.com,布布扣
LINKED_NODE *createLinkedNode(int nValue)
{
    LINKED_NODE *pNode=NULL;

    pNode=(LINKED_NODE *)malloc(sizeof(LINKED_NODE));
    if(pNode==NULL) return NULL;

    pNode->data=nValue;
    pNode->next=NULL;

    return pNode;
}
bubuko.com,布布扣

 

插入数据

bubuko.com,布布扣
int insertLinked(LINKED_NODE *pHead, int nValue)
{
    LINKED_NODE *pNodeNew=NULL;

    pNodeNew=(LINKED_NODE *)malloc(sizeof(LINKED_NODE));
    if(pNodeNew==NULL) return 0;

    pNodeNew->data=nValue;
    pNodeNew->next=NULL;

    LINKED_NODE *pNodeCur=pHead;

    if(pNodeCur==NULL) {
        pNodeCur=pNodeNew;
        return 1;
    }

    while(pNodeCur->next!=NULL) pNodeCur=pNodeCur->next;
    pNodeNew=pNodeCur->next;

    return 1;
}
bubuko.com,布布扣

 

bubuko.com,布布扣
int insertLinked(LINKED_NODE **pNode, LINKED_NODE *pNewNode)
{
    if(*pNode==NULL) {
        *pNode=pNewNode;
        return 0;
    }

    insertLinked(&(*pNode)->next,pNewNode);

    return 1;
}

int insertLinked(LINKED_NODE **pHead, int nValue)
{
    if(pHead==NULL) return 0;

    LINKED_NODE *pNodeNew=NULL;

    pNodeNew=createLinkedNode(nValue);
    if(pNodeNew==NULL) return 0;

    LINKED_NODE **pNodeCur=pHead;

    if(pNodeCur==NULL) {
        pNodeCur=pNodeNew;
        return 1;
    }

    return insertLinked(pNodeCur, pNodeNew);
}
bubuko.com,布布扣

 

删除数据

bubuko.com,布布扣
int deleteLinked(LINKED_NODE *pHead, int nvalue)
{
    if(pHead==NULL) return 0;

    LINKED_NODE *pNodeCur=pHead;
    LINKED_NODE *PNodePrev=NULL;

    while(pNodeCur&&pNodeCur->data!=nvalue) {
        PNodePrev=pNodeCur;
        pNodeCur=pNodeCur->next;
    }

    if(pNodeCur==NULL) return 0;

    if(PNodePrev) PNodePrev->next=pNodeCur->next;
    else pHead=pNodeCur->next;

    free(pNodeCur);

    return 1;
}
bubuko.com,布布扣

 

bubuko.com,布布扣
int deleteLinked(LINKED_NODE **pHead, int nvalue)
{
    if(pHead==NULL||*pHead==NULL) return 0;

    LINKED_NODE **pNodeCur=pHead;
    LINKED_NODE *pTemp=NULL;

    while(*pNodeCur) {
        pTemp=*pNodeCur;
        if(pTemp->data==nvalue) {
            *pNodeCur=pTemp->next;
            free(pTemp);
        } else
            pNodeCur=&pTemp->next;  /****/
    }

return 1; }
bubuko.com,布布扣

 

查找数据

bubuko.com,布布扣
LINKED_NODE *findData(LINKED_NODE *pHead, int nValue)
{
    if(pHead==NULL) return NULL;

    LINKED_NODE *pNodeCur=pHead;

    while(pNodeCur&&pNodeCur->data!=nvalue) pNodeCur=pNodeCur->next;

return pNodeCur; }
bubuko.com,布布扣

 

删除链表

bubuko.com,布布扣
int deleteAllLinked(LINKED_NODE *pHead)
{
    if(pHead==NULL) return 0;

    LINKED_NODE *pNodeCur=NULL;

    while(pHead->next) {
        pNodeCur=pHead;
        pHead=pHead->next;

        free(pNodeCur);
        pNodeCur=NULL;
    }

    free(pHead);
    pHead=NULL;

    return 1;
}
bubuko.com,布布扣

 

bubuko.com,布布扣
int deleteAllLinked(LINKED_NODE **pHead)
{
    if(pHead==NULL||*pHead==NULL) return 0;

    LINKED_NODE **pNodeNext=NULL;

    pNodeNext=&(*pHead)->next;

    free(*pHead);
    *pHead=NULL;

    deleteAllLinked(pNodeNext);

    return 1;
}
bubuko.com,布布扣

 

 

 

双向链表

bubuko.com,布布扣
typedef struct _DOUBLE_LINKED_NODE DOUBLE_LINKED_NODE;
struct _DOUBLE_LINKED_NODE {
    int data;
    DOUBLE_LINKED_NODE *prev;
    DOUBLE_LINKED_NODE *next;
};
bubuko.com,布布扣

 

插入数据

bubuko.com,布布扣
int doubleLinkedInsert(DOUBLE_LINKED_NODE *pHead, int nvalue)
{
    DOUBLE_LINKED_NODE *pNodeNew=NULL;

    pNodeNew=(DOUBLE_LINKED_NODE *)malloc(sizeof(DOUBLE_LINKED_NODE));
    if(pNodeNew==NULL) return 0;

    pNodeNew->data=nvalue;
    pNodeNew->next=NULL;
    pNodeNew->prev=NULL;

    DOUBLE_LINKED_NODE *pNodeCur=pHead;

    if(pNodeCur==NULL) {
        pNodeCur=pNodeNew;
        return 1;
    }

    while(pNodeCur->next!=NULL) pNodeCur=pNodeCur->next;
    pNodeNew=pNodeCur->next;
    pNodeNew->prev=pNodeCur;

    return 1;
}
bubuko.com,布布扣

 

删除数据

bubuko.com,布布扣
int doubleLinkedDelete(DOUBLE_LINKED_NODE *pHead, int nvalue)
{
    if(pHead==NULL) return 0;

    DOUBLE_LINKED_NODE *pNodeCur=pHead;

    while(pNodeCur&&pNodeCur->data!=nvalue) pNodeCur=pNodeCur->next;

    if(pNodeCur==NULL) return 0;

    if(pNodeCur->prev) pNodeCur->prev->next=pNodeCur->next;
    else pNodeCur->next->prev=NULL;

    if(pNodeCur->next) pNodeCur->next->prev=pNodeCur->prev;
    else pNodeCur->prev->next=NULL;

    free(pNodeCur);
    pNodeCur=NULL;

    return 1;
}
bubuko.com,布布扣

 

查找数据

bubuko.com,布布扣
DOUBLE_LINKED_NODE *doubleLinkedFind(DOUBLE_LINKED_NODE *pHead, int nvalue)
{
    if(pHead==NULL) return 0;

    DOUBLE_LINKED_NODE *pNodeCur=pHead;

    while(pNodeCur&&pNodeCur->data!=nvalue) pNodeCur=pNodeCur->next;

return pNodeCur; }
bubuko.com,布布扣

 

 

单向循环链表

逆转链表

链表

原文:http://www.cnblogs.com/mr-redrum/p/3510162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!