リンクリストに基づいてC++でキューコンテナを実装しようとしています。私はスタックを実装するために同じ構造を使用し、それは正常に働いた。C++でリンクリストを使用したキュー実装
しかし、今私は方法 "エンキュー"に問題がある。私はポインタが私の弱点であることを知っているが、正確に何が問題なのか理解できない。
#include <iostream>
template <class N>
class node {
public:
N data;
node* next;
};
template <class Q>
class my_queue {
protected:
node<Q>* m_head;
unsigned int m_size;
public:
my_queue() {
m_head = NULL;
m_size = 0;
}
void enqueue(Q value) {
node<Q>* newel = new node<Q>; // creating the new element
node<Q>* last = m_head; // find the last element in the queue
while(last != NULL) {
last = last->next;
}
newel->data = value;
newel->next = last->next;
last->next = newel;
m_size++;
}
void print() {
node<Q>* element = m_head; // element == each element in the list
while(element != NULL) {
std::cout << element->data << std::endl;
element = element->next;
}
}
};
私はこれをコンパイルする場合:
main() {
my_queue<int> q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.enqueue(4);
q.enqueue(5);
q.print();
return 0;
}
私はエラーを取得していないが、私はそれを実行したとき、私は「セグメンテーションフォールト」を取得します。機能におけるこのループ後
最初の要素を挿入すると、 'last'は割り当てられなかった' m_head'になりますので、 'last-> next = newel'を実行することはできません。 – Polb
それはソリューションの一部でした! – vgratian