//2.4.1 采用头插法建立循环单链表
void CreateListF(LinkNode * &L,ElemTyoe a[],int n)
{
LinkNode * s;
int i;
L = (LinkNode * )malloc(sizeof(LinkNode)); //创建头结点
L -> next = L; //置为空的循环单链表for(i = 0;i < n;i++)
{
s = (LinkNode * )malloc(sizeof(LinkNode)); //创建新结点
s -> data = a[i];
s -> next = L -> next; //将结点 s 插在头部
L -> next = s;
}
}
//2.4.2 采用尾插法建立循环单链表
void CreateListR(LinkNode * &L,ElemTyoe a[],int n)
{
LinkNode * s, * r;
int i;
L = (LinkNode * )malloc(sizeof(LinkNode)); //创建头结点
r = L; //r 始终指向终端结点,开始时指向头结点for(i = 0;i < n;i++)
{
s = (LinkNode * )malloc(sizeof(LinkNode)); //创建新结点 s
s -> data = a[i];
r -> next = s; //将结点 s 插入结点 r 之后
r = s;
}
r -> next = L; //尾结点的 next 域指向头结点
}
//2.4.3 在循环单链表中查找元素值为 x 的结点
int FinDLinkNode(LinkNode * L.ElemTyoe x)
{
int i;
LinkNode * p = L -> next; //p 指向首结点,i 置为 1while(p != L && p -> data != x)
{
p = p -> next;
i++;
}
if(p == L)
return0; //没有找到返回 0elsereturn i;
}
//2.4.4 在循环单链表中插入结点
q -> next = p -> next;
p -> next = q;
//2.4.5 在循环单链表中删除结点
p -> next = p -> next -> next;
//2.4.6 采用头插法建立循环双链表
void CreateListF(DLinkNode * &L,ElemTyoe a[],int n)
{
DLinkNode * s;
int i;
L = (DLinkNode * )malloc(sizeof(DLinkNode)); //创建头结点 L
L -> next = L -> prior = L; //建立一个空的循环双链表for(i = 0;i < n;i++)
{
s = (DLinkNode * )malloc(sizeof(DLinkNode)); //创建新结点 s
s -> data = a[i];
s -> next = L -> next; //将结点 s 插在首部if(L -> next != NULL)
L -> next -> prior = s;
L -> next = s;
s -> prior = L;
}
}
//2.4.7 采用尾插法建立循环双链表
void CreateListR(DLinkNode * &L,ElemTyoe a[],int n)
{
DLinkNode * s, * r;
int i;
L = (DLinkNode * )malloc(sizeof(DLinkNode)); //创建头结点
r = L; //r 始终指向尾结点,开始时指向头结点for(i = 0;i < n;i++)
{
s = (DLinkNode * )malloc(sizeof(DLinkNode));
s -> data = a[i]; //创建新结点 s
r -> next = s; //将结点 s 插入结点 r 之后
s -> prior = r;
r = s;
}
r -> next = L; //尾结点的 next 域指向头结点
L -> prior = r; //头结点的 prior 域指向尾结点
}
//2.4.8 在循环双链表中查找元素值为 x 的结点
int FinCDLinkNode(DLinkNode * L,ElemTyoe x)
{
int i = 1;
DLinkNode * p = L -> next; //p 指向首结点,i 置为 1while(p != L && p -> data != x)
{
p = p -> next;
i++;
}
if(p == L)
return0;
elsereturn i;
}
//2.4.9 在循环双链表中插入结点
q -> next = p -> next;
p -> next -> prior = q;
q -> prior = p;
p -> next = q;
//2.4.10在循环双链表中删除结点
q = p -> next;
p -> next = q -> next;
q -> next -> prior = p;