Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "anyprior.h"
- void pq_init(priority_queue * pq, int allocLen) {
- pq->allocLen = allocLen;
- pq->logLen = 0;
- pq->attr = malloc(pq->allocLen * sizeof(item));
- }
- void enqueue_pq(priority_queue * pq, void * elem, int priority,int elemSize) {
- if(pq->logLen == pq->allocLen){
- pq->allocLen = 2 * pq->allocLen;
- pq->attr = realloc(pq->attr, pq->allocLen * sizeof(item));
- }
- if(pq->logLen == 0){
- item * it = malloc(sizeof(item));
- it->elemSize = elemSize;
- it->priority = priority;
- it->elem = elem;
- memcpy(pq->attr, it, sizeof(item));
- }else{
- for(int i=0; i<pq->logLen; i++){
- item *it = pq->attr + i;
- int prior = it->priority;
- if(priority > prior){
- memmove(pq->attr + i + 1, pq->attr + i, (pq->logLen -i)*sizeof(item) );
- item * it = malloc(sizeof(item));
- it->elemSize = elemSize;
- it->priority = priority;
- it->elem = elem;
- memcpy(pq->attr +i, it, sizeof(item));
- break;
- }
- }
- }
- pq->logLen++;
- }
- void dequeue_pq(priority_queue * pq, void * elem) {
- item * it = pq->attr;
- memcpy(elem, it->elem, it->elemSize);
- memmove(pq->attr, pq->attr + 1, (pq->logLen - 1) * sizeof(item) );
- pq->logLen--;
- }
- int pq_size(priority_queue * pq) {
- return pq->logLen;
- }
- int main() {
- priority_queue * pq = malloc(sizeof(priority_queue));
- pq_init(pq, 10);
- int a =10;
- int b =9;
- int w =8;
- char * bla ="hah";
- enqueue_pq(pq, &a, 1, sizeof(a));
- enqueue_pq(pq, &b, 4, sizeof(b));
- enqueue_pq(pq, &w, 2, sizeof(w));
- enqueue_pq(pq, &bla, 3, sizeof(bla));
- //enqueue_pq(pq, 6, 0);
- int c;
- char * d;
- int g;
- int k;
- dequeue_pq(pq,&c);
- dequeue_pq(pq,&d);
- dequeue_pq(pq,&g);
- dequeue_pq(pq,&k);
- printf("%d\n", c);
- printf("%s\n", d);
- printf("%d\n", g);
- printf("%d\n", k);
- // printf("%d\n",pq_size(pq) );
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement