//单向循环链表即为无头无尾
//①尾结点的指针域指向头结点
//②设置一个尾指针更加高效
//③在插入和删除算法上要遵守单向链表的特点
//创建单向循环链表
ElemSN *Createlink(int a[])
{
ElemSN *h,*t,*p;
h=NULL;
for(int i=0;i<N;i++){//为新结点分配单元
p=(ElemSN *)malloc(sizeof(ElemSN));
p->data=a[i];//为结点数据域赋值
if(!h){//头指针指上来
p->next=p;//同时指向自己,形成循环链
h=t=p;
}
else{
p->next=h;//挂链
t=t->next=p;//挂链挪指针
}
}
return h;
}
//输出
void Prelink(ElemSN *h)
{
ElemSN *p;
p=h;
do{//采用do..while形式,避免是一个结点的情况
printf("%5d",p->data);
p=p->next;
}while(p!=h);
}