#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define ERROR -1;
typedef int Status;
typedef int ElemType;
typedef struct DuLnode{
ElemType data;
DuLnode *next,*prior;
}DuLnode,*DuLinkNode;
Status InitDuLnode(DuLinkNode &L){
L = (DuLinkNode)malloc(sizeof(DuLnode));
L->next = NULL;
L->prior = NULL;
printf("init success \n");
return OK;
}
//创建双链表补充数据
Status CreateDuLinkNode(DuLinkNode &L){
DuLinkNode p,q;
p = L;
for (int i=0;i<10;i++){
q = (DuLinkNode)malloc(sizeof(DuLnode));
q -> data = i;
q -> prior = p;
q -> next = NULL;
p -> next = q;
p = p ->next;
}
return OK;
}
//查找元素返回指针
DuLinkNode GetElemByIndex(DuLinkNode &L,int i){
DuLinkNode p;
p = L;
for (int j=0;j<i;j++){
p = p->next;
}
printf("data is %d\n",p->data);
return p;
}
int GetElem(DuLinkNode L){
DuLinkNode p;
p = L;
while(p->next){
p = p->next;
printf("%d\n",p->data);
}
return 0;
}
//插入结点
Status InsertDuLinkNode(DuLinkNode L, int i, ElemType e){
DuLinkNode p,q;
p = GetElemByIndex(L,i);
q = (DuLinkNode)malloc(sizeof(DuLnode));
if(q){
q->data = e ;
q->prior = p->prior;
p->prior->next = q;
q->next = p;
p->prior = q;
return OK;
}
return ERROR;
}
//删除结点
Status DeleteDuLinkNode(DuLinkNode L, int i){
DuLinkNode p,q,r;
p = GetElemByIndex(L,i);
if(p){
r = p->next;
q = p->prior;
r->prior = q;
q->next = r;
free(p);
return OK;
}
return ERROR;
}
int main(){
DuLinkNode L;
InitDuLnode(L);
CreateDuLinkNode(L);
InsertDuLinkNode(L,3,33);
DeleteDuLinkNode(L,1);
DeleteDuLinkNode(L,5);
GetElem(L);
GetElemByIndex(L,1);
return 0;
}