Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. #include "anyprior.h"
  2.  
  3. void pq_init(priority_queue * pq, int allocLen) {
  4. pq->allocLen = allocLen;
  5. pq->logLen = 0;
  6. pq->attr = malloc(pq->allocLen * sizeof(item));
  7. }
  8.  
  9.  
  10. void enqueue_pq(priority_queue * pq, void * elem, int priority,int elemSize) {
  11. if(pq->logLen == pq->allocLen){
  12. pq->allocLen = 2 * pq->allocLen;
  13. pq->attr = realloc(pq->attr, pq->allocLen * sizeof(item));
  14. }
  15.  
  16. if(pq->logLen == 0){
  17. item * it = malloc(sizeof(item));
  18. it->elemSize = elemSize;
  19. it->priority = priority;
  20. it->elem = elem;
  21. memcpy(pq->attr, it, sizeof(item));
  22. }else{
  23. for(int i=0; i<pq->logLen; i++){
  24. item *it = pq->attr + i;
  25. int prior = it->priority;
  26. if(priority > prior){
  27. memmove(pq->attr + i + 1, pq->attr + i, (pq->logLen -i)*sizeof(item) );
  28. item * it = malloc(sizeof(item));
  29. it->elemSize = elemSize;
  30. it->priority = priority;
  31. it->elem = elem;
  32. memcpy(pq->attr +i, it, sizeof(item));
  33. break;
  34. }
  35. }
  36. }
  37. pq->logLen++;
  38. }
  39.  
  40.  
  41. void dequeue_pq(priority_queue * pq, void * elem) {
  42. item * it = pq->attr;
  43. memcpy(elem, it->elem, it->elemSize);
  44. memmove(pq->attr, pq->attr + 1, (pq->logLen - 1) * sizeof(item) );
  45. pq->logLen--;
  46. }
  47.  
  48. int pq_size(priority_queue * pq) {
  49. return pq->logLen;
  50. }
  51.  
  52. int main() {
  53. priority_queue * pq = malloc(sizeof(priority_queue));
  54. pq_init(pq, 10);
  55. int a =10;
  56. int b =9;
  57. int w =8;
  58. char * bla ="hah";
  59. enqueue_pq(pq, &a, 1, sizeof(a));
  60. enqueue_pq(pq, &b, 4, sizeof(b));
  61. enqueue_pq(pq, &w, 2, sizeof(w));
  62. enqueue_pq(pq, &bla, 3, sizeof(bla));
  63.  
  64. //enqueue_pq(pq, 6, 0);
  65. int c;
  66. char * d;
  67. int g;
  68. int k;
  69. dequeue_pq(pq,&c);
  70. dequeue_pq(pq,&d);
  71. dequeue_pq(pq,&g);
  72. dequeue_pq(pq,&k);
  73. printf("%d\n", c);
  74. printf("%s\n", d);
  75. printf("%d\n", g);
  76. printf("%d\n", k);
  77. // printf("%d\n",pq_size(pq) );
  78.  
  79.  
  80.  
  81. return 1;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement