#include <stdlib.h>
typedef struct DLNode
{
int data;
struct DLNode* prior;
struct DLNode* next;
}DLNode,*DLinkList;
void InitDL(DLinkList DL)
{
if(DL!=NULL)
{
DL->next=DL;
DL->prior=DL;
}
else
{
DL=(DLinkList)malloc(sizeof(DLNode));
DL->next=DL;
DL->prior=DL;
}
}
void InsertFront(DLinkList DL,int value)
{
DLinkList p;
p=(DLinkList)malloc(sizeof(DLNode));
p->data=value;
DL->next->prior=p;
p->next=DL->next;
DL->next=p;
p->prior=DL;
}
void InsertEnd(DLinkList DL,int value)
{
DLinkList p,q;
p=(DLinkList)malloc(sizeof(DLNode));
p->data=value;
q=DL->prior;
DL->prior=p;
p->next=DL;
p->prior=q;
q->next=p;
}
void Print(DLinkList DL)
{
DLinkList p;
p=DL->next;
while(p!=DL)
{
printf("%d/t",p->data);
p=p->next;
}
printf("/n");
}
void DeleteFront(DLinkList DL,int *val)
{
DLinkList p;
p=DL->next;
if(p!=DL)
{
DL->next=p->next;
*val=p->data;
p->next->prior=DL;
free(p);
}
else
printf("LinkList is empty!/n");
}
void DeleteEnd(DLinkList DL,int *val)
{
DLinkList p,q;
q=DL;
p=DL->next;
if(p!=DL)
{
while(p->next!=DL)
{
q=p;
p=p->next;
}
*val=p->data;
q->next=p->next;
p->next->prior=q;
free(p);
}
else
printf("LinkList is empty!/n");
}
int main()
{
DLinkList ML;
int i,val;
ML=(DLinkList)malloc(sizeof(DLNode));
InitDL(ML);
DeleteFront(ML,&val);
DeleteEnd(ML,&val);
for(i=1;i<=8;i++)
{
InsertFront(ML,i+38);
InsertEnd(ML,i+100);
}
Print(ML);
DeleteFront(ML,&val);
DeleteEnd(ML,&val);
Print(ML);
printf("Hello, world/n");
getch();
return 0;
}