{ "cells": [ { "cell_type": "markdown", "id": "59517027-1968-4587-9e7a-bde6a0ef17aa", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Array, Tuple, dan Linked List dengan Python\n", "* Pengolahan data adalah salah satu aspek penting dalam pemrograman, di mana efisiensi dan kinerja dalam mengakses dan memanipulasi data menjadi fokus utama. Dalam pengembangan perangkat lunak, pemahaman tentang berbagai struktur data sangatlah penting.\n", "* Kita akan menggali konsep masing-masing struktur data, memberikan pemahaman tentang cara menggunakannya, serta memberikan wawasan tentang bagaimana Python memberikan dukungan dan kemudahan dalam pengolahan data menggunakan ketiga struktur tersebut.\n", "* Dengan memahami penggunaan dan perbedaan antara array, tuple, dan linked list, Anda akan memiliki landasan yang kuat dalam mengelola data dengan lebih efisien dan efektif dalam lingkungan pemrograman Python." ] }, { "cell_type": "markdown", "id": "720444e5-2d77-42d9-9f33-f113aa5987c9", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## A. Mengapa harus ada struktur data?\n", "1. **Optimalisasi Kinerja**: Struktur data memiliki peran vital dalam mengoptimalkan kinerja program. Dengan penggunaan struktur data yang tepat, waktu yang diperlukan untuk akses dan manipulasi data dapat diminimalkan. Misalnya, penggunaan indeks dalam array memungkinkan akses langsung ke elemen tertentu, mengurangi kompleksitas waktu.\n", "2. **Manajemen Memori**: Struktur data membantu dalam manajemen alokasi memori yang efisien. Ini mencegah pemborosan memori dengan mengalokasikan hanya sejumlah memori yang diperlukan untuk menyimpan data. Dengan menghindari alokasi memori berlebihan, aplikasi dapat berjalan dengan lebih efisien dan stabil.\n", "3. **Pengorganisasian Data**: Data kompleks seringkali harus diorganisasi dan dikelompokkan untuk memudahkan pengolahan. Struktur data memungkinkan data diatur dalam bentuk yang terstruktur seperti list, dictionary, atau linked list, memudahkan manipulasi, pencarian, dan penyimpanan data yang lebih teratur.\n", "4. **Pemodelan Konsep**: Beberapa struktur data seperti stack, queue, dan linked list digunakan untuk memodelkan konsep dunia nyata. Misalnya, stack merepresentasikan tumpukan benda seperti tumpukan buku, sementara queue merepresentasikan antrian seperti antrian di kasir.\n", "5. **Kemudahan Pembacaan Kode**: Penggunaan struktur data yang tepat membuat kode lebih terbaca dan dipahami. Ketika nama variabel dan metode sesuai dengan kegunaannya (seperti data.append(item) untuk menambahkan item ke list), pembacaan kode menjadi lebih intuitif dan mudah dimengerti.\n", "6. **Penyimpanan Data Bersarang**: Struktur data memungkinkan penyimpanan data bersarang, artinya suatu struktur data dapat ditempatkan di dalam struktur data lainnya. Misalnya, list dalam list (nested list) memungkinkan representasi data hierarkis seperti matriks dua dimensi." ] }, { "cell_type": "markdown", "id": "32760ecb-a786-48e3-b388-8bf69d6a65c2", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## B. Tipe Data Array\n", "Array adalah struktur data yang mengelompokkan elemen-elemen dengan tipe data yang sama dalam urutan tertentu. Setiap elemen diakses melalui indeks numerik yang dimulai dari nol. Array memiliki fungsi penting dalam pengelolaan data dalam pemrograman. Fungsi data array:\n", "1. **Penyimpanan Data Terstruktur**: Array mengorganisir data dalam urutan yang terstruktur, memungkinkan akses dan manipulasi data secara efisien. Elemen-elemen dalam array diakses melalui indeks, yang membuat pencarian dan pengolahan data lebih mudah.\n", "2. **Akses Cepat**: Karena setiap elemen memiliki indeks yang unik, akses ke elemen tertentu dalam array memiliki kompleksitas waktu yang konstan (O(1)). Ini memungkinkan akses data secara cepat dan efisien.\n", "3. **Pengolahan Data**: Array memungkinkan operasi pengolahan data dalam skala besar. Anda dapat melakukan operasi matematika, transformasi, penyortiran, dan pencarian pada elemen-elemen array dengan mudah.\n", "4. **Pengalokasian Memori Tertentu**: Array mengalokasikan memori berurutan untuk elemen-elemen. Ini membuat pengalokasian memori lebih terstruktur dan memudahkan manajemen memori.\n", "5. **Representasi Struktur Data Lain**: Array dapat digunakan untuk merepresentasikan struktur data lain seperti stack dan queue. Ini dilakukan dengan mengontrol cara elemen dimasukkan dan dihapus dari array.\n", "6. **Implementasi Matriks**: Array multidimensi dapat digunakan untuk merepresentasikan matriks atau tabel dua dimensi. Ini berguna dalam pemrograman matriks, grafik, dan pemrosesan gambar." ] }, { "cell_type": "markdown", "id": "cfbe170f-3da0-401f-a5ac-ab4d11d6cc0e", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Meskipun array memiliki banyak keunggulan, pada bahasa Pemrograman C atau Java, setelah mendeklarasikan dan mengalokasikan memori untuk sebuah array dengan ukuran tertentu, ukurannya biasanya tetap setelah dideklarasikan dan tidak bisa diubah secara dinamis. Hal ini membuatnya kurang fleksibel dibandingkan struktur data dinamis seperti list. Namun, array tetap menjadi bagian integral dari pemrograman dengan peran penting dalam mengelola data dalam urutan tertentu. Contoh implementasi array di Python." ] }, { "cell_type": "code", "execution_count": 1, "id": "3620a4fd-8232-4c43-9c89-02e011c34ba6", "metadata": { "editable": true, "scrolled": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "array('i', [1, 10, 3, 4, 5, 6])\n" ] } ], "source": [ "from array import array\n", "\n", "bilangan = array(\"i\", [1, 2, 3, 4, 5]) # Tipe data \"i\" merepresentasikan integer\n", "print(bilangan[2]) # Output: 3\n", "\n", "bilangan[1] = 10\n", "bilangan.append(6)\n", "print(bilangan)" ] }, { "cell_type": "markdown", "id": "73921228-7937-4496-a045-da830e0a6b64", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## C. Tipe Data List\n", "Dalam bahasa pemrograman seperti Python, tipe data list yang digunakan sebagai pengganti array memungkinkan perubahan ukuran secara dinamis. Anda dapat menambah atau menghapus elemen dari list tanpa harus mengkhawatirkan tentang alokasi memori atau mengubah ukuran array secara manual. Oleh karena itu, Python lebih fleksibel dalam hal ini dibandingkan dengan bahasa lain yang menggunakan tipe data array dengan ukuran yang tetap dan tidak bisa diubah." ] }, { "cell_type": "code", "execution_count": 2, "id": "7c43a33c-f99e-4487-bb7c-e5997f23bf73", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 1. List Sederhana\n", "angka = [1, 2, 3, 4, 5]\n", "buah = [\"apel\", \"pisang\", \"jeruk\"]\n", "campuran = [10, \"hello\", 3.14, True]" ] }, { "cell_type": "code", "execution_count": 3, "id": "f65aa247-0560-43b8-b93f-aad6c082aa59", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "apel\n", "pisang\n" ] } ], "source": [ "# 2. Akses Elemen dalam List\n", "buah = [\"apel\", \"pisang\", \"jeruk\"]\n", "print(buah[0]) # Output: apel\n", "print(buah[1]) # Output: pisang\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "23a80d1c-219b-4c53-9a40-739a667a4cd0", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 10, 4, 5, 6, 7, 8, 9]\n" ] } ], "source": [ "# 3. Modifikasi Elemen dalam List\n", "angka = [1, 2, 3, 4, 5]\n", "angka[2] = 10\n", "angka.append(6)\n", "angka.extend([7, 8, 9])\n", "print(angka)" ] }, { "cell_type": "code", "execution_count": 5, "id": "ff356ba9-a546-4577-8c5d-f884cfd060d2", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6 3 1 3\n" ] } ], "source": [ "# 4. Operasi dengan List\n", "angka = [1, 2, 3]\n", "total = sum(angka)\n", "panjang = len(angka)\n", "terkecil = min(angka)\n", "terbesar = max(angka)\n", "\n", "print(total, panjang, terkecil, terbesar)" ] }, { "cell_type": "code", "execution_count": 6, "id": "dca20d07-67e6-4779-a9b3-51b61695350d", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "apel\n", "pisang\n", "jeruk\n" ] } ], "source": [ "# 5. Pengulangan dengan List\n", "buah = [\"apel\", \"pisang\", \"jeruk\"]\n", "for item in buah:\n", " print(item)" ] }, { "cell_type": "code", "execution_count": 9, "id": "5201abab-17d4-4b8f-a900-bdd6965406b6", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6\n" ] } ], "source": [ "# 6. List di dalam List (Nested List)\n", "matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", "print(matrix[1][2]) # Output: 6" ] }, { "cell_type": "code", "execution_count": 12, "id": "c75e0cb1-e38a-4ea6-93cc-2e0850b21b2e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buah pisang ditemukan.\n" ] } ], "source": [ "# 7. Pencarian di dalam List\n", "buah = [\"apel\", \"pisang\", \"jeruk\"]\n", "if \"pisang\" in buah:\n", " print(\"Buah pisang ditemukan.\")\n", "else:\n", " print(\"Buah tidak ditemukan.\")\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "39728f27-7c0c-4008-8342-ac1f3ac959a3", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['apel', 'jeruk']\n" ] } ], "source": [ "# 8. Penghapusan Elemen dari List\n", "buah = [\"apel\", \"pisang\", \"jeruk\"]\n", "buah.remove(\"pisang\")\n", "buah.pop(0)\n", "print(buah)" ] }, { "cell_type": "markdown", "id": "043ea90d-881b-46f5-a41b-065c2a6db3a3", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## D. Tipe Data Tuple\n", "Tipe data tuple di Python mirip dengan tipe data list, tetapi dengan perbedaan utama bahwa tuple bersifat tidak dapat diubah setelah dibuat. Ini berarti setelah elemen-elemen tuple ditentukan, Anda tidak dapat menambah, menghapus, atau mengubah elemen-elemen tersebut. Tuple sering digunakan untuk menyimpan data yang tidak seharusnya berubah, seperti koordinat atau informasi tetap lainnya." ] }, { "cell_type": "code", "execution_count": null, "id": "2bc0c844-e6f7-49a1-829d-d09292b3797b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 1. Membuat Tuple\n", "koordinat = (3, 4)\n", "buah = (\"apel\", \"pisang\", \"jeruk\")\n", "campuran = (10, \"hello\", 3.14)" ] }, { "cell_type": "code", "execution_count": null, "id": "90271460-442b-4f78-a13e-8675ecd0dd9d", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 2. Akses Elemen dalam Tuple\n", "koordinat = (3, 4)\n", "x = koordinat[0] # x akan bernilai 3\n", "x" ] }, { "cell_type": "code", "execution_count": null, "id": "c38633bf-d53b-4150-988c-7f43a250098e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 3. Pengulangan di Tuple\n", "buah = (\"apel\", \"pisang\", \"jeruk\")\n", "for item in buah:\n", " print(item)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "a149ad04-b7b7-414f-9d60-7ac10820dcdc", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 4. Pencarian dalam Tuple\n", "buah = (\"apel\", \"pisang\", \"jeruk\")\n", "if \"pisang\" in buah:\n", " print(\"Buah pisang ditemukan.\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "bbb715f5-b4ac-4554-8019-ae42b8b653f9", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 5. Tuple dalam Fungsi\n", "def bagi_dan_modulus(a, b):\n", " hasil_bagi = a // b\n", " sisa_bagi = a % b\n", " return (hasil_bagi, sisa_bagi)\n", "\n", "hasil = bagi_dan_modulus(10, 3) # hasil akan menjadi tuple (3, 1)\n", "print(hasil)" ] }, { "cell_type": "code", "execution_count": null, "id": "4602d97d-cda9-4e82-9585-11d6912d9c59", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 6. Tuple dalam Tuple (Nested Tuple)\n", "matrix = ((1, 2, 3), (4, 5, 6), (7, 8, 9))\n", "elemen = matrix[1][2] # elemen akan bernilai 6\n", "print(elemen)" ] }, { "cell_type": "code", "execution_count": null, "id": "6c42af99-d837-4f23-9d12-481e578dfada", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 7. Penguraian Tuple (Tuple Unpacking)\n", "koordinat = (3, 4)\n", "x, y = koordinat # x akan bernilai 3, y akan bernilai 4\n", "print(y,x)" ] }, { "cell_type": "markdown", "id": "8599f1ce-8570-446c-89f8-20f5b34cb38e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## E. Tipe Data Linked List\n", "Linked list adalah salah satu struktur data dasar paling dasar di bidang ilmu komputer. Dengan menggunakan linked list, programmer dapat menyimpan data saat dibutuhkan. Linked list mirip dengan larik, kecuali bahwa data yang disimpan dalam Linked list dapat dialokasikan secara dinamis selama operasi program . Linked list dalam struktur data yang berisi objek data yang dihubungkan oleh tautan. Setiap Linked list terdiri dari node yang memiliki bidang data dan referensi ke node berikutnya dalam daftar tertaut." ] }, { "cell_type": "markdown", "id": "98327485-de0a-4747-a8a6-9c03b527a562", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Dalam sebuah array, jika programmer ingin menyimpan data, programmer harus terlebih dahulu menentukan ukuran array, biasanya programmer mengalokasikan array yang sangat besar (misalnya, 100). Ini tidak efektif karena tidak terlalu besar dalam penggunaan umum. Dan jika programmer ingin menyimpan lebih dari seratus data, itu tidak mungkin karena sifat statis dari array. Linked listadalah struktur data yang dapat menutupi kelemahan ini. Biasanya, Linked listterdiri dari banyak blok data kecil yang ditautkan (biasanya melalui pointer). Linked list memiliki kemampuan untuk memvisualisasikan contoh yakni kereta api, terdapat bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer." ] }, { "cell_type": "markdown", "id": "f918a9be-c116-4e3d-b77b-fa6393dc7e0b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Perumpamaan\n", "Programmer membaca data seperti kondektur yang melakukan pemeriksaan tiket. Pemrogram menelusuri Linked listmelalui kepalanya, dan kemudian melanjutkan ke truk (data) berikutnya, dan seterusnya, hingga truk terakhir (biasanya ditandai dengan penunjuk yang menunjukkan alamat nol (NULL). Pengambilan data diselesaikan satu per satu, sehingga traversal data bekerja efektif pada ON. Dibandingkan dengan array, ini adalah kelemahan terbesar dari linked list. Dalam array, jika programmer ingin mengakses data ke-n (indeks n), maka programmer dapat langsung mengaksesnya. Pada saat yang sama, untuk daftar tertaut, programmer harus terlebih dahulu melintasi n data. Linked list adalah sekelompok elemen dari jenis yang sama, mereka memiliki urutan tertentu, dan setiap elemen terdiri dari dua bagian.\n" ] }, { "cell_type": "markdown", "id": "7f8ea7ab-7079-44da-88fb-4b41b9719a11", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 1. Singly Linked List (Daftar Taut Tunggal)\n", "Dalam singly linked list, setiap node hanya memiliki tautan ke node berikutnya dalam urutan. Node terakhir (tail) memiliki tautan yang kosong (None) karena tidak ada node berikutnya. Ini adalah tipe linked list yang paling umum.\n", "\n", "Kelebihan:\n", "* Memiliki penggunaan memori yang lebih efisien daripada doubly linked list karena hanya satu tautan per node.\n", "* Cocok untuk aplikasi yang memerlukan penggunaan data satu arah.\n", "\n", "Kekurangan:\n", "* Pengaksesan atau pencarian mundur tidak efisien karena tidak ada tautan mundur." ] }, { "cell_type": "code", "execution_count": 33, "id": "48ab9669-b2c3-4099-81c2-2970b9c5f763", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# Class Linked List\n", "\n", "class Node:\n", " def __init__(self, data):\n", " self.data = data\n", " self.next = None\n", "\n", "class SinglyLinkedList:\n", " def __init__(self):\n", " self.head = None\n", "\n", " def append(self, data):\n", " new_node = Node(data)\n", " if not self.head:\n", " self.head = new_node\n", " return\n", " current = self.head\n", " while current.next:\n", " current = current.next\n", " current.next = new_node\n", "\n", " def display(self):\n", " current = self.head\n", " while current:\n", " print(current.data, end=\" -> \")\n", " current = current.next\n", " print(\"None\")" ] }, { "cell_type": "code", "execution_count": 34, "id": "3d6ad9bd-ea78-4546-bf4f-8bf5cb5e2c2a", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 -> 30 -> 37 -> None\n" ] } ], "source": [ "linked_list = SinglyLinkedList()\n", "linked_list.append(10)\n", "linked_list.append(30)\n", "linked_list.append(37)\n", "linked_list.display()" ] }, { "cell_type": "markdown", "id": "d4566eee-159b-4d9f-be38-50a1e8d23f84", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 2. Doubly Linked List (Daftar Taut Ganda):\n", "Dalam doubly linked list, setiap node memiliki tautan ke node berikutnya dan tautan ke node sebelumnya dalam urutan. Node pertama memiliki tautan sebelumnya yang kosong (None) dan node terakhir memiliki tautan berikutnya yang kosong (None).\n", "\n", "Kelebihan:\n", "* Memungkinkan pengaksesan maju dan mundur dengan efisien karena setiap node memiliki tautan ke node sebelumnya dan berikutnya.\n", "* Cocok untuk aplikasi yang memerlukan penggunaan data dua arah.\n", "\n", "Kekurangan:\n", "* Memerlukan lebih banyak penggunaan memori daripada singly linked list karena setiap node memiliki dua tautan.\n", "\n", "Linked list umumnya digunakan ketika ukuran dan struktur data perlu berubah secara dinamis, dan alokasi memori tidak harus kontinu. Meskipun lebih kompleks daripada array atau list, linked list memungkinkan fleksibilitas dalam pengelolaan data dan memori." ] }, { "cell_type": "code", "execution_count": 35, "id": "caafdb25-b1df-45e5-81ec-ad1524734ec8", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "class Node:\n", " def __init__(self, data):\n", " self.data = data\n", " self.prev = None\n", " self.next = None\n", "\n", "class DoublyLinkedList:\n", " def __init__(self):\n", " self.head = None\n", "\n", " def append(self, data):\n", " new_node = Node(data)\n", " if not self.head:\n", " self.head = new_node\n", " return\n", " current = self.head\n", " while current.next:\n", " current = current.next\n", " current.next = new_node\n", " new_node.prev = current\n", "\n", " def display(self):\n", " current = self.head\n", " while current:\n", " print(current.data, end=\" <-> \")\n", " current = current.next\n", " print(\"None\")" ] }, { "cell_type": "code", "execution_count": 36, "id": "081ff4f4-eb74-4e15-9dff-7fca9a019b86", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 <-> 20 <-> 30 <-> None\n" ] } ], "source": [ "linked_list = DoublyLinkedList()\n", "linked_list.append(10)\n", "linked_list.append(20)\n", "linked_list.append(30)\n", "linked_list.display()" ] }, { "cell_type": "markdown", "id": "0481d10a-6504-4aec-9543-197917731e73", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 3. Linked List Python\n", "Kode berikut ini mendefinisikan kelas Node untuk merepresentasikan node dalam linked list, dan kelas linkedList untuk mengimplementasikan operasi-operasi linked list. Anda dapat menggunakan metode-metode ini untuk memanipulasi dan mengelola data dalam linked list sesuai dengan kebutuhan Anda." ] }, { "cell_type": "code", "execution_count": 39, "id": "e3258248-b1a4-4481-9aed-20652b55e115", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "class Node:\n", " def __init__(self, data):\n", " self.data = data\n", " self.next = None" ] }, { "cell_type": "markdown", "id": "a0dc734b-12e1-432c-8f41-6fadd228b737", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "1. __init__(self): Konstruktor untuk inisialisasi linked list. Ini akan membuat linked list dengan head awalnya kosong.\n", "2. insertAtBeginning(self, data): Metode ini memungkinkan Anda menyisipkan node baru dengan data ke awal linked list. Jika linked list kosong, maka node baru akan menjadi head, jika tidak, node baru akan menjadi head dan mengaitkan tautan ke node sebelumnya.\n", "3. insertAtEnd(self, data): Metode ini memungkinkan Anda menyisipkan node baru dengan data ke akhir linked list. Metode ini melakukan iterasi dari head ke node terakhir dan menambahkan node baru di belakangnya.\n", "4. insertAtGivenPosition(self, data, position): Metode ini memungkinkan Anda menyisipkan node baru dengan data pada posisi tertentu dalam linked list. Ini melibatkan perhitungan berdasarkan position dan memodifikasi tautan node terkait untuk memasukkan node baru.\n", "5. traverse(self): Metode ini digunakan untuk menelusuri (traverse) linked list dari head ke akhir, dan mencetak data dari setiap node.\n", "6. delFromBeginning(self): Metode ini digunakan untuk menghapus node pertama (node head) dari linked list. Ini mengganti head dengan node berikutnya dan menghapus node yang dihapus.\n", "7. delFromEnd(self): Metode ini digunakan untuk menghapus node terakhir dari linked list. Ini melibatkan iterasi hingga node terakhir sebelum menghapusnya.\n", "8. delAtPos(self, position): Metode ini digunakan untuk menghapus node pada posisi tertentu dalam linked list. Metode ini melakukan iterasi hingga mencapai posisi yang diinginkan dan menghapus node tersebut." ] }, { "cell_type": "code", "execution_count": 50, "id": "a4d974b0-3430-4500-a179-55db71b0bf3b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "class linkedList:\n", " \n", " def __init__(self):\n", " self.head = None\n", " \n", " \n", " def insertAtBeginning(self, data):\n", " temp = Node(data)\n", " if self.head == None:\n", " self.head = temp\n", " else:\n", " temp.next = self.head\n", " self.head = temp\n", " \n", " \n", " def insertAtEnd(self, data):\n", " temp = Node(data)\n", " if self.head == None:\n", " self.head = temp\n", " else:\n", " curr = self.head\n", " while curr.next != None:\n", " curr=curr.next\n", " curr.next=temp\n", "\n", "\n", " def insertAtGivenPosition(self, data, position):\n", " count = 1\n", " curr = self.head\n", " while count < position - 1 and curr != None:\n", " curr = curr.next\n", " count += 1\n", " temp = Node(data)\n", " temp.next = curr.next\n", " curr.next = temp\n", " \n", " \n", " def traverse(self):\n", " curr = self.head\n", " while curr != None:\n", " print(curr.data)\n", " curr = curr.next\n", " \n", " \n", " def delFromBeginning(self):\n", " try:\n", " if self.head == None:\n", " raise Exception(\"Empty Linked List\")\n", " else:\n", " temp = self.head\n", " self.head = self.head.next\n", " del temp\n", " except Exception as e:\n", " print(str(e))\n", "\n", " \n", " def delFromEnd(self):\n", " try:\n", " if self.head == None:\n", " raise Exception(\"Empty Linked List\")\n", " else:\n", " curr = self.head\n", " prev = None\n", " while curr.next != None:\n", " prev = curr\n", " curr = curr.next\n", " prev.next = curr.next\n", " del curr\n", " except Exception as e:\n", " print(str(e))\n", " \n", " \n", " def delAtPos(self, position):\n", " try:\n", " if self.head == None:\n", " raise Exception(\"Empty Linked List\")\n", " else:\n", " curr = self.head\n", " prev = None\n", " count = 1\n", " while curr != None and count < position:\n", " prev = curr\n", " curr = curr.next\n", " count += 1\n", " prev.next = curr.next\n", " del curr\n", " except Exception as e:\n", " print(str(e))" ] }, { "cell_type": "code", "execution_count": 51, "id": "dc8905ab-f729-4d35-81a7-37254ab4ac54", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# melihat isi data\n", "linkedVar = linkedList()\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 52, "id": "ba844272-9a8d-47e8-9cce-774178f640eb", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Senin\n" ] } ], "source": [ "# mengisi node pertama pada head\n", "linkedVar.head = Node(\"Senin\")\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 53, "id": "0f12d525-c6ce-421a-bc8c-01cbc0430409", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data selanjutnya: None\n" ] } ], "source": [ "print(\"Data selanjutnya:\", linkedVar.head.next)" ] }, { "cell_type": "code", "execution_count": 54, "id": "84bdd4ff-f711-4b1f-af5a-8b8440727f87", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data Sebelumnya: Senin\n", "Data selanjutnya: Selasa\n", "Senin\n", "Selasa\n" ] } ], "source": [ "selasa = Node(\"Selasa\")\n", "linkedVar.head.next = selasa\n", "\n", "print(\"Data Sebelumnya:\", linkedVar.head.data)\n", "print(\"Data selanjutnya:\", linkedVar.head.next.data)\n", "\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 55, "id": "3bae1bc2-ef50-4cb4-a5bd-928ece7c752e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Senin\n", "Selasa\n", "Rabu\n" ] } ], "source": [ "# memasukan data selanjutnya menggunakan data sebelumnya\n", "# head harus diketahui, baru bisa ke next\n", "rabu = Node(\"Rabu\")\n", "selasa.next = rabu\n", "linkedVar.traverse()\n" ] }, { "cell_type": "code", "execution_count": 56, "id": "06259692-2d37-47a2-90df-8d95a6ff246a", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minggu\n", "Senin\n", "Selasa\n", "Rabu\n" ] } ], "source": [ "# memasukan data di awal node\n", "linkedVar.insertAtBeginning(\"Minggu\")\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 57, "id": "c7ecd4fa-c38d-423f-accb-71f50151887f", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minggu\n", "Senin\n", "Selasa\n", "Rabu\n", "Kamis\n" ] } ], "source": [ "# memasukan data di awal node\n", "linkedVar.insertAtEnd(\"Kamis\")\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 58, "id": "31f47985-b3eb-4fc9-b318-0ec44f51ccef", "metadata": { "editable": true, "scrolled": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minggu\n", "Sabtu\n", "Senin\n", "Selasa\n", "Rabu\n", "Kamis\n" ] } ], "source": [ "linkedVar.insertAtGivenPosition(\"Sabtu\", 1)\n", "linkedVar.traverse()" ] }, { "cell_type": "code", "execution_count": 59, "id": "ff0d7627-900c-44b9-b6cc-800a86e0397f", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sabtu\n", "Senin\n", "Selasa\n", "Rabu\n", "Kamis\n" ] } ], "source": [ "linkedVar.delFromBeginning()\n", "linkedVar.traverse()" ] }, { "cell_type": "markdown", "id": "d51223d3-89e3-40ee-b815-f38ce436c690", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "
" ] }, { "cell_type": "code", "execution_count": 60, "id": "6d8f1c3b-4010-42b9-9021-b4756dd8e2e6", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "20\n", "30\n" ] } ], "source": [ "# 1. Menambahkan dan Menampilkan Data\n", "linked_list = linkedList()\n", "linked_list.insertAtEnd(10)\n", "linked_list.insertAtEnd(20)\n", "linked_list.insertAtEnd(30)\n", "linked_list.traverse() # Output: 10 20 30\n" ] }, { "cell_type": "code", "execution_count": 61, "id": "097b9c6a-ed15-48fe-95e1-79d328c3496b", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "20\n", "30\n" ] } ], "source": [ "# 2. Menyisipkan data pada posisi tertentu\n", "linked_list = linkedList()\n", "linked_list.insertAtEnd(10)\n", "linked_list.insertAtEnd(30)\n", "linked_list.insertAtGivenPosition(20, 1)\n", "linked_list.traverse() # Output: 10 20 30\n" ] }, { "cell_type": "code", "execution_count": null, "id": "2bf31094-70e4-4605-bc90-a1ea8e96ca7d", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# 3. Menghapus Elemen Data\n", "linked_list = linkedList()\n", "linked_list.insertAtEnd(10)\n", "linked_list.insertAtEnd(20)\n", "linked_list.insertAtEnd(30)\n", "linked_list.insertAtEnd(40)\n", "linked_list.delFromBeginning()\n", "linked_list.delFromEnd()\n", "linked_list.delAtPos(0)\n", "linked_list.traverse() # Output: (kosong)\n" ] }, { "cell_type": "markdown", "id": "98306173-b54f-45f6-bb32-cb2afbf2327e", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Latihan Linked List\n", "1. Buatlah sebuah linked list kosong dengan nama my_list.\n", "2. Tambahkan elemen 15 ke linked list my_list.\n", "3. Tambahkan elemen 25 ke linked list my_list.\n", "4. Tambahkan elemen 35 ke linked list my_list.\n", "5. Tampilkan seluruh elemen dalam linked list my_list.\n", "6. Tambahkan elemen 10 ke awal linked list my_list.\n", "7. Tambahkan elemen 40 ke akhir linked list my_list.\n", "8. Tampilkan seluruh elemen dalam linked list my_list setelah penambahan.\n", "9. Hapus elemen pertama dari linked list my_list.\n", "10. Hapus elemen terakhir dari linked list my_list.\n", "11. Tampilkan seluruh elemen dalam linked list my_list setelah penghapusan.\n", "12. Sisipkan elemen 30 pada indeks 2 dalam linked list my_list.\n", "13. Tampilkan seluruh elemen dalam linked list my_list setelah penyisipan.\n", "14. Akses dan tampilkan elemen pada indeks 3 dari linked list my_list.\n", "15. Hapus elemen pada indeks 1 dari linked list my_list.\n", "16. Tampilkan seluruh elemen dalam linked list my_list setelah penghapusan.\n", "17. Kosongkan seluruh isi linked list my_list.\n", "18. Tampilkan seluruh elemen dalam linked list my_list setelah dikosongkan." ] }, { "cell_type": "code", "execution_count": null, "id": "b00922c4-fa97-4475-badc-8ff866111f12", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }