2017-08-14 57 views
0

我正在學習使用鏈表實現隊列數據結構。這是我的代碼。爲什麼這個顯示功能只能打印第一個插入的元素。還有一個疑問是,我在極客中看到了一些代碼,因爲那裏還有一個單獨的隊列結構。我在想,通過在末尾添加和在前面刪除,只是單個鏈接列表類型的實現就沒有問題。這有什麼不對嗎? 這是我的代碼。爲什麼在此代碼中顯示隊列功能只打印第一次插入的值多次?

#include<iostream> #include<stdlib.h> #define memory (struct queue*)malloc(sizeof(struct queue)) using namespace std; struct queue{ int data; struct queue *next; }; struct queue *front=NULL, *rear=NULL; class constructQ{ public: void enQ(int num){ struct queue *newnode= memory; newnode->data= num; newnode->next= NULL; if(!rear){ rear=newnode; if(!front) front= newnode; } else{ rear->next= newnode; rear= newnode; } } void display(){ struct queue *tmp= front; while(tmp){ cout << front->data << " "; tmp= tmp->next; } } }; int main(){ int num, choice; constructQ q; while(1){ cout << "1.enqueue 2.Dequeue 3.display 4.exit" << endl; cin >> choice; switch(choice){ case 1: cin>> num; q.enQ(num); break; case 3: q.display(); break; case 4: exit(0); default: cout << "invalid input" << endl; break; } } return 0; }
+0

'清點<< front->數據<< 「 」;',你不是說'清點<< tmp->數據<<「」;'? – Stefan

+0

'struct queue * tmp'是一個「C-ism」。在C++中,你可以首先編寫'queue * tmp' – molbdnilo

回答

0
  1. 只有第一(前)節點正在打印是由於代碼之中:

    cout << front->data << " "; // prints the front value every iteration

在while循環

代替:

cout << tmp->data << " " // prints the data in tmp which is the next in every iteration; 
  • 鏈接列表可用於實現隊列和堆棧。 STL使用雙鏈表來允許反向迭代。
  • 注意:建議使用nullptr作爲空指針而不是NULL(不易出錯)。

    +0

    ,解決問題。而我的問題的第二部分是使用鏈表的隊列實現。在這個鏈接http://www.geeksforgeeks.org/queue-set-2-linked-list-implementation/使用兩種類型的結構,爲什麼CreateQueue所有這些東西?我對這個代碼感到困惑。你可以在上面的問題中看到我的實現。這種類型是好還是不好?我只是學習請解釋。 –

    +0

    首先在C中實現,而不是在C++中,所以沒有類。也許這是造成混亂的原因。 –

    +0

    要回答你關於2層結構的問題:是的,這通常是你將如何實現一個數據結構:將一個數據容器(節點)和節點容器(鏈表/二叉樹等) –

    相關問題