KATUBLO | エンジニアの日常BLOG

プログラミング、数学、旅行などを中心に役立つ情報をお届け

2019年01月27日

【アセンブラ言語】連結リストのポインタについて解説

こんにちは。 KATUOです。今回は連結リストでポインタを使って、データを繋げていくという部分を解説していきたいと思います。

 

連結リスト部分のポインタって?

まず連結リストの1要素は以下の2要素で構成される。

 

 

上でいうデータ部分は値が格納され、ポインタ部分は次のレコードの先頭アドレスが記録されます。

この1要素をC言語で定義してみましょう。

こんな感じでかけます。

 

 

dataがデータ部分、nextがポインタ部分を定義しています。

 

malloc関数を使って次の先頭アドレスを取得する

次はmalloc関数を使って要素の先頭アドレスを取得します。

C言語で表記するとこんな感じ

 

 

new_rには先ほど定義した1要素のアドレスが格納されています。

malloc関数の説明はここではしません。

 

 

連結リスト先頭への要素の追加

既存にある連結リストの先頭に要素を追加してみよう。

 

 

流れとしては追加する要素の作成→データDの代入→ポインタの付け替え です。

 

これをC言語で表記するとこんな感じ。

 

 

 

連結リスト構造の利点

連結リスト構造の利点として、要素(レコード)の挿入・削除が一定の時間で可能である点があげられる。

 

 

リスト途中への要素挿入

流れとしては

追加する要素の作成→データDの代入→ポインタの付け替え です。

 

 

C言語で表記するとこんな感じ

 

 

リスト途中からの要素の削除

流れとしてはデータの移し変え→ポインタの付け替え

 

以下のPを削除することを考える。

C言語で書くとこんな感じになる。

 

 

これによってpのデータはyのデータになり、かつ次に指すポインタがyの次のポインタに写り変わる。まとめると、yのデータがxに移行し、xの次に移動する場所がyの次の要素となった。このようにしてリスト途中からのレコード削除を行う。

 

 

アセンブリ言語のおすすめ参考書

 

ARMで学ぶ アセンブリ言語入門

 

最後まで読んで頂き、ありがとうございました。
SNS等でのシェアが頂ければ幸いです!

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習を開始。現在は「ToC向け大規模サービスを運営するメガベンチャー」と「AIスタートアップ」でインターンで修行中。2020年4月からwebエンジニアとして社会人生活スタート。

広告

特集記事