循环双向链表:
循环双向链表的定义:
typedef struct CDLNode{
LElemType data;
struct CDLNode * pre;
struct CDLNode * next;
CDLNode(LElemType Data=0,struct CDLNode* Pre=NULL,struct CDLNode* Next=NULL){
data=Data; pre=Pre; next=Next;
}
}CDLNode,*CDLinkList;
循环双向链表基本操作的实现:
(1)、初始化操作 InitDuLinkList( &L )
(2)、建立单链表的操作 CreateDuLinkList(&L , n)
(3)、判断一个线性表是否为空表ListIsEmpty(L)
(4)、求线性表的长度ListLength( L )
(5)、取线性表中的第i个元素GetElem(L,i,&e)
(6)、查找元素e在线性表中的位序LocateElem(L,e)
(7)、插入操作ListInsert(&L,i,e)
(8)、删除操作LIstDelete(&L,i,&e)
(1)、初始化操作 InitDuLinkList( &L )
void InitCDLinkList(CDLinkList &L){
L=new CDLNode(inf,NULL,NULL);
L->next=L->pre;
L->pre=L->next;
}
(2)、建立单链表的操作 CreateDuLinkList(&L , n)
void CreateLinkList_Tail(CDLinkList &L,int n=0){ //尾插法
InitCDLinkList(L);
CDLinkList p=L,Pre=L;
Pre=L;
LElemType Data;
for(int i=1;i<=n;i++){
printf("请输入第%d个data值:\n",i);
cin>>Data;
p=new CDLNode(Data,Pre,L);
Pre->next=p;
Pre=p;
}
L->pre=Pre;
}
void CreateLinkList_Head(CDLinkList &L,int n=0){ //头插法
InitCDLinkList(L);
CDLinkList p=L,Pre=L,s;
LElemType Data;
for(int i