您的位置:首页 > 理论基础 > 数据结构算法

数据结构之双链表带头节点

2016-03-28 00:02 411 查看
#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;
}


数据结构之双链表带头节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: