2013-07-07 33 views
0
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; 
     } 
    } 
} 

我不能得到任何地方,我無法調試問題,因爲當我在隊列中輸入值時,程序突然終止!這就是爲什麼它很難理解根本問題在哪裏!爲什麼會發生?爲什麼這個靜態隊列程序不工作?它自己結束,突然

另外,你可以給我一些關於如何解決這些問題的提示嗎?

+1

您應該爲您的隊列創建一個類。 –

+0

你是什麼意思「終止」?它會崩潰嗎? –

+0

製作一個隊列類並使隊列[],frontPoiner,readPointer成員變量以及該類的所有4個函數方法。您正在增加一些變量,但不檢查是否已到達隊列末尾。使用調試器可以顯示代碼崩潰的位置。如果您沒有調試,請添加打印語句以幫助您瞭解發生的情況。這種類型的隊列代碼非常棘手,您需要明確定義兩個指針是指向隊列中的某個時隙還是指向隊列之外的時隙。 –

回答

2

PUSH函數實際上遞增指針rearPointer而不是它指向的值。

變化

*rearPointer++; 

(*rearPointer)++; 
+0

你真棒!有效。謝謝你的解釋。 –

0

要解決這個問題和其他類似問題,您可以運行在調試器下的應用程序,我想調試器將捕獲異常,你可以得到一些線索關於什麼是錯的。

如果您使用的是IDE,您可以找到與「與調試器一起運行」類似文本的菜單項,或者您可以先運行該應用程序並附加調試器。您可以添加睡眠延遲以確保您有時間附加調試器。

+0

好的。不知道有這樣的事情!謝謝 –

相關問題