如何转移此优先级队列?

时间:2013-11-27 09:11:39

标签: priority-queue

我的程序应该执行4个操作:adddeleteshowexit使用优先级队列...这里是代码:

#include<iostream>
#include<conio.h>
using namespace std;
#define SIZE 5            /* Size of Queue */
int f=0,r=-1;       /* Global declarations */
typedef struct PRQ
{
     int ele;
     int pr;
     int sign;
}PriorityQ;
PriorityQ PQ[SIZE];

//***************************************************
void PQinsert(int elem, int pre)
{
     int i;       /* Function for Insert operation */
     if( r==SIZE-1) 
        printf("\n\n Overflow!!!!\n\n");
     else
     {
          i=r;
          ++r;
         while(PQ[i].pr >= pre && i >= 0) /* Find location for new elem */
         {
            PQ[i+1]=PQ[i];
            i--;
         }
         PQ[i+1].ele=elem;
         PQ[i+1].pr=pre;
     }
}
//***************************************************
PriorityQ PQdelete()
{                      /* Function for Delete operation */
    PriorityQ p;

    if(f > r) 
    {
         printf("\n\nUnderflow!!!!\n\n");
         p.ele=-1;p.pr=-1;
         return(p);
     }
     else
    {
        p=PQ[f];

        f=f+1;
        return(p);
     }
}
//***************************************************

void display()
{                  /* Function to display status of Queue */
     int i;
     if(r==SIZE-1) 
         printf(" \n Empty Queue\n");
    else
    {
     printf("Front->");
    for(i=f;i<=r;i++)
     printf("[%d,%d] ",PQ[i].ele,PQ[i].pr);
    printf("<-Rear");
    }
}

//***************************************************

int main()
{                         /* Main Program */
    int opn;
     PriorityQ p;
     do
     {
     system("cls");
     printf("\n ### Priority Queue Operations(DSC order) ### \n\n");
     printf("\n Press 1-Insert, 2-Delete,3-Display,4-Exit\n");
     printf("\n Your option ? ");
     scanf("%d",&opn);
    switch(opn)
    {
         case 1: 
             printf("\n\nRead the element and its Priority?");
             scanf("%d%d",&p.ele,&p.pr);
             PQinsert(p.ele,p.pr); break;
          case 2: 
              p=PQdelete();
              if( p.ele != -1)
              printf("\n\nDeleted Element is %d \n",p.ele);
              break;
          case 3: 
              printf("\n\nStatus of Queue\n\n");
                  display(); 
              break;
          case 4: 
              printf("\n\n Terminating \n\n"); 
              break;
          default: 
              printf("\n\nInvalid Option !!! Try Again !! \n\n");
                  break;
        }
        printf("\n\n\n\n  Press a Key to Continue . . . ");
        getch();
        }
     while(opn != 4);
}

现在我想添加一个符号,以便在插入元素时,该元素在数组中的符号变为1&amp;当一个元素被删除时,它的符号变为0 ...然后我想将符号为“1”的房屋向左移动,这样当从队列中删除一个元素时,将以这种方式完成移位过程我们不会在数组中有任何空格,我们仍然可以添加一个元素......

好吧,这就是我想做的一切,但我尝试了不同的方式和我无法做我想做的事......现在我对我应该做的事情一无所知!! :(请你告诉我该怎么办(如何添加标志和转换元素)?

1 个答案:

答案 0 :(得分:0)

我不确定为什么你需要这个标志征服和指责。

如何修改删除功能,以便通过移动队列并减少计数来实际删除元素?

PriorityQ PQdelete()
{                      /* Function for Delete operation */
 PriorityQ p;
 int neshane;
 int loop_var;
 if(f > r)
 {
     printf("\n\nUnderflow!!!!\n\n");
     p.ele=-1;p.pr=-1;
     return(p);
 }
 else
 {
  p=PQ[0];
  // if one element: just reduce the count of element
  if(r==0)
   r--;
  else
  // if more than one: shift all elements to the left and reduce the count
  {
   for(loop_var=0; loop_var<r; loop_var++)
   {
    PQ[loop_var+1] = PQ[loop_var];
   }
   r--;
  }
  return(p);
 }
}

这应该对你有所帮助,或者我可能不理解你的问题。请让我知道你对它的看法。