#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct DNode{
ElemType data;
struct DNode *next,*prior;
}DNode,*DLinkList;
bool InitDLinkList(DLinkList &L){
L=(DNode*)malloc(sizeof(DNode));
if(L==NULL)
return false;
L->next=NULL;
L->prior=NULL;
return true;
}
void EmptyDLinkList(DLinkList &L){
if(L->next==NULL)
printf("空表\n");
else
printf("非空表\n");
}
bool TailInsertDLinkList(DLinkList &L){
int x;
scanf("%d",&x);
DNode *p,*s;
s=L;
while(x!=9999){
p=(DNode*)malloc(sizeof(DNode));
p->data=x;
p->next=NULL;
p->prior=s;
s->next=p;
s=p;
scanf("%d",&x);
}
return L;
}
void PrintDLinkList(DLinkList &L){
printf("链表为:");
int i=0;
DNode *p=(DNode*)malloc(sizeof(DNode));
p=L;
while(p->next!=NULL){
p=p->next;
i++;
printf("[%d]%d[%d]<=>",p->prior,p->data,p->next);
}
printf("\n链表长度为:%d\n",i);
if(p==NULL)
printf("链表为空,无法输出");
}
//按位序删除
bool DeleteDLinkList(DLinkList &L,ElemType i){
if(i<1){
printf("输入的位序不合法\n");
return false;
}
int j=0,e;
DNode *p=(DNode*)malloc(sizeof(DNode));
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==NULL)
return false;
DNode *q=p->next;
e=q->data;
p->next=q->next;
q->next->prior=p;
free(q);
printf("删除了第%d位的元素,值是:%d\n",i,e);
return true;
}
bool DeleteNodeDLinkList(DLinkList &L,DNode *p){
if(p==NULL)
return false;
int e;
DNode *q=p->next;
e=p->data;
printf("被删除的结点值为:%d\n",e);
p->data=q->data;
p->next=q->next;
q->next->prior=p;
free(q);
}
int main(){
DLinkList L;
InitDLinkList(L);
EmptyDLinkList(L);
TailInsertDLinkList(L);
EmptyDLinkList(L);
PrintDLinkList(L);
DeleteDLinkList(L,3);
PrintDLinkList(L);
DeleteNodeDLinkList(L,L->next->next);
PrintDLinkList(L);
}
运行结果如下: