0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

連結リストって何?pythonで考える

Last updated at Posted at 2025-01-09

以下の記事を読んでpythonなのにポインタってどういうことだと気になったので自分で深掘ってみた
https://qiita.com/tsudaryo1715/items/12c4848028716ab015bb
結論からいうと、「ポインタ」を「参照している」と言い換えることで納得できた。

連結リストって何?

まず連結リストは何かを先ほどの記事から抜粋。(元記事も読んでね!)

「連結リストは、「データ部」と「ポインタ部」で構成されたデータ構造です。
ポインタをたどることでデータを取り出すことができます。
また、ポインタには、次のデータのアドレスが格納されています。」
image.png

このポインタを別のデータ部にくっつけることで鎖みたいに繋がっていく。
配列との違いは元記事参照。

そもそもポインタって何?

よくポインタは手紙の住所としてたとえて説明されます。
コンピュータのポインタは、変数がメモリ上のどこにあるかを示す「住所」のようなもので、それを使って間接的にデータにアクセスできるというように。

でもこれだとポインタそのものが何なのかよく分からないのでもっと厳密な定義を調べてみる。

「記憶装置の特定の場所を指示すため、(現在のコンピュータの多くは)連続した整数のアドレス(Address)、番地を1バイト単位で割当てている。レジスタや記憶装置の中身は全て有限桁ビット列のデジタル数値であるが、特にアドレス指定のための数値を記憶するレジスタや、記憶装置での特定アドレス(==高級言語での特定変数)を、ポインタと呼んで区別している。」(https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

ポインタは記憶装置の中のアドレスを保持し、そのアドレスを通じてデータを操作できる特別な変数のこと。

pythonでポインタって使えるの?

C言語のようにpythonでポインタは聞いたことがなかったので気になった。

結論から言うと、技術的には可能だがセキュリティの問題から非推奨とのこと。
https://www.youtube.com/watch?v=lclB2Y22nao)

pythonの連結リストはどうやって作るの?

以下のようにオブジェクトとオブジェクトを結びつけて作る。
node.next = Noneは末尾のノード
ノードが生成されるたびに、そのnext属性は次のノードを参照する。
ちなみにpythonの代入は値などが格納されるのではなく、参照するもの
もっと言うと変数とオブジェクトを結びつけることである。

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return

        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

    def display(self):
        current_node = self.head
        while current_node:
            print(current_node.data, end=" -> ")
            current_node = current_node.next
        print("None")

# 使用例
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.display()  # Output: 1 -> 2 -> 3 -> None

まとめると、pythonではポインタを使わずにオブジェクトを参照することで連結リストを作っている。元記事ではこのことをポインタと呼んで説明している。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?