二重リンクリストを実装するC++プログラム
二重リンクリストは、自己参照構造を使用して作成されたノードで構成されるデータ構造の一種です。これらの各ノードには、データと次のリストノードへの参照、および前のリストノードへの参照の3つの部分が含まれています。
リンクリスト全体にアクセスするには、最初のリストノードへの参照のみが必要です。これは頭として知られています。リストの最後のノードは何も指していないため、その部分にNULLが格納されます。また、各ノードが前のノードと次のノードを指しているため、二重にリンクされたリストを両方向にトラバースできます。
二重リンクリストを実装するプログラムは次のとおりです。
例
#include <iostream> using namespace std; struct Node { int data; struct Node *prev; struct Node *next; }; struct Node* head = NULL; void insert(int newdata) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = newdata; newnode->prev = NULL; newnode->next = head; if(head != NULL) head->prev = newnode ; head = newnode; } void display() { struct Node* ptr; ptr = head; while(ptr != NULL) { cout<< ptr->data <<" "; ptr = ptr->next; } } int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The doubly linked list is: "; display(); return 0; }
出力
The doubly linked list is: 9 2 7 1 3
上記のプログラムでは、構造体ノードが二重リンクリストノードを形成しています。これには、データと、次および前のリンクリストノードへのポインタが含まれています。これは次のように与えられます。
struct Node { int data; struct Node *prev; struct Node *next; };
関数insert()は、二重リンクリストの先頭にデータを挿入します。 newnodeを作成し、newnodeのデータフィールドに番号を挿入します。次に、newnodeのprevポインターは、最初に入力されたときにNULLを指し、次のポインターはヘッドを指します。ヘッドがNULLでない場合、ヘッドのprevポインタはnewnodeを指します。最後に、ヘッドはnewnodeです。つまり、リンクリストはそこから始まります。これを以下に示します。
void insert(int newdata) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = newdata; newnode->prev = NULL; newnode->next = head; if(head != NULL) head->prev = newnode ; head = newnode; }
関数display()は、二重リンクリスト全体を表示します。最初のptrは頭を指します。次に、ノードのすべてのデータ値が出力されるまで、次のノードに継続的に転送されます。これを以下に示します。
void display() { struct Node* ptr; ptr = head; while(ptr != NULL) { cout<< ptr->data <<" "; ptr = ptr->next; } }
関数main()では、insert()を呼び出すことにより、最初にさまざまな値が二重リンクリストに挿入されます。次に、二重リンクリストが表示されます。これを以下に示します。
int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The doubly linked list is: "; display(); return 0; }
-
C++で二重にリンクされたリストを使用した優先キュー
データと優先度は整数値として与えられ、タスクは与えられた優先度に従って二重にリンクされたリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先
-
隣接リストを実装するC++プログラム
グラフの隣接リスト表現は、リンクリスト表現です。この表現では、リストの配列があります。配列のサイズはVです。ここで、Vは頂点の数です。つまり、V個の異なるリストを格納する配列があると言えます。リストヘッダーが頂点uの場合、uの隣接するすべての頂点を保持することを意味します。 隣接リスト表現の複雑さ この表現は、無向グラフの場合はO(V + 2E)を取り、有向グラフの場合はO(V + E)を取ります。エッジの数を増やすと、必要なスペースも増えます。 入力 : 出力 : アルゴリズム add_edge(adj_list、u、v) 入力 :エッジ{u、v}のuとv、およ