注:此代码是在插入和删除位置有效的情况下写的
(即插入时:位置i>=1&&i<=n+1
删除时:位置i>=1&&i<=n)
#include<iostream>
#include<cstdio>
#include<malloc.h>
#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(j<i-1){
q=q->next;
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(j<i){
p=p->next;
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;
}
}