bool queueIsFull(int rearPointer)
{
if(rearPointer==9)
return 1;
else
return 0;
}
void PUSH (int queue[], int value, int *frontPointer, int *rearPointer)
{
*rearPointer++;
if(*frontPointer==-1)
*frontPointer=0;
queue[*rearPointer] = value;
}
bool queueIsEmpty (int frontPointer, int rearPointer)
{
if(rearPointer==(-1) && frontPointer==(-1))
return true;
else
return false;
}
void POP (int* frontPointer, int* rearPointer, int queue[])
{
cout << "\n Deleted element is: " << queue[*frontPointer];
if(*rearPointer==*frontPointer)
{
*rearPointer=-1;
*frontPointer=-1;
}
else
*frontPointer++;
}
int main()
{
int option, value, queue[10];
int rearPointer=-1, frontPointer=-1;
while(1)
{
cout << "\n----------[STATIC QUEUE]--------\nEnter a choice: \n1. PUSH AN ELEMENT\n2. POP AN ELEMENT\n3. EXIT\n";
cin >> option;
switch(option)
{
case 1: if(!queueIsFull(rearPointer))
{
cout << "\nEnter a value to push in queue: ";
cin >> value;
PUSH(queue, value, &frontPointer, &rearPointer);
}
else
cout << "\nqueue is full. Empty the queue elements and try again!";
break;
case 2: if(!queueIsEmpty(frontPointer, rearPointer)) // either of the parameters would do.
POP(&frontPointer, &rearPointer, queue); // queue is optional. You only need it to display thte poped value.
else
cout << "\nqueue is already empty. Enter some elements";
break;
case 3: return 0;
break;
default: cout << "\nWrong choice! Try again.";
break;
}
}
}
我不能得到任何地方,我無法調試問題,因爲當我在隊列中輸入值時,程序突然終止!這就是爲什麼它很難理解根本問題在哪裏!爲什麼會發生?爲什麼這個靜態隊列程序不工作?它自己結束,突然
另外,你可以給我一些關於如何解決這些問題的提示嗎?
您應該爲您的隊列創建一個類。 –
你是什麼意思「終止」?它會崩潰嗎? –
製作一個隊列類並使隊列[],frontPoiner,readPointer成員變量以及該類的所有4個函數方法。您正在增加一些變量,但不檢查是否已到達隊列末尾。使用調試器可以顯示代碼崩潰的位置。如果您沒有調試,請添加打印語句以幫助您瞭解發生的情況。這種類型的隊列代碼非常棘手,您需要明確定義兩個指針是指向隊列中的某個時隙還是指向隊列之外的時隙。 –