我现在用堆实现了一个优先队列,实现了插入和删除操作,但如何实现查找呢?不用全部遍历的方法 20
1个回答
2011-04-20
展开全部
->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所指被删除的节点*/
}
另外,虚机团上产品团购,超级便宜
插入:
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所指被删除的节点*/
}
另外,虚机团上产品团购,超级便宜
追问
谢谢楼上,这个实现不了,我的堆是用数组存储的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询