导图
运行结果
主函数和点H函数
点C程序
#include "two-way.h"
linkPtr create()
{
linkPtr L=(linkPtr)malloc(sizeof(link));
if(NULL==L)
{
printf("创建失败\n");
return NULL;
}
L->len=0;
L->next=L;
L->prior=L;
printf("创建成功\n");
return L;
}
//判空
int empty(linkPtr L)
{
if(NULL==L)
{
printf("判空失败\n");
return -1;
}
return L->len==0;
}
//尾插
int tail_add(linkPtr L,DataType e)
{
if(NULL==L)
{
printf("尾插失败\n");
return 0;
}
//申请节点,封装数据
linkPtr L2=(linkPtr)malloc(sizeof(link));
if(NULL==L2)
{
printf("尾插失败\n");
free(L);
L=NULL;
return 0;
}
linkPtr P=L;
/*
L->prior=L2;
P=P->prior;
L2->prior=P;*/
for(int i=0;i<L->len;i++)
{
P=P->next;
}
//next的指向
P->next=L2;
L2->next=L;
//prior的指向
L2->prior=P;
L->prior=L2;
L2->data=e;
L->len++;
return 1;
}
//遍历
void show(linkPtr L)
{
if(NULL==L || empty(L))
{
printf("遍历失败\n");
return ;
}
linkPtr P=L;
for(int i=0;i<L->len;i++)
{
P=P->next;
printf("%d ",P->data);
}
printf("\n");
}
//prior遍历
void Pshow(linkPtr L)
{
if(NULL==L || empty(L))
{
printf("遍历失败\n");
return ;
}
linkPtr P=L;
for(int i=0;i<L->len;i++)
{
P=P->prior;
printf("%d ",P->data);
}
printf("\n");
}
//尾删
int tail_del(linkPtr L)
{
if(NULL==L || empty(L))
{
printf("遍历失败\n");
return 0;
}
linkPtr P=L;
P=P->prior;
printf("尾删除%d\n",P->data);
L->prior=P->prior;
P->prior->next=L;
free(P);
/* for(int i=0;i<L->len-1;i++)
{
P=P->next;
}
printf("尾删除%d\n",P->next->data);
free(P->next);
P->next=L;
L->prior=P;*/
L->len--;
return 1;
}
//销毁
void my_free(linkPtr L)
{
if(NULL==L || empty(L))
{
printf("遍历失败\n");
return ;
}
while(L->len!=0)
{
tail_del(L);
}
free(L);
L=NULL;
printf("已全部销毁\n");
}