2014-11-24 34 views
-4

更具體地說,我正在研究一個函數,該函數檢測從用戶輸入的一組節點中存在的元素。例如,可以說用戶排入包含名稱,日期,ID的項目......並且該用戶排入了5個項目,我想逐個檢查一個特定的ID並輸出「Found !!!」...如何從C++中的每個節點使用隊列搜索元素?

這是我已經走了這麼遠,但我一直在得到EXC_BAD_ACCESS(代碼= 1,地址= 0x40的)上的Xcode ..同樣的事情到Visual Studio以及..

void lookup(int _patient_id) 
{ 
    node *newnode = new node; 
    newnode = front; 

    while (newnode->next != NULL) 
    { 
     if (newnode->patient_id == _patient_id) 
      cout<<"Found!!!!!!!"; 
     else 
      newnode = newnode->next; 
    } 

} 
+0

這是絕對錯誤的,並且證明缺乏關於C++基本原理的知識。 – 2014-11-24 19:05:15

+0

您似乎正在分配一個新節點並將其泄漏,無論如何。您的搜索將跳過列表中的最後一個節點。如果實際發現節點,則會進入無限循環。沒有看到你有什麼錯誤,不可能知道是什麼原因造成的。 – 2014-11-24 19:05:26

+0

對於初學者來說,你不需要檢查'newnode'是否爲'NULL'。 – juanchopanza 2014-11-24 19:06:03

回答

1

這是你的函數應該看起來如何,但是如果你仍然崩潰,這意味着你的程序中有其他錯誤,我們需要看到更多的代碼。

node* lookup(int _patient_id) 
{ 
    node *newnode = front; 
    while (newnode != NULL) 
    { 
     if (newnode->patient_id == _patient_id) 
     { 
      cout<<"Found!!!!!!!"; 
      return newnode; 
     } 
     newnode = newnode->next; 
    } 
    return NULL; 
} 
+0

這一個工作就像一個魅力,謝謝喬納森!但是,你能解釋爲什麼我們使用node *而不是void? – user3104111 2014-11-24 19:18:32

+0

在現實生活中,查找/搜索功能將始終返回所發現的內容,而不僅僅是打印出「Found !!!!!!!」。如果需要,可以將其更改回爲'void',但要確保在找到節點時保留'return'語句,否則將返回崩潰或無限循環。 – 2014-11-24 19:22:38

+0

我剛剛添加「Found !!!」輸出只是爲了測試目的..不是因爲我缺乏知識C++ ..無論如何謝謝! – user3104111 2014-11-24 19:30:17