双向链表的增删改查

来源:互联网 发布:俄罗斯人 知乎 编辑:程序博客网 时间:2024/05/22 08:25
//// Created by Zhongqi.Shao on 2016/12/13.//#ifndef DOUBLELINK_DOUBLELINK_H#define DOUBLELINK_DOUBLELINK_Htypedef int DataType;typedef struct LinkNode {    DataType data;    struct LinkNode *next;    struct LinkNode *pre;} Node;typedef struct DoubleLink {    Node *pHead;    Node *pTail;} DLink;extern void addDataBack(DLink *link, DataType data);extern void addDataHead(DLink *link, DataType data);extern void deleteData(DLink *link, DataType data);extern void showLinkBack(DLink *link);extern void showLinkHead(DLink *link);#endif //DOUBLELINK_DOUBLELINK_H
//// Created by Zhongqi.Shao on 2016/12/13.//#include"DoubleLink.h"#include <stdio.h>#include <stdlib.h>#include <memory.h>extern void addDataBack(DLink *link, DataType data) {    if (link == NULL) {        return;    }    Node *newNode = (Node *) malloc(sizeof(Node));    newNode->data = data;    newNode->pre = NULL;    newNode->next = NULL;    if (link->pHead == NULL || link->pTail == NULL) {        link->pHead = newNode;        link->pTail = newNode;    } else {        link->pTail->next = newNode;        newNode->pre = link->pTail;        link->pTail = newNode;    }}extern void addDataHead(DLink *link, DataType data) {    if (link == NULL) {        return;    }    Node *newNode = (Node *) malloc(sizeof(Node));    newNode->data = data;    newNode->pre = NULL;    newNode->next = NULL;    if (link->pHead == NULL || link->pTail == NULL) {        link->pTail = newNode;        link->pHead = newNode;    } else {        newNode->next = link->pHead;        link->pHead->pre = newNode;        link->pHead = newNode;    }}extern void showLinkBack(DLink *link) {    if (link == NULL) {        return;    }    Node *tmp = link->pHead;    while (tmp != NULL) {        printf("Node Data = %d\n", tmp->data);        tmp = tmp->next;    }}extern void showLinkHead(DLink *link) {    if (link == NULL) {        return;    }    Node *tmp = link->pTail;    while (tmp != NULL) {        printf("Node Data = %d\n", tmp->data);        tmp = tmp->pre;    }}extern void deleteData(DLink *link, DataType data) {    if (link == NULL || link->pTail == NULL || link->pHead == NULL) {        return;    }    Node *tmp = link->pHead;    while (tmp != NULL) {        if (tmp->data == data) {            break;        }        tmp = tmp->next;    }    if (tmp == link->pHead) {        link->pHead->next->pre = NULL;        link->pHead = link->pHead->next;        free(tmp);    } else if (tmp == link->pTail) {        link->pTail->pre->next = NULL;        link->pTail = link->pTail->pre;        free(tmp);    } else {        tmp->pre->next = tmp->next;        tmp->next->pre = tmp->pre;        free(tmp);    }}


                                             
0 0