双向循环链表的建立,插入,删除(不带头结点)

注:此代码是在插入和删除位置有效的情况下写的

(即插入时:位置i>=1&&i<=n+1

        删除时:位置i>=1&&i<=n)

#include
#include
#include

#define OVERFLOW -2
#define ERROR -1

typedef struct DuLNode{
    int data;
    struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;

void CreateList_Dul(DuLinkList &L,int n){
    DuLNode *rear,*p;
    L=rear=(DuLinkList)malloc(sizeof(DuLNode));
    int j=1,data;
    p=(DuLinkList)malloc(sizeof(DuLNode));
    scanf("%d",&data);
    p->data=data;
    L=rear=p;
    j++;
    while(j<=n){
        p=(DuLinkList)malloc(sizeof(DuLNode));
        scanf("%d",&data);
        p->data=data;
        rear->next=p;
        p->prior=rear;
        rear=p;
        j++;
    }
    rear->next=L;
    L->prior=rear;
}

void InsertList_Dul(DuLinkList &L,int i,int e){//在表第i个位置插入值为e的元素
    DuLNode *p;
    p=(DuLinkList)malloc(sizeof(DuLNode));
    p->data=e;
    if(i==1){
        L->prior->next=p;
        p->prior=L->prior;
        L->prior=p;
        p->next=L;
        L=p;
    }
    else{
        DuLNode *q;
        q=L;
        int j=1;
        while(jnext;
            j++;
        }
        p->next=q->next;
        q->next->prior=p;
        q->next=p;
        p->prior=q;
    }
}

void DeleteList_Dul(DuLinkList &L,int i){//删除第i个位置的元素
    DuLNode *p;
    p=L;
    if(i==1){
        p->next->prior=p->prior;
        p->prior->next=p->next;
        L=p->next;
        free(p);
    }
    else{
        int j=1;
        while(jnext;
            j++;
        }
        p->prior->next=p->next;
        p->next->prior=p->prior;
        free(p);
    }
}

int main(){
    DuLinkList T;
    printf("输入个数\n");
    int n;
    scanf("%d",&n);
    printf("输入各个元素\n");
    CreateList_Dul(T,n);
    InsertList_Dul(T,4,7);//随便向第4个位置插入值为7的元素
    DuLNode *p;
    p=T;
    printf("插入后\n");
    for(int i=1;i<=n+1;i++){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    DeleteList_Dul(T,1);//随便删除第1个元素
    p=T;
    printf("删除后\n");
    for(int i=1;i<=n;i++){
        printf("%d ",p->data);
        p=p->next;
    }
}
双向循环链表的建立,插入,删除(不带头结点)_第1张图片

你可能感兴趣的:(双向循环链表的建立,插入,删除(不带头结点))