用循环单链表实现循环队列,如何写出插入和删除的算法?

用循环单链表实现循环队列,如何写出插入和删除的算法?,第1张

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所指被删除的节点*/

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11854590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存