#include<bits/stdc++.h>
using namespace std;
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*List;
//初始化
void InitList(List &L){
L=(DNode*)malloc(sizeof(DNode));
L->next=L->prior=NULL;
}
//头插
void ListInsertHead(List &L,int e){
DNode* p=L;
DNode* s=(DNode*)malloc(sizeof(DNode));
s->data=e;
if(p->next==NULL){
s->next=NULL;
s->prior=p;
p->next=s;
}else{
s->next=p->next;
s->prior=p;
p->next->prior=s;
p->next=s;
}
}
//尾插
void ListInsertTail(List &L,int e){
DNode* p=L;
DNode* s=(DNode*)malloc(sizeof(DNode));
while(p->next!=NULL)
p=p->next;
s->data=e;
s->next=NULL;
s->prior=p;
p->next=s;
}
//中间插
void ListInsertMiddle(List &L,int i,int e){
DNode* p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
cout<<"Insert Error:Element Not Found!"<<endl;
}else{
DNode* s=(DNode*)malloc(sizeof(DNode));
s->data=e;
s->next=p->next;
s->prior=p;
p->next->prior=s;
p->next=s;
}
}
//删除
void ListDelete(List &L,int i){
DNode* p=L;
int j=0;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL||p->next==NULL){
cout<<"Delete Error:Element Not Found!"<<endl;
}else{
DNode* q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
}
}
//打印
void PrintList(List L){
DNode* l=L->next;
while(l!=NULL){
cout<<l->data<<" ";
l=l->next;
}
cout<<"END"<<endl;
}
int main(){
List L;
InitList(L);
ListInsertHead(L,5);
ListInsertHead(L,3);
ListInsertHead(L,2);
ListInsertTail(L,7);
ListInsertTail(L,11);
PrintList(L);
ListInsertMiddle(L,4,6);
PrintList(L);
ListDelete(L,1);
PrintList(L);
ListDelete(L,6);
return 0;
}