#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int DataType;
typedef struct DLinkNode
{
DataType data;
struct DLinkNode *prior;
struct DLinkNode *rear;
}DLinkNode,*DLinkList;
// ²»´øÍ·½ÚµãµÄË«Á´±í
int CreatDLinkList(DLinkList *L)
{
*L=(DLinkNode *)malloc(sizeof(DLinkNode));
(*L)->data=NULL;
(*L)->prior=NULL;
(*L)->rear=NULL;
return 0;
}
// ²åÈëÔªËØ
int InsertDLinkList(DLinkList L,DataType x)
{
DLinkList p=L;
DLinkNode *s=(DLinkNode *)malloc(sizeof(DLinkNode));
s->data=x;
s->rear=NULL;
s->prior=NULL;
while(p->rear && p->rear->data>x)
p=p->rear;
if(p->rear==NULL)
{
s->prior=p;
p->rear=s;
}
else
{
// ºó²å
s->prior=p;
s->rear=p->rear;
p->rear->prior=s;
p->rear=s;
}
return 0;
}
/*
*/
int DeleteDLinkList(DLinkList L,DataType x)
{
DLinkList p=L;
p=p->rear;
while(p && p->data!=x)
{
p=p->rear;
}
if(!p)
return 0;
else
{
if(p->rear==NULL)
{
p->prior->rear=NULL;
free(p);
return 1;
}
else
{
p->prior->rear=p->rear;
p->rear->prior=p->prior;
free(p);
return 1;
}
}
return 0;
}
// ´òÓ¡ÔªËØ
void DisplayDLinkList(DLinkList L)
{
DLinkList p=L;
while(p->rear)
{
p=p->rear;
printf("%d ",p->data);
}
printf("\n");
}
int main()
{
int i;
DLinkList L=NULL;
CreatDLinkList(&L);
for(i=40;i>20;i--)
{
InsertDLinkList( L,i);
}
for(i=0;i<20;i++)
{
InsertDLinkList( L,i);
}
DisplayDLinkList(L);
for(i=10;i<20;i++)
{
DeleteDLinkList( L,i);
}
DisplayDLinkList(L);
return 0;
}
数据结构之双链表带头节点