数据结构——双向链表的插入和删除操作

/*
双向链表的插入和删除操作

2018.04.14
*/

#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;

typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef struct BOOK{
    char no[20];
    char name[20];
    double price;
};

typedef struct DLNode{
    BOOK data;  //数据域
    struct DLNode *prior;//直接前驱
    struct DLNode *next;//直接后继
}DLNode,*DLinkList;

//双向链表查找
DLinkList GetElem_DuL(DLinkList L,int i){
    DLinkList p;
    p=L->next;
    int j=1;
    while(p!=NULL&&j<i){
        ++j;
        p=p->next;
    }
    if(!p||j>i)
        p=NULL;
    return p;
}

//双向链表的插入
Status ListInsert_DuL(DLinkList &L,int i,BOOK e){
    //在带头结点的双向链表L中的第i个位置前插入元素e
    DLinkList p;
    if(!(p=GetElem_DuL(L,i)))
        return ERROR;
    DLinkList s=new DLNode;
    s->data=e;
    s->prior=p->prior;
    s->next=p->prior->next;
    p->prior->next=s;
    s->next=p;
    return OK;
}

//双向链表的删除
Status ListDelete_DuL(DLinkList &L,int i){
    //删除带头结点的双向链表L中的第i个元素
    DLinkList p;
    if(!(p=GetElem_DuL(L,i)))
        return ERROR;
    p->prior->next=p->next;
    p->next->prior=p->prior;
    delete p;
    return OK;
}

猜你喜欢

转载自blog.csdn.net/JEYMING/article/details/80054536