{ "cells": [ { "cell_type": "markdown", "id": "19f896dc-3540-4401-ada1-9295f220ef31", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Tipe Data Stack dan Queue\n", "Dalam dunia pemrograman, konsep tipe data Stack dan Queue memiliki peran penting dalam mengorganisir dan mengelola data. Stack mengadopsi prinsip \"Last In, First Out\" (LIFO), mirip dengan tumpukan barang di kehidupan sehari-hari. Sementara itu, Queue mengikuti prinsip \"First In, First Out\" (FIFO), seperti antrian di kasir.\n", "\n", "Tipe data Stack digunakan untuk situasi di mana data perlu diakses atau dikelola dengan prinsip paling baru masuk pertama keluar, seperti evaluasi ekspresi matematika atau pelacakan pemanggilan fungsi dalam program. Di sisi lain, tipe data Queue digunakan saat data harus diproses sesuai urutan masuknya, seperti penjadwalan tugas atau antrian pesan dalam sistem." ] }, { "cell_type": "markdown", "id": "6439d73f-dcb9-413f-acb7-94d600a361c7", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## A. Tipe Data Stack\n", "Stack adalah struktur data linear yang mengikuti prinsip \"LIFO\" (Last In, First Out), yang berarti elemen terakhir yang dimasukkan ke dalam stack akan menjadi elemen pertama yang keluar. Stack dapat dibayangkan seperti tumpukan buku atau piring, di mana hanya elemen teratas yang dapat diakses atau dihapus." ] }, { "cell_type": "markdown", "id": "0fd113ae-64ef-4471-a6de-768bf60ce5e3", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Fungsi utama stack adalah untuk mengelola data dalam urutan tertentu dan melakukan operasi pada data tersebut. Stack sering digunakan dalam berbagai aplikasi seperti evaluasi ekspresi matematika, manajemen pemanggilan fungsi dalam bahasa pemrograman, tracking history dalam aplikasi web, dan lainnya. Beberapa operasi umum yang dapat dilakukan pada stack:\n", "- empty() – Returns whether the stack is empty – Time Complexity: O(1)\n", "- size() – Returns the size of the stack – Time Complexity: O(1)\n", "- top() / peek() – Returns a reference to the topmost element of the stack – Time Complexity: O(1)\n", "- push(a) – Inserts the element ‘a’ at the top of the stack – Time Complexity: O(1)\n", "- pop() – Deletes the topmost element of the stack – Time Complexity: O(1)" ] }, { "cell_type": "markdown", "id": "05f1787e-8ecd-40b4-ad42-f3daf4c15bbe", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "![image](https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/stack.png)\n", "\n", "Contoh konkrit dari stack adalah tumpukan buku di atas meja. Anda hanya bisa menambahkan atau mengambil buku dari atas tumpukan. Jika Anda ingin mengambil buku paling bawah, Anda harus menghapus buku-buku di atasnya terlebih dahulu. Dalam pemrograman, stack biasanya diimplementasikan menggunakan array atau linked list. Stack sangat berguna dalam situasi di mana Anda perlu melacak elemen dalam urutan tertentu dan ingin memanipulasi data dengan prinsip LIFO, seperti mengevaluasi ekspresi matematika atau mengimplementasikan fitur Undo/Redo dalam aplikasi." ] }, { "cell_type": "markdown", "id": "568ac419-2e2b-4ecc-9038-01734b64ae6f", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "### 1. Stack Menggunakan List" ] }, { "cell_type": "code", "execution_count": 23, "id": "ec09e049-5c49-48c2-9beb-af59807f9858", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item di dalam variabel stack:\n", "['Senin', 'Selasa', 'Rabu']\n" ] } ], "source": [ "stack = []\n", "\n", "# menambahkan data pada variabel stack\n", "stack.append('Senin')\n", "stack.append('Selasa')\n", "stack.append('Rabu')\n", "\n", "print('Item di dalam variabel stack:')\n", "print(stack)" ] }, { "cell_type": "code", "execution_count": 24, "id": "3455cd8b-d551-48d8-bf98-0c4b63dc95b5", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item yang dihapus:\n", "Rabu\n" ] } ], "source": [ "# menghapus satu item di dalam stack\n", "# LIFO order\n", "print('Item yang dihapus:')\n", "print(stack.pop())" ] }, { "cell_type": "code", "execution_count": 25, "id": "58687383-4f92-4375-bbe4-7b4c4d355b9f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selasa\n", "Senin\n", "Item di dalam stack setelah dihapus:\n", "[]\n" ] } ], "source": [ "# menghapus dua item di dalam stack\n", "print(stack.pop())\n", "print(stack.pop())\n", "\n", "print('Item di dalam stack setelah dihapus:')\n", "print(stack)\n", "\n", "# uncommenting print(stack.pop()) will cause an IndexError as the stack is now empty\n" ] }, { "cell_type": "markdown", "id": "6421937e-7dc5-433c-b4fc-7dbac3c52433", "metadata": {}, "source": [ "### 2. Stack Menggunakan Collection Deque" ] }, { "cell_type": "code", "execution_count": 26, "id": "dcb2e7ee-e432-4cc4-b804-116d153284d1", "metadata": {}, "outputs": [], "source": [ "from collections import deque" ] }, { "cell_type": "code", "execution_count": 27, "id": "be0cd4db-ab1f-4360-acb0-6ca10ffd2b37", "metadata": {}, "outputs": [], "source": [ "stack = deque()\n", "\n", "# menambahkan elemen\n", "stack.append('Senin')\n", "stack.append('Selasa')\n", "stack.append('Rabu')" ] }, { "cell_type": "code", "execution_count": 28, "id": "11470f07-aa6b-4293-8ba3-65eeaaaa88e9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item di dalam variabel stack:\n", "deque(['Senin', 'Selasa', 'Rabu'])\n" ] } ], "source": [ "print('Item di dalam variabel stack:')\n", "print(stack)" ] }, { "cell_type": "code", "execution_count": 29, "id": "3cefa0e8-f335-4a01-93af-f239425ce9c1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item yang dihapus:\n", "Rabu\n" ] } ], "source": [ "print('Item yang dihapus:')\n", "print(stack.pop())" ] }, { "cell_type": "code", "execution_count": 30, "id": "aa4118e7-3311-436b-b9cb-751e10681502", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item yang dihapus:\n", "Selasa\n" ] } ], "source": [ "print('Item yang dihapus:')\n", "print(stack.pop())" ] }, { "cell_type": "code", "execution_count": 31, "id": "0d10f0ba-a1d7-42b6-b7c7-ac7c2d4c3bdb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "deque(['Senin'])\n" ] } ], "source": [ "print(stack)" ] }, { "cell_type": "markdown", "id": "4a728610-5100-4b9c-95e8-e08e1f4fedc9", "metadata": {}, "source": [ "### 3. Menggunakan Modul Queue" ] }, { "cell_type": "code", "execution_count": 32, "id": "009de485-1ae9-445f-9abe-4cb5dfd0fa92", "metadata": {}, "outputs": [], "source": [ "# Python program to\n", "# demonstrate stack implementation\n", "# using queue module\n", "\n", "from queue import LifoQueue" ] }, { "cell_type": "code", "execution_count": 34, "id": "85e79047-6ff8-4753-80e7-96dadb1df37b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "# Initializing a stack\n", "stack = LifoQueue(maxsize=3)\n", "\n", "# qsize() show the number of elements\n", "# in the stack\n", "print(stack.qsize())" ] }, { "cell_type": "code", "execution_count": 35, "id": "658f0f34-74ad-4b45-b1f4-902bcb8b1f5c", "metadata": {}, "outputs": [], "source": [ "# menambahkan elemen\n", "stack.put('Senin')\n", "stack.put('Selasa')\n", "stack.put('Rabu')\n" ] }, { "cell_type": "code", "execution_count": 36, "id": "7186eaf9-32ca-4188-b77d-e25c4aeb01a2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item di dalam variabel stack:\n", "Penuh: True\n", "Ukuran: 3\n" ] } ], "source": [ "print('Item di dalam variabel stack:')\n", "# print(stack)\n", "\n", "print(\"Penuh: \", stack.full())\n", "print(\"Ukuran: \", stack.qsize())" ] }, { "cell_type": "code", "execution_count": 39, "id": "15ad4c5e-dd86-4be7-be58-effa73e7d521", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item yang dihapus:\n", "Senin\n" ] } ], "source": [ "# LIFO order\n", "print('Item yang dihapus:')\n", "print(stack.get())\n" ] }, { "cell_type": "code", "execution_count": 40, "id": "62bfdd7d-fce7-40b3-add4-05af9e0d8b13", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Empty: True\n" ] } ], "source": [ "print(\"\\nEmpty: \", stack.empty())" ] }, { "cell_type": "markdown", "id": "df8591f0-dc1b-41bb-83f1-fae35168bda0", "metadata": {}, "source": [ "### 4. Membangun Stack dari Class" ] }, { "cell_type": "code", "execution_count": 41, "id": "33770e3d-ed48-4f11-bf34-fe920131bdc7", "metadata": {}, "outputs": [], "source": [ "class Stack:\n", " def __init__(self):\n", " self.items = []\n", "\n", " def push(self, item):\n", " self.items.append(item)\n", "\n", " def pop(self):\n", " if not self.is_empty():\n", " return self.items.pop()\n", " else:\n", " return \"Stack is empty\"\n", "\n", " def is_empty(self):\n", " return len(self.items) == 0\n", "\n", " def peek(self):\n", " if not self.is_empty():\n", " return self.items[-1]\n", " else:\n", " return \"Stack is empty\"\n", "\n", " def size(self):\n", " return len(self.items)" ] }, { "cell_type": "code", "execution_count": 42, "id": "e61b2702-8426-4357-a191-a00b77fca7f5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Senin', 'Selasa', 'Rabu', 'Kamis']\n" ] } ], "source": [ "myStack = Stack()\n", "myStack.push(\"Senin\")\n", "myStack.push(\"Selasa\")\n", "myStack.push(\"Rabu\")\n", "myStack.push(\"Kamis\")\n", "print(myStack.items)" ] }, { "cell_type": "code", "execution_count": 46, "id": "7dbe15d7-6493-4aba-8b3c-6d9c44af5cb6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n" ] } ], "source": [ "myStack.pop()\n", "print(myStack.items)" ] }, { "cell_type": "markdown", "id": "b5a426c5-9767-458a-984d-2ef149a87c46", "metadata": {}, "source": [ "### 5. Contoh Aplikasi Menggunakan Stack" ] }, { "cell_type": "code", "execution_count": 47, "id": "c1cb33ea-405f-495b-8618-41ff9b00b3d5", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Simulasi Penumpukan Buku:\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama buku: Python\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Python' ditambahkan ke tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama buku: PHP\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'PHP' ditambahkan ke tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama buku: Java\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Java' ditambahkan ke tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Daftar buku dalam tumpukan:\n", "Java\n", "PHP\n", "Python\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Java' dikeluarkan dari tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'PHP' dikeluarkan dari tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Python' dikeluarkan dari tumpukan.\n", "\n", "Pilihan:\n", "1. Tambah Buku ke Tumpukan\n", "2. Keluarkan Buku dari Tumpukan\n", "3. Lihat Daftar Buku dalam Tumpukan\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Program berakhir.\n" ] } ], "source": [ "book_stack = Stack()\n", "\n", "print(\"Simulasi Penumpukan Buku:\")\n", "while True:\n", " print(\"\\nPilihan:\")\n", " print(\"1. Tambah Buku ke Tumpukan\")\n", " print(\"2. Keluarkan Buku dari Tumpukan\")\n", " print(\"3. Lihat Daftar Buku dalam Tumpukan\")\n", " print(\"4. Keluar\")\n", " choice = int(input(\"Masukkan pilihan: \"))\n", "\n", " if choice == 1:\n", " book_name = input(\"Masukkan nama buku: \")\n", " book_stack.push(book_name)\n", " print(f\"'{book_name}' ditambahkan ke tumpukan.\")\n", " elif choice == 2:\n", " if not book_stack.is_empty():\n", " removed_book = book_stack.pop()\n", " print(f\"'{removed_book}' dikeluarkan dari tumpukan.\")\n", " else:\n", " print(\"Tumpukan kosong.\")\n", " elif choice == 3:\n", " print(\"\\nDaftar buku dalam tumpukan:\")\n", " for book in reversed(book_stack.items):\n", " print(book)\n", " elif choice == 4:\n", " print(\"Program berakhir.\")\n", " break\n", " else:\n", " print(\"Pilihan tidak valid. Silakan pilih lagi.\")\n" ] }, { "cell_type": "markdown", "id": "39a29c96-da9a-4f7c-8dd4-3b704f51e74d", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## B. Tipe Data Queue\n", "Tipe data Queue adalah struktur data linear yang mengikuti prinsip \"First In, First Out\" (FIFO), yang berarti elemen pertama yang dimasukkan ke dalam queue akan menjadi elemen pertama yang keluar. Queue dapat dibayangkan seperti antrian di kasir, di mana orang yang pertama kali datang akan dilayani pertama kali pula.\n", "\n", "Fungsi utama queue adalah untuk mengatur dan mengelola data dalam urutan tertentu dan melakukan operasi pada data tersebut. Queue sering digunakan dalam berbagai aplikasi seperti penjadwalan tugas, antrian pesan dalam sistem, manajemen pengiriman data, dan lainnya." ] }, { "cell_type": "markdown", "id": "c322afd3-b219-47bd-ba25-265caee218e7", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "![image](https://images.velog.io/images/dorazi/post/a4cace31-1ec0-4371-b3db-e2177f899ce5/queue-implementation.png)" ] }, { "cell_type": "markdown", "id": "5b92b403-b760-4ddd-9f80-723e7acd71ab", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Beberapa operasi umum yang dapat dilakukan pada queue:\n", "1. Enqueue: Menambahkan elemen baru ke dalam queue di bagian belakang.\n", "2. Dequeue: Menghapus dan mengembalikan elemen pertama dari queue.\n", "3. Front: Melihat elemen pertama dari queue tanpa menghapusnya.\n", "4. IsEmpty: Memeriksa apakah queue kosong atau tidak.\n", "5. Size: Menghitung jumlah elemen dalam queue." ] }, { "cell_type": "markdown", "id": "baf6e14a-4c78-493c-adf9-be62448f269a", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "![queue](https://www.guru99.com/images/1/020820_0702_PythonQueue2.png)" ] }, { "cell_type": "markdown", "id": "41deabb2-6caf-4b5e-8264-b7ce43f72e38", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 1. Implementasi Queue\n", "1. Penjadwalan Tugas (Task Scheduling): Dalam sistem operasi dan manajemen tugas, queue digunakan untuk mengatur antrian tugas yang akan dieksekusi. Tugas-tugas ini diberikan prioritas dan dikerjakan sesuai urutan mereka dalam antrian.\n", "2. Manajemen Pesan (Message Queues): Dalam sistem yang memerlukan komunikasi antar komponen secara asynchronous, message queue digunakan untuk mengirim pesan dari satu komponen ke komponen lain. Ini umumnya digunakan dalam sistem terdistribusi.\n", "3. Manajemen Antrian dalam Bisnis: Banyak bisnis menggunakan antrian untuk mengatur antrean pelanggan, seperti di bank, restoran cepat saji, atau layanan dukungan telepon.\n", "4. Manajemen Pekerjaan (Job Management): Dalam sistem yang menjalankan tugas berulang, queue dapat digunakan untuk mengatur tugas yang akan dieksekusi selanjutnya.\n", "5. Manajemen Sumber Daya (Resource Management): Dalam sistem yang mengalokasikan sumber daya seperti CPU atau memori, queue dapat digunakan untuk mengatur antrian permintaan sumber daya." ] }, { "cell_type": "markdown", "id": "13fa9ebf-bbc3-47aa-8a0a-38cd9079676d", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 2. Contoh Implementasi Queue" ] }, { "cell_type": "markdown", "id": "25824732-117b-4039-a604-0eca9d32be51", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "#### Contoh 1: Queue dalam Bentuk Aplikasi Sederhana" ] }, { "cell_type": "code", "execution_count": 48, "id": "8fc69782-5166-48d6-8181-aa91142a45cd", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# memanggil modul queue\n", "import queue" ] }, { "cell_type": "code", "execution_count": 49, "id": "66ac1115-b4b5-4070-a133-f5d900741290", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# Buat objek Queue\n", "playlist_queue = queue.Queue()" ] }, { "cell_type": "code", "execution_count": 50, "id": "7758f111-983a-44bc-a324-ddbf241cfe3a", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "# Tambahkan lagu ke playlist\n", "playlist_queue.put(\"Laskar Pelangi\")\n", "playlist_queue.put(\"Pergi Hilang dan Lupakan\")\n", "playlist_queue.put(\"Menghapus Jejakmu\")" ] }, { "cell_type": "code", "execution_count": 52, "id": "d388537a-9aa1-4d2f-8fc5-f88ce228aecc", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Memutar lagu: Pergi Hilang dan Lupakan\n" ] } ], "source": [ "# Putar lagu berikutnya\n", "next_song = playlist_queue.get()\n", "print(f\"Memutar lagu: {next_song}\")" ] }, { "cell_type": "code", "execution_count": 53, "id": "930c3856-dc8f-402f-b3e5-863a0219de86", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lagu berikutnya: Menghapus Jejakmu\n" ] } ], "source": [ "# Lihat lagu berikutnya\n", "next_song = playlist_queue.queue[0]\n", "print(f\"Lagu berikutnya: {next_song}\")" ] }, { "cell_type": "code", "execution_count": 54, "id": "018dc93d-1746-4fcd-bb2c-54fcf5dd6d71", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lagu Menghapus Jejakmu dihapus dari playlist\n" ] } ], "source": [ "# Hapus lagu dari playlist\n", "removed_song = playlist_queue.get()\n", "print(f\"Lagu {removed_song} dihapus dari playlist\")" ] }, { "cell_type": "code", "execution_count": 55, "id": "3b7dd29a-5024-43d3-aa12-110b055e6b06", "metadata": { "editable": true, "scrolled": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Playlist sekarang:\n" ] } ], "source": [ "# Lihat semua lagu dalam playlist\n", "print(\"Playlist sekarang:\")\n", "for song in playlist_queue.queue:\n", " print(song)" ] }, { "cell_type": "markdown", "id": "85c6ea58-ca25-411f-9d36-8b1def223587", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "#### Contoh 2: Queue dalam Bentuk Aplikasi Sederhana" ] }, { "cell_type": "code", "execution_count": null, "id": "aed0b794-a594-43ec-a72e-4f86e4632508", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Simulasi Playlist Lagu:\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama lagu: Python\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Python' ditambahkan ke playlist.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama lagu: PHP\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'PHP' ditambahkan ke playlist.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 1\n", "Masukkan nama lagu: Javascript\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "'Javascript' ditambahkan ke playlist.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Memutar lagu 'Python'.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Memutar lagu 'PHP'.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "Masukkan pilihan: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Memutar lagu 'Javascript'.\n", "\n", "Pilihan:\n", "1. Tambah Lagu ke Playlist\n", "2. Putar Lagu Berikutnya\n", "3. Lihat Lagu Berikutnya\n", "4. Keluar\n" ] } ], "source": [ "import queue\n", "\n", "def main():\n", " playlist_queue = queue.Queue()\n", "\n", " print(\"Simulasi Playlist Lagu:\")\n", " while True:\n", " print(\"\\nPilihan:\")\n", " print(\"1. Tambah Lagu ke Playlist\")\n", " print(\"2. Putar Lagu Berikutnya\")\n", " print(\"3. Lihat Lagu Berikutnya\")\n", " print(\"4. Keluar\")\n", " choice = int(input(\"Masukkan pilihan: \"))\n", "\n", " if choice == 1:\n", " song_name = input(\"Masukkan nama lagu: \")\n", " playlist_queue.put(song_name)\n", " print(f\"'{song_name}' ditambahkan ke playlist.\")\n", " elif choice == 2:\n", " if not playlist_queue.empty():\n", " next_song = playlist_queue.get()\n", " print(f\"Memutar lagu '{next_song}'.\")\n", " else:\n", " print(\"Playlist kosong.\")\n", " elif choice == 3:\n", " if not playlist_queue.empty():\n", " print(f\"Lagu berikutnya dalam playlist: '{playlist_queue.queue[0]}'.\")\n", " else:\n", " print(\"Playlist kosong.\")\n", " elif choice == 4:\n", " print(\"Program berakhir.\")\n", " break\n", " else:\n", " print(\"Pilihan tidak valid. Silakan pilih lagi.\")\n", "\n", "if __name__ == \"__main__\":\n", " main()" ] }, { "cell_type": "markdown", "id": "a3da601c-1f5a-4acb-a725-a4722b09165f", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## C. Latihan-latihan" ] }, { "cell_type": "markdown", "id": "7053690f-e8d8-453d-8a88-b05922390d33", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 1. Stack\n", "Anda memiliki sebuah stack kosong yang digunakan untuk menyimpan buku. Tugas Anda adalah:\n", "1. Tambahkan buku \"Harry Potter\" ke dalam stack.\n", "2. Tambahkan buku \"Percy Jackson\" ke dalam stack.\n", "3. Tampilkan urutan buku yang ada dalam stack setelah langkah-langkah di atas.\n", "4. Baca Buku dari Stack.\n", "5. Ambil buku teratas dari stack untuk dibaca." ] }, { "cell_type": "markdown", "id": "5e83079a-aefd-482b-9452-f5657b1c346c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "### 2. Queue\n", "Anda memiliki sebuah queue kosong yang digunakan untuk mengatur playlist lagu. Tugas Anda adalah:\n", "1. Tambahkan lagu \"Perfect\" ke dalam queue.\n", "2. Tambahkan lagu \"Shape of You\" ke dalam queue.\n", "3. Tambahkan lagu \"Blinding Lights\" ke dalam queue.\n", "4. Tambahkan lagu \"Someone Like You\" ke dalam queue.\n", "5. Tambahkan lagu \"Uptown Funk\" ke dalam queue.\n", "6. Tampilkan urutan lagu dalam playlist setelah langkah-langkah di atas.\n", "7. Putar lagu pertama dalam playlist untuk didengarkan.\n", "8. Tampilkan lagu yang akan Anda putar.\n", "9. Hapus lagu yang telah Anda dengarkan dari playlist.\n", "10. Tampilkan urutan lagu dalam playlist setelah lagu dihapus." ] }, { "cell_type": "code", "execution_count": null, "id": "a6802c8a-a515-4962-8364-2a3a7de95aa8", "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 }