#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef struct DuLNode{
int data;
struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;
//初始化
int InitList_DuL(DuLinkList &L){
L=new DuLNode;
L->prior=NULL;
L->next=NULL;
}
//创建双向链表
void CreateList_DuL(DuLinkList &L,int n){
DuLNode *pre=L,*s;
for(int i=0;i<n;i++){
s=new DuLNode;
cin>>s->data;
pre->next=s;
s->prior=pre;
pre=s;
}
pre->next=NULL;
}
//显示链表
void Show(DuLinkList L){
while(L->next){
cout<<L->next->data<<' ';
L=L->next;
}
cout<<endl;
}
//取链表中第i个元素
DuLinkList GetElemP_DuL(DuLinkList L,int i){
DuLNode *p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
++j;
}
if(!p||j>i) return ERROR; //位置i不合法
return p;
}
//插入元素
int ListInsert_DuL(DuLinkList &L,int i,int e){
DuLNode *p=GetElemP_DuL(L,i); //找到第i个元素
if(!p) return ERROR;
DuLNode *s=new DuLNode;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
//删除元素
int ListDelete_DuL(DuLinkList &L,int i){
DuLNode *p=GetElemP_DuL(L,i);
if(!p) return ERROR;
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
return OK;
}
int main(){
DuLinkList L;
InitList_DuL(L);
cout<<"请输入链表元素:";
CreateList_DuL(L,5);
cout<<"该链表为:";
Show(L);
cout<<"表中第三个元素的地址:"<<GetElemP_DuL(L,3)<<endl;
ListInsert_DuL(L,3,100);
cout<<endl<<"插入元素后的链表为:";
Show(L);
ListDelete_DuL(L,5);
cout<<"删除元素后的链表为:";
Show(L);
return 1;
}
运行结果