1.头文件:cdlinklist.h,包含定义双链表数据结构的代码、宏定义、要实现算法的函数的声明;
//循环双链表基本运算函数
typedef int ElemType;
typedef struct DNode //定义双链表结点类型
{
ElemType data;
struct DNode *prior; //指向前驱结点
struct DNode *next; //指向后继结点
} CDLinkList;
void CreateListF(CDLinkList *&L,ElemType a[],int n); //头插法建立循环双链表
void CreateListR(CDLinkList *&L,ElemType a[],int n); //尾插法建立循环双链表
void InitList(CDLinkList *&L); //初始化循环双链表
void DestroyList(CDLinkList *&L); //销毁
bool ListEmpty(CDLinkList *L); //判断是否为空
int ListLength(CDLinkList *L); //求链表长度
void DispList(CDLinkList *L); //输出链表
bool GetElem(CDLinkList *L,int i,ElemType &e); //取链表元素
int LocateElem(CDLinkList *L,ElemType e); //查找元素
bool ListInsert(CDLinkList *&L,int i,ElemType e); //插入节点
bool ListDelete(CDLinkList *&L,int i,ElemType &e); //删除节点
2.源文件:cdlinklist.cpp,包含实现各种算法的函数的定义
//循环双链表基本运算函数
#include <stdio.h>
#include <malloc.h>
#include "cdlinklist.h"
void CreateListF(CDLinkList *&L,ElemType a[],int n) //头插法建立循环双链表
{
CDLinkList *s;
int i;
L=(CDLinkList *)malloc(sizeof(CDLinkList)); //创建头结点
L->next=NULL;
for (i=0; i<n; i++)
{
s=(CDLinkList *)malloc(sizeof(CDLinkList));//创建新结点
s->data=a[i];
s->next=L->next; //将*s插在原开始结点之前,头结点之后
if (L->next!=NULL) L->next-&g