typedef struct CircleListNode{
Datatype d
struct CircleList *pre,*nxt
}*CircleList,CirListNode
typedef struct
{
CircleList Head
int num
}CircleQueue
void insertFront(CircleList *L,d)
{
if(!L)return NULL
if(*L==NULL)
{
*L=(CircleList) malloc(sizeof(CirListNode))
*L->nxt= *L->pre=*L
*L->d=d
}
else
{
CircleList p =(CircleList) malloc(sizeof(CirListNode))
p->nxt=*L
p->pre=*L->pre
*L->pre->nxt=p
*L->pre=p
*L=p
}
}
循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除 *** 作较为方便。
循环单链中尾指针执行一个命令:rear=rear->next不就成头指针了~插入:
InserterList_Dul(DuLNode *l,Datatype *p,Datatype e)/*将E元素插入到循环单链表L中的P指针所指的元素前面*/
{
s=(struct DuLNode *)malloc(sizeof(sturct DuLNode))/*申请一个节点,让指针S指向它*/
s->data=e/*将S送入新节点*/
s->next=p/*使新节点的后继指针指向P*/
s->prior=p->prior/*使新节点的前驱指针指向P的前驱指针*/
p->prior->next=s/*使P的前驱节点的后继指针指向新节点*/
p->prior=s/*使P的前驱指针指向新节点*/
}
删除:
DeleteList_Dul(DulNOde *l,DuLnode *p) /*删除循环单链表L中P指针所指的元素*/
{
p->prior->next=p->next/*使P的前驱节点的后继指针指向P的后继节点*/
p->next->prior=p->prior/*使P的后继节点的前向指针指向P的前驱节点*/
free(p)/*释放P所指被删除的节点*/
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)