双向循环头文件doubleloop.h
#ifndef _DOUBLELOOP_H_
#define _DOUBLELOOP_H_
#include<stdio.h>
#include<stdlib.h>
typedef int DATE;
typedef struct node
{
union
{
int len;
DATE data;
};
struct node *next;
struct node *prior;
}doubleloop,*doubleloopptr;
//创建
doubleloopptr create();
//判空
int empty(doubleloopptr H);
//尾插
int tail_add(doubleloopptr H,DATE e);
//向后遍历
void show(doubleloopptr H);
//向前遍历
void ss(doubleloopptr H);
//尾删
int tail_del(doubleloopptr H);
//销毁
void my_free(doubleloopptr H);
#endif
主函数 doublelooplink .c
#include"doubleloop.h"
int main()
{
doubleloopptr H=create();
tail_add(H,10);
tail_add(H,20);
tail_add(H,30);
tail_add(H,40);
tail_add(H,50);
tail_add(H,60);
show(H);
tail_del(H);
ss(H);
show(H);
my_free(H);
H=NULL;
}
调用自定义函数doubleloop.c
#include"doubleloop.h"
//创建
doubleloopptr create()
{
doubleloopptr H=(doubleloopptr)malloc(sizeof(doubleloop));
if(NULL==H)
{
printf("创建失败\n");
return NULL;
}
H->len=0;
H->next=H;
H->prior=H;
printf("创建成功\n");
return H;
}
//判空
int empty(doubleloopptr H)
{
if(NULL==H)
{
printf("判空失败\n");
return -1;
}
return H->len==0;
}
//尾插
int tail_add(doubleloopptr H,DATE e)
{
if(NULL==H)
{
printf("尾插失败\n");
return 0;
}
doubleloopptr p=(doubleloopptr)malloc(sizeof(doubleloop));
if(NULL==p)
{
printf("申请失败\n");
return 0;
}
p->data=e;
p->next=NULL;
p->prior=NULL;
doubleloopptr q=H;
while(q->next!=H)
{
q=q->next;
}
p->next=H;
p->prior=q;
q->next=p;
H->prior=p;
H->len++;
return 1;
}
//向后遍历
void show(doubleloopptr H)
{
if(NULL==H||empty(H))
{
printf("遍历失败\n");
return ;
}
doubleloopptr q=H;
for(int i=0;i<H->len;i++)
{
q=q->next;
printf("%d ",q->data);
}
printf("\n");
}
//向前遍历
void ss(doubleloopptr H)
{
if(NULL==H||empty(H))
{
printf("遍历失败\n");
return ;
}
doubleloopptr q=H;
for(int i=0;i<H->len;i++)
{
q=q->next;
}
while(q!=H)
{
printf("%d ",q->data);
q=q->prior;
}
printf("\n");
}
//尾删
int tail_del(doubleloopptr H)
{
if(NULL==H||empty(H))
{
printf("尾删失败\n");
return 0;
}
doubleloopptr q=H;
while(q->next!=H)
{
q=q->next;
}
q->prior->next=H;
H->prior=q->prior;
free(q);
q=NULL;
H->len--;
return 1;
}
//销毁
void my_free(doubleloopptr H)
{
if(NULL==H)
{
printf("销毁失败\n");
return;
}
while(H->next!=H)
{
tail_del(H);
}
free(H);
H=NULL;
printf("销毁成功\n");
}