void buildHuffmanTree() {
	//if pq is empty then nothing to do
		if(empty()){
			return;
		}
	//while queue has more than 1 node
	//NOTE: I wrote a size() function for the pq to make this easy
	while(size() > 1)
	{
	//grab 2 smallest nodes p1 and p2 from pq
		node *p1 = pqmindelete();
		node *p2 = pqmindelete();
	//create new node that is sum of p1 and p2 frequencies
	//create new parent
		node *p = getNode(p1->info + p2->info);
	//set p to be parent of p1 and p2
		p1->parent =p;
		p2 -> parent =p;
	//setleft p1
	p1->left = p1;
	//setright p2
	p2->right = p2;
	//put p in pq
	pqinsert(p);
	//last node in pq is the root so get it from pq and assign to root
	}
	root = pqmindelete();
}
Example #2
0
struct pqueue *
naive_sph_range(struct kd_point *pointlist, unsigned int npoints, float *p, 
		float *range)
{
    struct pqueue *res;
    struct resItem *point;
    float dsq;
    unsigned int i;

    if ((res = pqinit(NULL, 1)) == NULL) {
	fprintf(stderr, "Could not allocate memory for result queue\n.");
	return NULL;
    }
    for(i=0; i<npoints; i++) {
	if ((dsq = kd_sph_dist_sq(pointlist[i].point, p)) < *range) {
	    if ((point = kd_malloc(sizeof(struct resItem), "naive_qnearest: "))
		== NULL)
		return NULL;
	    if ((point->node = kd_allocNode(pointlist, i, 
					    /* 2 dummies */
					    pointlist[i].point, 
					    pointlist[i].point,
					    -1, 2)) == NULL)
		return NULL;
	    point->dist_sq = dsq;
	    pqinsert(res, point);
	}
    }
    return res;
}
void buildQueue() {
	int i;
	for(i = 0; i < NUMSYMBOLS; i++) {
		if(frequency[i] > 0) {
			node * n = getNode(frequency[i]);
			position[i] = n;
			pqinsert(n);
		}
	}
}
main()
{
     int ch,e,temp,old;
     pq.front=pq.rear=SIZE-1;
     while(1)
     {
     system("cls");
     char ch1='N';
     printf("\n\n\nPriority Queue Implementation\n\n\n");
     printf("1. Insert Elements\n");
     printf("2. Delete Smallest Element\n");
     printf("3. Delete Largest Element\n");
     printf("4. Display Elements\n");
     printf("5. Quit\n\n");
     printf("Enter Choice:");      
     scanf("%d",&ch);
     switch(ch)
     {
          case 1: 
                  printf("\nEnter Element:");
                  scanf("%d",&temp);
                  pqinsert(&pq,temp);                  
                  break;
          case 2:
                  fflush(stdin);
                  if(emptys(&pq))
                  {
                                 printf("\nUnderflow");
                                 getchar();
                                 break;                  
                  }
                  if(pq.front==SIZE-1)
                                printf("\nDelete %d (Y/N)?", pq.elements[0]);                                
                  else
                                printf("\nDelete %d (Y/N)?", pq.elements[pq.front+1]);
                  scanf("%c", &ch);
                  if(ch=='Y' || ch=='y')
                  {
                                  temp=pqmindelete(&pq);
                                  printf("\n%d Deleted !",temp);
                                  fflush(stdin);
                                  getchar();
                  }
                  break;
          case 3: 
                  fflush(stdin);
                  if(emptys(&pq))
                  {
                                 printf("\nUnderflow");
                                 getchar();
                                 break;                  
                  }
                  printf("\nDelete %d (Y/N)?", pq.elements[pq.rear]);
                  scanf("%c", &ch);
                  if(ch=='Y' || ch=='y')
                  {
                                  temp=pqmaxdelete(&pq);
                                  printf("\n%d Deleted !",temp);
                                  fflush(stdin);
                                  getchar();
                  }
                  break;
          case 4: 
                  fflush(stdin);
                  if(pq.front==pq.rear)
                  {
                                       printf("\nPriority Queue Empty");
                                       getchar();
                                       break;
                  }
                  old=pq.front; 
                  printf("\nPriority Queue List: ");
                  while(pq.front!=pq.rear)
                  {
                        if(pq.front==SIZE-1)
                                            pq.front=0;
                        else
                                            pq.front++;
                        printf("%d->",pq.elements[pq.front]);                        
                  }
                        getchar();
                  pq.front=old;
                  
                  break;
          case 5: exit(1);
          default:  printf("\nIncorrect Choice");                  
                    fflush(stdin);
                    getchar();
     }
     }
}