📄 heap.c
字号:
##include "defs.h"PQinsert(he, v, offset)struct Halfedge *he;struct Site *v;float offset;{struct Halfedge *last, *next;he -> vertex = v;ref(v);he -> ystar = v -> coord.y + offset;last = &PQhash[PQbucket(he)];while ((next = last -> PQnext) != (struct Halfedge *) NULL && (he -> ystar > next -> ystar || (he -> ystar == next -> ystar && v -> coord.x > next->vertex->coord.x))) { last = next;};he -> PQnext = last -> PQnext; last -> PQnext = he;PQcount += 1;}PQdelete(he)struct Halfedge *he;{struct Halfedge *last;if(he -> vertex != (struct Site *) NULL){ last = &PQhash[PQbucket(he)]; while (last -> PQnext != he) last = last -> PQnext; last -> PQnext = he -> PQnext; PQcount -= 1; deref(he -> vertex); he -> vertex = (struct Site *) NULL;};}int PQbucket(he)struct Halfedge *he;{int bucket;bucket = (he->ystar - ymin)/deltay * PQhashsize;if (bucket<0) bucket = 0;if (bucket>=PQhashsize) bucket = PQhashsize-1 ;if (bucket < PQmin) PQmin = bucket;return(bucket);}int PQempty(){ return(PQcount==0);}struct Point PQ_min(){struct Point answer; while(PQhash[PQmin].PQnext == (struct Halfedge *)NULL) {PQmin += 1;}; answer.x = PQhash[PQmin].PQnext -> vertex -> coord.x; answer.y = PQhash[PQmin].PQnext -> ystar; return (answer);}struct Halfedge *PQextractmin(){struct Halfedge *curr; curr = PQhash[PQmin].PQnext; PQhash[PQmin].PQnext = curr -> PQnext; PQcount -= 1; return(curr);}PQinitialize(){int i; struct Point *s; PQcount = 0; PQmin = 0; PQhashsize = 4 * sqrt_nsites; PQhash = (struct Halfedge *) myalloc(PQhashsize * sizeof *PQhash); for(i=0; i<PQhashsize; i+=1) PQhash[i].PQnext = (struct Halfedge *)NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -