データ構造とアルゴリズムの設計 - リンクされたリストの先頭挿入と末尾挿入

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;
}

おすすめ

転載: blog.csdn.net/qq_46061085/article/details/120471862