C语言实现双向循环链表的基本功能与调试:
//DoubleCircleLinkLst.h
#ifndef _LINKLIST_H
#define _LINKLIST_H
#include <stdio.h>
#include <stdlib.h>
#define FAILURE 10000
#define SUCCESS 10001
#define TRUE 10002
#define FALSE 10003
typedef int ElemType;
struct node
{
ElemType data;
struct node *next;
struct node *prior;
};
typedef struct node Node;
int LinkInit(Node **l);
int LinkInsert(Node *l, int n, ElemType e);
int LinkTraverse(Node *l, void (*p)(ElemType));
int LinkLength(Node *l);
int LinkEmpty(Node *l);
int GetElem(Node *l, int p, ElemType *e);
int LocateElem(Node *l, ElemType e, int (*p)(ElemType, ElemType));
int LinkDelete(Node *l, int p, ElemType *e);
int LinkClear(Node *l);
int LinkDestroy(Node **l);
#endif
//DoubleCircleLinkList.c
#include "LinkList.h"
int LinkInit(Node **l)
{
*l = (Node *)malloc(sizeof(Node) * 1);
if (NULL == *l)
{
return FAILURE;
}
(*l)->next = (*l);
(*l)->prior = (*l);
return SUCCESS;
}
int LinkInsert(Node *l, int n, ElemType e)
{
Node *p = l;
int k = 1;
if (NULL == l)
{
return FAILURE;
}
if (n > LinkLength(l) + 1)
{
return FAILURE;
}
while (k < n)
{
p = p->next;
k++;
}
if (k > n)
{
return FAILURE;
}
Node *q = (Node *)malloc(sizeof(Node) * 1);
if (NULL == q)
{