#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
struct LNode *prior;
}DNode,*DLinkList;
void CreateList_L(DLinkList *L,int n);
Status GetElem_L(DLinkList L,int i,ElemType *e);
Status ListInsert_L(DLinkList L,int i,ElemType e);
int main(int argc, const char * argv[]) {
DLinkList L,p;
CreateList_L(&L, 5);
int e=3;
ListInsert_L(L,2,e);
p=L->next;
while (p!=L) {
printf("%d ",p->data);
p=p->next;
}
return 0;
}
void CreateList_L(DLinkList *L,int n){
(*L)=(DLinkList)malloc(sizeof(DNode));
(*L)->next=(*L);
(*L)->prior=(*L);
DLinkList p;
for (int i=n; i>0; --i) {
p=(DLinkList)malloc(sizeof(DNode));
scanf("%d",&p->data);
p->next=(*L)->next;
(*L)->next->prior=p;
(*L)->next=p;
p->prior=(*L);
}
}
Status GetElem_L(DLinkList L,int i,ElemType *e){
DLinkList p=L->next;
int j=1;
while (p!=L&&j<i) {
p=p->next;++j;
}
if(p==L||j>i)
return ERROR;
*e = p->data;
return OK;
}
Status ListInsert_L(DLinkList L,int i,ElemType e){
DLinkList p=L->next,s;
int j=0;
while (p!=L&&j<i-1) {
p=p->next;
++j;
}
if(p==L||j>i-1)
return ERROR;
s=(DLinkList)malloc(sizeof(DNode));
s->data=e;
s->next=p->next;
p->next->prior=s;
p->next=s;
s->prior=p;
return OK;
}