总结一下双向循环链表的基本操作:
#include<stdio.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define OK 1
#define ERROR 0
typedef int Status; /**Status是函数类型,其值是函数结果状态代码,如OK等**/
typedef int ElemType;/**ElemType类型根据实际情况而定,这里假设为int**/
/**双向循环链表存储结构**/
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;
/**构造一个空的双向循环链表L**/
void InitList_DuL(DuLinkList *L){
*L = (DuLinkList)malloc(sizeof(DuLNode));
if(*L)
(*L)->next = (*L)->prior = *L;
else
;//exit(OVERFLOW);
}
/**销毁双向循环链表L**/
void DestroyList_DuL(DuLinkList *L){
DuLinkList q,p;
p = (*L)->next; //p指向第一个结点
while(p != *L){ //p未指到表头
q = p->next;
free(p);
p = q;
}
free(*L);
*L = NULL;
}
/**L已存,将L重置为空表**/
void ClearList_DuL(DuLinkList L){
DuLinkList q,p;
p = L->next; //p指向第一个结点
while(p != L){ //p未指到表头