双链表的增删改查基本操作

来源:互联网 发布:手机淘宝联盟怎么省钱 编辑:程序博客网 时间:2024/06/05 04:51

双链表
在单链表的每个结点中再设置一个指向上一跳的前驱结点的指针域

//结构体定义typedef struct _node  {      dataType data;  //链表中的数据域       struct _node *next;         //链表的下一跳    struct _node *prior;        //链表的上一跳}LinkNode,*LinkedList;//双链表//创建结点DLinkedList DlistCreatNode(dataType data){    DLinkedList node = (DLinkedList)malloc(sizeof(DLinkedList));    if(NULL == node)    {        perror("DlistCreatNode err");        return NULL;    }    node->data = data;    node->next = NULL;    node->prior = NULL;    return node;}//头插法int DlistInsertHead(DLinkedList L,dataType data){    DLinkedList p = DlistCreatNode(data);    if(NULL == p)    {        perror("DlistCreatNode err");        return -1;    }    p->next = L->next;    p->prior = L;    L->next->prior = p;    L->next = p;    return 0;}//尾插法int DlistInsertTail(DLinkedList L,dataType data){    DLinkedList temp = L;    while(temp->next)    {        temp = temp->next;    }    DLinkedList p = DlistCreatNode(data);    if(NULL == p)    {        perror("DlistCreatNode err");        return -1;    }    temp->next = p;    p->prior = temp;    return 0;}//以序号插入int DlistInsertIndex(DLinkedList L,int i,dataType data){    int n = 0;    DLinkedList temp = L;    while(temp->next && n < i - 1)    {        temp = temp->next;    }    if(n < (i-1) || !temp)    {        return -2;//超出链表长度    }    DLinkedList p = DlistCreatNode(data);    if(NULL == p)    {        perror("DlistCreatNode err");        return -1;    }    p->next = temp->next;    p->prior = temp->prior;    temp->next->prior = p;    temp->next = p;    return 0;}//删除某一值得结点int DlistDeleteValue(DLinkedList L,dataType data){    int n = 0;    DLinkedList temp = L;    while(temp->next )    {        temp = temp->next;        if(temp->data == data)        {            temp->next->prior = temp->prior;            temp->prior->next = temp->next;            n++;        }    }    return n;}//printListint printDLinkList(DLinkedList L){    DLinkedList temp = L;    while(temp->next)    {        temp = temp->next;        printf("%4d ",temp->data);    }    printf("\r\n");    return 0;}int main(){    //双链表    DLinkedList d_List;    dList = DlistCreatNode(NULL);    for(int i = 100;i < 110;i++)        DlistInsertTail(d_List,i);  //创建一个链表    printDLinkList(d_List);    DlistInsertHead(d_List,99);    printDLinkList(d_List);    return 0;}