Моя программа должна делать 4 операции: add
, delete
, show
и exit
с использованием очереди приоритета ... вот код:как перенести эту очередь приоритетов?
#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 &, когда элемент удален, это знак становится 0 ... тогда я хочу переместить дома, у которых есть знак «1» слева, так что, когда элемент удаляется из очереди , процесс смещения будет выполнен, таким образом, у нас не будет никакого пустого пространства в массиве, и мы все равно можем добавить элемент ...
ну это было все, что я хотел сделать, но я пробовал разные способы & Я не мог делать то, что хотел ... Теперь я не имею ни малейшего представления о том, что я должен делать! :(бы у пожалуйста, скажите, что я должен делать (как добавить знак и сдвиг элементов)?
tnx это был хороший способ, но объяснение, которое я дал abou t положить знак и ... это способ, которым наш профессор сказал нам делать и называется логическим удалением !!! в логическом удалении знак пустынных домов будет 0, а знак заполненных домов будет 1, тогда мы будем искать в очереди, чтобы увидеть, равен ли знак 0 или 1, если бы у нас было 1 после 0 мы будем нажимать на дом со знаком «1» слева ... так что дом с знаком «0» будет удален, и у нас не будет никакого пустого места в массиве! –
ОК после: при вводе изменить значение знака на 1. при удалении изменить значение знака элемента [f] на 0. добавить функцию очистки, проходящую через ваш список, и заменить все 0-маркированный элемент по первый справа от него. Затем вам нужно будет вызвать эту функцию, по крайней мере, каждый раз, когда вы удаляете элемент (или каждый оборот вашего цикла). –
Да, сначала я это сделал, но я столкнулся с ошибкой: (функция insert стала бесконечным циклом, я имею в виду, что я мог вставлять элементы, не учитывая определенную сумму: SIZE! Я думаю, моя функция была неправильной или что-то в этом роде. Помогите мне с этой функцией? –