二重リンクリスト
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
二重リンクリストは、next_ptr(次の要素を指すポインタ)と、もう1つprev_ptr(前の要素を指すポインタ)を持ちます。
シングルリンクリストは、リンクリストに書いたとおりですので、これを改造した二重リンクリストのデータ構造を表すクラスが以下。
スポンサーリンク
class doublelist { public: class doublelist_elem { public: int data; // この要素のデータ private: doublelist_elem *next_ptr; // 次の要素へのポインタ doublelist_elem *prev_ptr; // 前の要素へのポインタ friend class doublelist; }; public: doublelist_elem *first_ptr; // リストの先頭 // 二重リンクリストの初期化。コンストラクタ doublelist() {first_ptr = NULL;} // 要素を追加 void enter(int item); };
「doublelist_elem *prev_ptr;」と、前の要素へのポインタが追加されています。
「8, 12, 68」というリンクリストのデータ構造だったとして、ここに32という要素を追加する場合・・・
1.まず、挿入ポイントを現在の先頭要素へと設定し、
2.挿入ポイントを1つずつ次に進め、
3.追加する新しいデータが挿入ポイントより小さくなった箇所が、挿入ポイントの前に新しいデータを追加すべき箇所であると、特定できます。
要素を追加する「void enter(int item);」を定義します。
// 挿入ポイントを特定し挿入 void doublelist::enter(int item) { doublelist_elem *insert_ptr; // この要素の前に挿入する insert_ptr = first_ptr; // 挿入ポイントを先頭に設定 while (true) { insert_ptr = insert_ptr->next_ptr; // 挿入ポイントを1つ次に進める // リストの終端か if (insert_ptr == NULL) break; // 挿入ポイントか? if (item <= insert_ptr->data) break; } // 新しい要素の追加 doublelist_elem = *new_ptr; new_ptr = new doublelist_elem; // 新しい要素に次へのポインタ設定 new_ptr->next_ptr = insert_ptr; // 新しい要素に前へのポインタ設定 new_ptr->prev_ptr = insert_ptr->prev_ptr; // 新しい要素の1つ前となる要素に、新しい要素をポイントさせる insert_ptr->prev_ptr->next_ptr = new_ptr; // 新しい要素の1つ次となる要素に、新しい要素をポイントさせる insert_ptr->prev_ptr = new_ptr; }
要素を挿入する際には、4つのリンク(ポイント)を設定する必要があります。
スポンサーリンク
>> 次の記事 : ツリー
<< 前の記事 : リンクリストの指定した箇所に要素を追加
- - 関連記事 -
- ツリー
- リンクリストの指定した箇所に要素を追加
- リンクリスト
- delete演算子
- new演算子でオブジェクト生成
- new演算子・動的メモリの割り当て
- 構造体とポインタ
- 配列のポインタ宣言
- 配列とポインタ・アドレスのインクリメントを確認
- 定数ポインタ
- ポインタとは
スポンサーリンク