1: リンク リストのコンポーネント
リンク リストは複数のノードで構成され、各ノードはデータ フィールドとポインタ フィールドの 2 つの部分に分割されます。データ フィールドはデータ要素を格納するために使用され、ポインタはデータの検索を容易にするために次のノード (次のデータ) のアドレスを格納します。
struct Link{
int date;
struct Link *next;
};
2: リンクリストの作成
1. 末尾挿入メソッドの作成
struct Link * create_Link_tail(struct Link *head)
{
struct Link* tail = (struct Link*)malloc(sizeof(Link));
tail = head;
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
tail->next=temp;
tail = temp;
}
tail->next =NULL;
return head;
}
受信ヘッド ポインタとまったく同じ遷移ポインタを作成し、常に新しいノード temp を指します (つまり、常にリンク リストの末尾を指します)。移動せずにヘッド ポインタの後ろに新しいノードを追加できます。ヘッドポインタ。
2. ヘッド挿入方法
struct Link* create_Link_head(struct Link* head)
{
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
temp->next = head->next;
head->next = temp;
}
return head;
}
新しく作成されたノードの次のポインタは head->next (つまり最初の Link ノード) を指します。そうすると、新しく作成されたノードは当然新しい最初のノード、つまり head->next になります。
3: リンク リストのトラバーサル
void traverse_Link(struct Link* head) //遍历链表
{
struct Link* ptr = (struct Link*)malloc(sizeof(Link));
ptr = head->next;
while(ptr!=NULL)
{
cout<<ptr->date<<endl;
ptr = ptr->next;
}
}
head->next、つまり最初の要素を指す一時ポインタを作成します。head は最初ではなくヘッドです。次に、while ループを使用して ptr が空かどうかを判断し、空でない場合は内部の日付値を取り出し、空であればループを終了して走査を終了します。
4: まとめ 上記
のリンク リストとコードは非常にシンプルで理解しやすいですが、理解できない場合は、次の方法を試してみてください: ノードを作成する場合: Link jiedian1; このノードの次のノードは jiedian2 です。丸暗記: jiedian->next は jiedian2 を参照します。つまり、jiedian1->next->date は jiedian2->date です。コードを見ることを忘れないでください。それは明らかです。
コード全体は次のとおりです。
#include <iostream>
using namespace std;
struct Link{
int date;
struct Link *next;
};
struct Link * create_Link_tail(struct Link *head)
{
struct Link* tail = (struct Link*)malloc(sizeof(Link));
tail = head;
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
tail->next=temp;
tail = temp;
}
tail->next =NULL;
return head;
}
struct Link* create_Link_head(struct Link* head)
{
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
temp->next = head->next;
head->next = temp;
}
return head;
}
void traverse_Link(struct Link* head) //遍历链表
{
struct Link* ptr = (struct Link*)malloc(sizeof(Link));
ptr = head->next;
while(ptr!=NULL)
{
cout<<ptr->date<<endl;
ptr = ptr->next;
}
}
int main(int argc, char const *argv[])
{
struct Link *Head = (struct Link*)(malloc(sizeof(Link)));
create_Link_head(Head);
traverse_Link(Head);
return 0;
}