{"id":30527,"date":"2025-09-28T23:40:52","date_gmt":"2025-09-28T20:40:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30527"},"modified":"2025-09-28T23:40:52","modified_gmt":"2025-09-28T20:40:52","slug":"javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/","title":{"rendered":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek<\/h2>\n<h2>Giri\u015f: Veri Yap\u0131lar\u0131n\u0131n Temeli<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, verileri etkili bir \u015fekilde depolamak ve y\u00f6netmek, uygulamalar\u0131n performans\u0131 ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi i\u00e7in kritik \u00f6neme sahiptir. Veri yap\u0131lar\u0131, verilerin belirli bir d\u00fczende organize edilmesini sa\u011flayan ve bu verilere eri\u015fim, ekleme, silme gibi i\u015flemleri optimize eden temel ara\u00e7lard\u0131r. Do\u011fru veri yap\u0131s\u0131n\u0131 se\u00e7mek, bir algoritman\u0131n veya uygulaman\u0131n verimlili\u011fini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde etkileyebilir. Bu makalede, bilgisayar bilimlerinin en temel ve yayg\u0131n kullan\u0131lan do\u011frusal veri yap\u0131lar\u0131ndan ikisi olan Stack (Y\u0131\u011f\u0131n) ve Queue (Kuyruk) yap\u0131lar\u0131n\u0131 JavaScript ba\u011flam\u0131nda derinlemesine inceleyece\u011fiz.<\/p>\n<p>JavaScript, dinamik yap\u0131s\u0131 ve geni\u015f kullan\u0131m alan\u0131 sayesinde, bu temel veri yap\u0131lar\u0131n\u0131 anlamak ve uygulamak i\u00e7in m\u00fckemmel bir platform sunar. Web taray\u0131c\u0131lar\u0131ndan sunucu taraf\u0131 uygulamalar\u0131na (Node.js) kadar her yerde kar\u015f\u0131m\u0131za \u00e7\u0131kan JavaScript, veri yap\u0131lar\u0131 kavramlar\u0131n\u0131 somutla\u015ft\u0131rmak i\u00e7in esnek ve anla\u015f\u0131l\u0131r bir yol sa\u011flar. Bu makale boyunca, Stack ve Queue&#8217;nun ne oldu\u011funu, temel i\u015flemlerini, JavaScript ile nas\u0131l uygulanabilece\u011fini, zaman karma\u015f\u0131kl\u0131klar\u0131n\u0131 (Big O notasyonu) ve ger\u00e7ek d\u00fcnya kullan\u0131m senaryolar\u0131n\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Amac\u0131m\u0131z, bu yap\u0131lar\u0131n sadece teorik bilgilerini vermekle kalmay\u0131p, pratik JavaScript uygulamalar\u0131yla kavramlar\u0131 peki\u015ftirmektir.<\/p>\n<h2>Stack (Y\u0131\u011f\u0131n) Veri Yap\u0131s\u0131<\/h2>\n<p>Stack, &#8220;Last-In, First-Out&#8221; (LIFO) prensibine g\u00f6re \u00e7al\u0131\u015fan do\u011frusal bir veri yap\u0131s\u0131d\u0131r. Bu prensip, bir y\u0131\u011f\u0131na en son eklenen eleman\u0131n ilk \u00e7\u0131kar\u0131laca\u011f\u0131 anlam\u0131na gelir. G\u00fcnl\u00fck hayattan bir \u00f6rnekle a\u00e7\u0131klamak gerekirse, \u00fcst \u00fcste dizilmi\u015f tabaklar\u0131 d\u00fc\u015f\u00fcnebiliriz: en son konulan tabak en \u00fcstte olur ve ilk o al\u0131n\u0131r. Stack veri yap\u0131s\u0131, belirli bir s\u0131rayla eklenen elemanlar\u0131n yine belirli bir s\u0131rayla i\u015flenmesi gereken bir\u00e7ok senaryoda kullan\u0131l\u0131r.<\/p>\n<h3>Temel Stack \u0130\u015flemleri<\/h3>\n<p>Bir Stack veri yap\u0131s\u0131n\u0131n temel i\u015flemleri \u015funlard\u0131r:<\/p>\n<p>*   <strong><code>push(element)<\/code><\/strong>: Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcne bir eleman ekler.<br \/>\n*   <strong><code>pop()<\/code><\/strong>: Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcndeki eleman\u0131 \u00e7\u0131kar\u0131r ve d\u00f6nd\u00fcr\u00fcr. E\u011fer y\u0131\u011f\u0131n bo\u015fsa, genellikle bir hata f\u0131rlat\u0131l\u0131r veya <code>undefined<\/code>\/<code>null<\/code> d\u00f6nd\u00fcr\u00fcl\u00fcr.<br \/>\n*   <strong><code>peek()<\/code><\/strong>: Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcndeki eleman\u0131 \u00e7\u0131karmaz, sadece de\u011ferini d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>isEmpty()<\/code><\/strong>: Y\u0131\u011f\u0131n\u0131n bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder ve bir boolean de\u011fer d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>size()<\/code><\/strong>: Y\u0131\u011f\u0131ndaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h3>JavaScript ile Stack Uygulamas\u0131<\/h3>\n<p>JavaScript&#8217;te Stack veri yap\u0131s\u0131n\u0131 uygulaman\u0131n birka\u00e7 yolu vard\u0131r. En basit ve yayg\u0131n yol, JavaScript&#8217;in yerle\u015fik <code>Array<\/code> (Dizi) nesnesini kullanmakt\u0131r. <code>Array<\/code>&#8216;in <code>push()<\/code> ve <code>pop()<\/code> metotlar\u0131 do\u011frudan LIFO prensibine uygun \u00e7al\u0131\u015f\u0131r. Ancak, daha yap\u0131land\u0131r\u0131lm\u0131\u015f ve veri yap\u0131s\u0131 \u00f6zelliklerini daha iyi kapsayan bir yakla\u015f\u0131m, bir s\u0131n\u0131f (Class) olu\u015fturmakt\u0131r.<\/p>\n<h4>Array Kullanarak Basit Stack Uygulamas\u0131<\/h4>\n<pre><code class=\"language-javascript\">class SimpleStack {\n    constructor() {\n        this.items = []; \/\/ Stack elemanlar\u0131n\u0131 tutacak dizi\n    }\n\n    \/\/ Y\u0131\u011f\u0131na eleman ekler\n    push(element) {\n        this.items.push(element);\n        console.log(<code>${element} y\u0131\u011f\u0131na eklendi.<\/code>);\n    }\n\n    \/\/ Y\u0131\u011f\u0131ndan eleman \u00e7\u0131kar\u0131r\n    pop() {\n        if (this.isEmpty()) {\n            console.log(\"Y\u0131\u011f\u0131n bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\");\n            return undefined; \/\/ veya hata f\u0131rlatabiliriz\n        }\n        const removedElement = this.items.pop();\n        console.log(<code>${removedElement} y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.<\/code>);\n        return removedElement;\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcndeki eleman\u0131 g\u00f6sterir\n    peek() {\n        if (this.isEmpty()) {\n            console.log(\"Y\u0131\u011f\u0131n bo\u015f, g\u00f6sterilecek eleman yok.\");\n            return undefined;\n        }\n        return this.items[this.items.length - 1];\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder\n    isEmpty() {\n        return this.items.length === 0;\n    }\n\n    \/\/ Y\u0131\u011f\u0131ndaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr\n    size() {\n        return this.items.length;\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n i\u00e7eri\u011fini g\u00f6sterir (iste\u011fe ba\u011fl\u0131)\n    printStack() {\n        console.log(\"Y\u0131\u011f\u0131n i\u00e7eri\u011fi:\", this.items.toString());\n    }\n}\n\n\/\/ SimpleStack kullan\u0131m\u0131\nconst mySimpleStack = new SimpleStack();\nconsole.log(\"Y\u0131\u011f\u0131n bo\u015f mu?\", mySimpleStack.isEmpty()); \/\/ true\n\nmySimpleStack.push(10);\nmySimpleStack.push(20);\nmySimpleStack.push(30);\nmySimpleStack.printStack(); \/\/ Y\u0131\u011f\u0131n i\u00e7eri\u011fi: 10,20,30\n\nconsole.log(\"Y\u0131\u011f\u0131n\u0131n \u00fcst\u00fcndeki eleman:\", mySimpleStack.peek()); \/\/ 30\n\nmySimpleStack.pop(); \/\/ 30 y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleStack.printStack(); \/\/ Y\u0131\u011f\u0131n i\u00e7eri\u011fi: 10,20\n\nconsole.log(\"Y\u0131\u011f\u0131n boyutu:\", mySimpleStack.size()); \/\/ 2\n\nmySimpleStack.pop(); \/\/ 20 y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleStack.pop(); \/\/ 10 y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleStack.pop(); \/\/ Y\u0131\u011f\u0131n bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\nconsole.log(\"Y\u0131\u011f\u0131n bo\u015f mu?\", mySimpleStack.isEmpty()); \/\/ true<\/code><\/pre>\n<p>Bu <code>SimpleStack<\/code> s\u0131n\u0131f\u0131, <code>Array<\/code>&#8216;in <code>push<\/code> ve <code>pop<\/code> metotlar\u0131n\u0131 kullanarak Stack i\u015flevselli\u011fini kolayca sa\u011flar. <code>peek<\/code>, <code>isEmpty<\/code> ve <code>size<\/code> metotlar\u0131 da <code>Array<\/code>&#8216;in <code>length<\/code> \u00f6zelli\u011fini kullanarak basit\u00e7e uygulan\u0131r. Bu yakla\u015f\u0131m olduk\u00e7a etkilidir \u00e7\u00fcnk\u00fc JavaScript dizileri, eleman ekleme ve \u00e7\u0131karma i\u015flemlerini dizinin sonundan yaparken genellikle O(1) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir.<\/p>\n<h4>Object Kullanarak Stack Uygulamas\u0131 (Daha D\u00fc\u015f\u00fck Seviye Kontrol)<\/h4>\n<p>Diziler yerine, elemanlar\u0131 bir JavaScript objesi i\u00e7inde tutarak ve bir <code>count<\/code> de\u011fi\u015fkeni ile y\u00f6neterek de Stack uygulayabiliriz. Bu yakla\u015f\u0131m, baz\u0131 durumlarda daha d\u00fc\u015f\u00fck seviye kontrol sa\u011flayabilir ve dizilerin dahili yeniden boyutland\u0131rma maliyetlerinden ka\u00e7\u0131nmak i\u00e7in d\u00fc\u015f\u00fcn\u00fclebilir, ancak modern JavaScript motorlar\u0131 dizileri olduk\u00e7a optimize etmi\u015ftir.<\/p>\n<pre><code class=\"language-javascript\">class Stack {\n    constructor() {\n        this.items = {}; \/\/ Elemanlar\u0131 tutacak obje\n        this.count = 0;  \/\/ Y\u0131\u011f\u0131ndaki eleman say\u0131s\u0131\n    }\n\n    \/\/ Y\u0131\u011f\u0131na eleman ekler\n    push(element) {\n        this.items[this.count] = element;\n        this.count++;\n        console.log(<code>${element} y\u0131\u011f\u0131na eklendi.<\/code>);\n    }\n\n    \/\/ Y\u0131\u011f\u0131ndan eleman \u00e7\u0131kar\u0131r\n    pop() {\n        if (this.isEmpty()) {\n            console.log(\"Y\u0131\u011f\u0131n bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\");\n            return undefined;\n        }\n        this.count--;\n        const removedElement = this.items[this.count];\n        delete this.items[this.count]; \/\/ Eleman\u0131 objeden sil\n        console.log(<code>${removedElement} y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.<\/code>);\n        return removedElement;\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n en \u00fcst\u00fcndeki eleman\u0131 g\u00f6sterir\n    peek() {\n        if (this.isEmpty()) {\n            console.log(\"Y\u0131\u011f\u0131n bo\u015f, g\u00f6sterilecek eleman yok.\");\n            return undefined;\n        }\n        return this.items[this.count - 1];\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder\n    isEmpty() {\n        return this.count === 0;\n    }\n\n    \/\/ Y\u0131\u011f\u0131ndaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr\n    size() {\n        return this.count;\n    }\n\n    \/\/ Y\u0131\u011f\u0131n\u0131n i\u00e7eri\u011fini g\u00f6sterir\n    printStack() {\n        let str = \"\";\n        for (let i = 0; i < this.count; i++) {\n            str += this.items[i] + \" \";\n        }\n        console.log(\"Y\u0131\u011f\u0131n i\u00e7eri\u011fi:\", str.trim());\n    }\n}\n\n\/\/ Stack kullan\u0131m\u0131\nconst myStack = new Stack();\nconsole.log(\"Y\u0131\u011f\u0131n bo\u015f mu?\", myStack.isEmpty()); \/\/ true\n\nmyStack.push(\"A\");\nmyStack.push(\"B\");\nmyStack.push(\"C\");\nmyStack.printStack(); \/\/ Y\u0131\u011f\u0131n i\u00e7eri\u011fi: A B C\n\nconsole.log(\"Y\u0131\u011f\u0131n\u0131n \u00fcst\u00fcndeki eleman:\", myStack.peek()); \/\/ C\n\nmyStack.pop(); \/\/ C y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmyStack.printStack(); \/\/ Y\u0131\u011f\u0131n i\u00e7eri\u011fi: A B\n\nconsole.log(\"Y\u0131\u011f\u0131n boyutu:\", myStack.size()); \/\/ 2\n\nmyStack.pop(); \/\/ B y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmyStack.pop(); \/\/ A y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131ld\u0131.\nmyStack.pop(); \/\/ Y\u0131\u011f\u0131n bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\nconsole.log(\"Y\u0131\u011f\u0131n bo\u015f mu?\", myStack.isEmpty()); \/\/ true<\/code><\/pre>\n<p>Bu <code>Stack<\/code> s\u0131n\u0131f\u0131nda, <code>items<\/code> bir obje olarak tan\u0131mlan\u0131r ve elemanlar say\u0131sal anahtarlar kullan\u0131larak saklan\u0131r. <code>count<\/code> de\u011fi\u015fkeni, y\u0131\u011f\u0131n\u0131n boyutunu ve bir sonraki eleman\u0131n eklenece\u011fi indeksi takip eder. <code>pop<\/code> i\u015flemi s\u0131ras\u0131nda, eleman objeden <code>delete<\/code> anahtar kelimesi ile silinir. Bu yakla\u015f\u0131m da Stack'in O(1) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahip olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Stack \u0130\u015flemlerinin Zaman Karma\u015f\u0131kl\u0131\u011f\u0131 (Big O)<\/h3>\n<p>Stack i\u015flemlerinin \u00e7o\u011fu, eleman say\u0131s\u0131ndan ba\u011f\u0131ms\u0131z olarak sabit zamanda (O(1)) tamamlan\u0131r.<\/p>\n<p>*   <strong><code>push()<\/code><\/strong>: O(1) - Eleman eklemek her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><code>pop()<\/code><\/strong>: O(1) - Eleman \u00e7\u0131karmak her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><code>peek()<\/code><\/strong>: O(1) - En \u00fcstteki elemana bakmak her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><code>isEmpty()<\/code><\/strong>: O(1) - Bo\u015fluk kontrol\u00fc her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><code>size()<\/code><\/strong>: O(1) - Boyut bilgisini almak her zaman ayn\u0131 s\u00fcreyi al\u0131r.<\/p>\n<p>Bu verimlilik, Stack'i bir\u00e7ok algoritma ve uygulama i\u00e7in cazip bir veri yap\u0131s\u0131 haline getirir.<\/p>\n<h3>Stack Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>Stack veri yap\u0131s\u0131, bilgisayar bilimlerinde ve yaz\u0131l\u0131m geli\u015ftirmede \u00e7ok \u00e7e\u015fitli alanlarda kullan\u0131l\u0131r:<\/p>\n<p>1.  <strong>Fonksiyon \u00c7a\u011fr\u0131 Y\u0131\u011f\u0131n\u0131 (Call Stack)<\/strong>: Programlar\u0131n fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131 y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Bir fonksiyon \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda y\u0131\u011f\u0131na eklenir, i\u015fi bitti\u011finde y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131l\u0131r.<br \/>\n2.  <strong>Geri Al\/Yinele (Undo\/Redo) Fonksiyonelli\u011fi<\/strong>: Metin d\u00fczenleyicilerde veya di\u011fer uygulamalarda yap\u0131lan i\u015flemleri takip etmek i\u00e7in kullan\u0131l\u0131r. Her i\u015flem y\u0131\u011f\u0131na eklenir, \"geri al\" komutu son i\u015flemi y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131r.<br \/>\n3.  <strong>Taray\u0131c\u0131 Ge\u00e7mi\u015fi<\/strong>: Web taray\u0131c\u0131lar\u0131nda \"geri\" tu\u015funa bas\u0131ld\u0131\u011f\u0131nda \u00f6nceki sayfaya d\u00f6nme i\u015flevi, Stack mant\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131r. Ziyaret edilen sayfalar bir y\u0131\u011f\u0131na eklenir.<br \/>\n4.  <strong>Matematiksel \u0130fadelerin De\u011ferlendirilmesi<\/strong>: Infix (orta ek) g\u00f6sterimdeki matematiksel ifadeleri postfix (son ek) veya prefix (\u00f6n ek) g\u00f6sterime d\u00f6n\u00fc\u015ft\u00fcrmek ve bu ifadeleri de\u011ferlendirmek i\u00e7in Stack kullan\u0131l\u0131r.<br \/>\n5.  <strong>Derinlemesine Arama (DFS - Depth-First Search) Algoritmas\u0131<\/strong>: Graf ve a\u011fa\u00e7 yap\u0131lar\u0131nda derinlemesine arama yapmak i\u00e7in Stack kullan\u0131l\u0131r.<br \/>\n6.  <strong>Parantez E\u015fle\u015ftirme<\/strong>: Bir ifadedeki parantezlerin (<code>, <\/code>[<code> <\/code>{<code> gibi) do\u011fru e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol etmek i\u00e7in Stack kullan\u0131l\u0131r.<\/p>\n<h2>Queue (Kuyruk) Veri Yap\u0131s\u0131<\/h2>\n<p>Queue, \"First-In, First-Out\" (FIFO) prensibine g\u00f6re \u00e7al\u0131\u015fan do\u011frusal bir veri yap\u0131s\u0131d\u0131r. Bu prensip, bir kuyru\u011fa ilk eklenen eleman\u0131n ilk \u00e7\u0131kar\u0131laca\u011f\u0131 anlam\u0131na gelir. G\u00fcnl\u00fck hayattan bir \u00f6rnekle a\u00e7\u0131klamak gerekirse, banka veya s\u00fcpermarket kuyruklar\u0131n\u0131 d\u00fc\u015f\u00fcnebiliriz: ilk s\u0131raya giren ki\u015fi ilk hizmeti al\u0131r. Queue, elemanlar\u0131n belirli bir s\u0131rayla i\u015flenmesi gereken durumlarda Stack'in aksine farkl\u0131 bir i\u015flem s\u0131ras\u0131 sunar.<\/p>\n<h3>Temel Queue \u0130\u015flemleri<\/h3>\n<p>Bir Queue veri yap\u0131s\u0131n\u0131n temel i\u015flemleri \u015funlard\u0131r:<\/p>\n<p>*   <strong><\/code>enqueue(element)<code><\/strong>: Kuyru\u011fun arkas\u0131na bir eleman ekler.<br \/>\n*   <strong><\/code>dequeue()<code><\/strong>: Kuyru\u011fun \u00f6n\u00fcndeki eleman\u0131 \u00e7\u0131kar\u0131r ve d\u00f6nd\u00fcr\u00fcr. E\u011fer kuyruk bo\u015fsa, genellikle bir hata f\u0131rlat\u0131l\u0131r veya <\/code>undefined<code>\/<\/code>null<code> d\u00f6nd\u00fcr\u00fcl\u00fcr.<br \/>\n*   <strong><\/code>front()<code><\/strong>: Kuyru\u011fun \u00f6n\u00fcndeki eleman\u0131 \u00e7\u0131karmaz, sadece de\u011ferini d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><\/code>isEmpty()<code><\/strong>: Kuyru\u011fun bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder ve bir boolean de\u011fer d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><\/code>size()<code><\/strong>: Kuyruktaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h3>JavaScript ile Queue Uygulamas\u0131<\/h3>\n<p>JavaScript'te Queue veri yap\u0131s\u0131n\u0131 uygulaman\u0131n en basit yolu yine <\/code>Array<code> kullanmakt\u0131r. Ancak <\/code>Array<code>'in <\/code>shift()<code> metodu, kuyru\u011fun ba\u015f\u0131ndan eleman \u00e7\u0131karmak i\u00e7in kullan\u0131ld\u0131\u011f\u0131nda performans sorunlar\u0131na yol a\u00e7abilir. Bu nedenle, daha verimli bir uygulama i\u00e7in bir s\u0131n\u0131f i\u00e7inde obje veya ba\u011fl\u0131 liste (Linked List) kullanmak tercih edilebilir.<\/p>\n<h4>Array Kullanarak Basit Queue Uygulamas\u0131 (Potansiyel Performans Sorunu)<\/h4>\n<pre><code class=\"language-javascript\">class SimpleQueue {\n    constructor() {\n        this.items = [];\n    }\n\n    \/\/ Kuyru\u011fa eleman ekler (arkaya)\n    enqueue(element) {\n        this.items.push(element);\n        console.log(<\/code>${element} kuyru\u011fa eklendi.<code>);\n    }\n\n    \/\/ Kuyruktan eleman \u00e7\u0131kar\u0131r (\u00f6nden)\n    dequeue() {\n        if (this.isEmpty()) {\n            console.log(\"Kuyruk bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\");\n            return undefined;\n        }\n        \/\/ Array.shift() kullanmak, dizinin ba\u015f\u0131ndan eleman \u00e7\u0131kard\u0131\u011f\u0131 i\u00e7in\n        \/\/ kalan t\u00fcm elemanlar\u0131n indekslerini yeniden d\u00fczenler.\n        \/\/ Bu, b\u00fcy\u00fck dizilerde O(n) zaman karma\u015f\u0131kl\u0131\u011f\u0131na neden olur.\n        const removedElement = this.items.shift();\n        console.log(<\/code>${removedElement} kuyruktan \u00e7\u0131kar\u0131ld\u0131.<code>);\n        return removedElement;\n    }\n\n    \/\/ Kuyru\u011fun \u00f6n\u00fcndeki eleman\u0131 g\u00f6sterir\n    front() {\n        if (this.isEmpty()) {\n            console.log(\"Kuyruk bo\u015f, g\u00f6sterilecek eleman yok.\");\n            return undefined;\n        }\n        return this.items[0];\n    }\n\n    \/\/ Kuyru\u011fun bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder\n    isEmpty() {\n        return this.items.length === 0;\n    }\n\n    \/\/ Kuyruktaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr\n    size() {\n        return this.items.length;\n    }\n\n    \/\/ Kuyru\u011fun i\u00e7eri\u011fini g\u00f6sterir\n    printQueue() {\n        console.log(\"Kuyruk i\u00e7eri\u011fi:\", this.items.toString());\n    }\n}\n\n\/\/ SimpleQueue kullan\u0131m\u0131\nconst mySimpleQueue = new SimpleQueue();\nconsole.log(\"Kuyruk bo\u015f mu?\", mySimpleQueue.isEmpty()); \/\/ true\n\nmySimpleQueue.enqueue(\"G\u00f6rev 1\");\nmySimpleQueue.enqueue(\"G\u00f6rev 2\");\nmySimpleQueue.enqueue(\"G\u00f6rev 3\");\nmySimpleQueue.printQueue(); \/\/ Kuyruk i\u00e7eri\u011fi: G\u00f6rev 1,G\u00f6rev 2,G\u00f6rev 3\n\nconsole.log(\"Kuyru\u011fun \u00f6n\u00fcndeki eleman:\", mySimpleQueue.front()); \/\/ G\u00f6rev 1\n\nmySimpleQueue.dequeue(); \/\/ G\u00f6rev 1 kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleQueue.printQueue(); \/\/ Kuyruk i\u00e7eri\u011fi: G\u00f6rev 2,G\u00f6rev 3\n\nconsole.log(\"Kuyruk boyutu:\", mySimpleQueue.size()); \/\/ 2\n\nmySimpleQueue.dequeue(); \/\/ G\u00f6rev 2 kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleQueue.dequeue(); \/\/ G\u00f6rev 3 kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmySimpleQueue.dequeue(); \/\/ Kuyruk bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\nconsole.log(\"Kuyruk bo\u015f mu?\", mySimpleQueue.isEmpty()); \/\/ true<\/code><\/pre>\n<p>Yukar\u0131daki <\/code>SimpleQueue<code> uygulamas\u0131 basittir ancak <\/code>dequeue()<code> metodunda <\/code>this.items.shift()<code> kullan\u0131lmas\u0131 nedeniyle performans sorunlar\u0131 ya\u015fayabilir. <\/code>shift()<code> metodu, dizinin ba\u015f\u0131ndan bir eleman \u00e7\u0131kard\u0131\u011f\u0131nda, kalan t\u00fcm elemanlar\u0131 birer indeks sola kayd\u0131rmak zorunda kal\u0131r. Bu i\u015flem, dizinin boyutu <\/code>n<code> oldu\u011funda O(n) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir. Bu da b\u00fcy\u00fck kuyruklar i\u00e7in kabul edilemez bir yava\u015fl\u0131\u011fa yol a\u00e7abilir.<\/p>\n<h4>Object Kullanarak Daha Verimli Queue Uygulamas\u0131<\/h4>\n<p>Dizinin <\/code>shift()<code> metodunun performans sorununu a\u015fmak i\u00e7in, elemanlar\u0131 bir obje i\u00e7inde saklayabilir ve <\/code>head<code> (\u00f6n) ve <\/code>tail<code> (arka) i\u015faret\u00e7ileri kullanarak kuyru\u011fu y\u00f6netebiliriz. Bu yakla\u015f\u0131m, <\/code>enqueue<code> ve <\/code>dequeue<code> i\u015flemlerini O(1) zaman karma\u015f\u0131kl\u0131\u011f\u0131nda yapmam\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">class Queue {\n    constructor() {\n        this.items = {};    \/\/ Elemanlar\u0131 tutacak obje\n        this.head = 0;      \/\/ Kuyru\u011fun \u00f6n\u00fcn\u00fc i\u015faret eder\n        this.tail = 0;      \/\/ Kuyru\u011fun arkas\u0131n\u0131 i\u015faret eder\n    }\n\n    \/\/ Kuyru\u011fa eleman ekler (arkaya)\n    enqueue(element) {\n        this.items[this.tail] = element;\n        this.tail++;\n        console.log(<\/code>${element} kuyru\u011fa eklendi.<code>);\n    }\n\n    \/\/ Kuyruktan eleman \u00e7\u0131kar\u0131r (\u00f6nden)\n    dequeue() {\n        if (this.isEmpty()) {\n            console.log(\"Kuyruk bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\");\n            return undefined;\n        }\n        const removedElement = this.items[this.head];\n        delete this.items[this.head]; \/\/ Eleman\u0131 objeden sil\n        this.head++; \/\/ \u00d6n i\u015faret\u00e7iyi bir sonraki elemana kayd\u0131r\n        console.log(<\/code>${removedElement} kuyruktan \u00e7\u0131kar\u0131ld\u0131.<code>);\n        return removedElement;\n    }\n\n    \/\/ Kuyru\u011fun \u00f6n\u00fcndeki eleman\u0131 g\u00f6sterir\n    front() {\n        if (this.isEmpty()) {\n            console.log(\"Kuyruk bo\u015f, g\u00f6sterilecek eleman yok.\");\n            return undefined;\n        }\n        return this.items[this.head];\n    }\n\n    \/\/ Kuyru\u011fun bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder\n    isEmpty() {\n        return this.head === this.tail; \/\/ head ve tail ayn\u0131ysa kuyruk bo\u015ftur\n    }\n\n    \/\/ Kuyruktaki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr\n    size() {\n        return this.tail - this.head;\n    }\n\n    \/\/ Kuyru\u011fun i\u00e7eri\u011fini g\u00f6sterir\n    printQueue() {\n        let str = \"\";\n        for (let i = this.head; i < this.tail; i++) {\n            str += this.items[i] + \" \";\n        }\n        console.log(\"Kuyruk i\u00e7eri\u011fi:\", str.trim());\n    }\n}\n\n\/\/ Queue kullan\u0131m\u0131\nconst myQueue = new Queue();\nconsole.log(\"Kuyruk bo\u015f mu?\", myQueue.isEmpty()); \/\/ true\n\nmyQueue.enqueue(\"\u0130\u015flem A\");\nmyQueue.enqueue(\"\u0130\u015flem B\");\nmyQueue.enqueue(\"\u0130\u015flem C\");\nmyQueue.printQueue(); \/\/ Kuyruk i\u00e7eri\u011fi: \u0130\u015flem A \u0130\u015flem B \u0130\u015flem C\n\nconsole.log(\"Kuyru\u011fun \u00f6n\u00fcndeki eleman:\", myQueue.front()); \/\/ \u0130\u015flem A\n\nmyQueue.dequeue(); \/\/ \u0130\u015flem A kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmyQueue.printQueue(); \/\/ Kuyruk i\u00e7eri\u011fi: \u0130\u015flem B \u0130\u015flem C\n\nconsole.log(\"Kuyruk boyutu:\", myQueue.size()); \/\/ 2\n\nmyQueue.dequeue(); \/\/ \u0130\u015flem B kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmyQueue.dequeue(); \/\/ \u0130\u015flem C kuyruktan \u00e7\u0131kar\u0131ld\u0131.\nmyQueue.dequeue(); \/\/ Kuyruk bo\u015f, \u00e7\u0131kar\u0131lacak eleman yok.\nconsole.log(\"Kuyruk bo\u015f mu?\", myQueue.isEmpty()); \/\/ true<\/code><\/pre>\n<p>Bu <\/code>Queue<code> s\u0131n\u0131f\u0131, <\/code>items<code> objesi ve <\/code>head<code>, <\/code>tail<code> i\u015faret\u00e7ileri ile \u00e7ok daha verimlidir. <\/code>enqueue<code> i\u015flemi <\/code>tail<code> i\u015faret\u00e7isini art\u0131r\u0131rken, <\/code>dequeue<code> i\u015flemi <\/code>head<code> i\u015faret\u00e7isini art\u0131r\u0131r ve eleman\u0131 objeden siler. Bu sayede, elemanlar\u0131n indekslerinin s\u00fcrekli kayd\u0131r\u0131lmas\u0131na gerek kalmaz, bu da her iki i\u015flemin de O(1) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahip olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Queue \u0130\u015flemlerinin Zaman Karma\u015f\u0131kl\u0131\u011f\u0131 (Big O)<\/h3>\n<p>*   <strong><\/code>enqueue()<code><\/strong>: O(1) - Eleman eklemek her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><\/code>dequeue()<code><\/strong>: O(1) - Eleman \u00e7\u0131karmak (obje tabanl\u0131 veya ba\u011fl\u0131 liste ile) her zaman ayn\u0131 s\u00fcreyi al\u0131r. (Array.shift() ile O(n)).<br \/>\n*   <strong><\/code>front()<code><\/strong>: O(1) - En \u00f6ndeki elemana bakmak her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><\/code>isEmpty()<code><\/strong>: O(1) - Bo\u015fluk kontrol\u00fc her zaman ayn\u0131 s\u00fcreyi al\u0131r.<br \/>\n*   <strong><\/code>size()<code><\/strong>: O(1) - Boyut bilgisini almak her zaman ayn\u0131 s\u00fcreyi al\u0131r.<\/p>\n<h3>Queue Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>Queue veri yap\u0131s\u0131, bir\u00e7ok farkl\u0131 alanda kullan\u0131l\u0131r ve \u00f6zellikle s\u0131ral\u0131 i\u015fleme gerektiren durumlarda etkilidir:<\/p>\n<p>1.  <strong>G\u00f6rev Zamanlama (Task Scheduling)<\/strong>: \u0130\u015fletim sistemlerinde CPU'nun i\u015flemleri veya yaz\u0131c\u0131n\u0131n yazd\u0131rma g\u00f6revlerini s\u0131raya koymas\u0131 gibi senaryolarda kullan\u0131l\u0131r. \u0130lk gelen ilk i\u015flenir.<br \/>\n2.  <strong>Geni\u015flemesine Arama (BFS - Breadth-First Search) Algoritmas\u0131<\/strong>: Graf ve a\u011fa\u00e7 yap\u0131lar\u0131nda geni\u015flemesine arama yapmak i\u00e7in kullan\u0131l\u0131r. Kom\u015fular \u00f6nce ke\u015ffedilir, sonra onlar\u0131n kom\u015fular\u0131.<br \/>\n3.  <strong>Veri Ak\u0131\u015f\u0131 ve Mesaj Kuyruklar\u0131<\/strong>: A\u011f uygulamalar\u0131nda veya mesajla\u015fma sistemlerinde, mesajlar\u0131n veya veri paketlerinin belirli bir s\u0131rayla g\u00f6nderilmesi ve al\u0131nmas\u0131 i\u00e7in kullan\u0131l\u0131r.<br \/>\n4.  <strong>Uygulama \u0130ste\u011fi \u0130\u015fleme<\/strong>: Sunuculara gelen isteklerin s\u0131raya al\u0131narak i\u015flenmesi, yo\u011funluk anlar\u0131nda sistemin \u00e7\u00f6kmesini engeller.<br \/>\n5.  <strong>Sim\u00fclasyonlar<\/strong>: Ger\u00e7ek d\u00fcnyadaki kuyruk sistemlerini (\u00f6rne\u011fin, m\u00fc\u015fteri hizmetleri, trafik ak\u0131\u015f\u0131) sim\u00fcle etmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h2>Stack ve Queue Aras\u0131ndaki Se\u00e7im<\/h2>\n<p>Stack ve Queue, do\u011frusal veri yap\u0131lar\u0131 olsalar da, elemanlara eri\u015fim ve i\u015fleme prensipleri tamamen farkl\u0131d\u0131r.<\/p>\n<p>*   <strong>Stack (LIFO)<\/strong>: Son giren ilk \u00e7\u0131kar. Ge\u00e7mi\u015fi takip etme, geri alma i\u015flemleri, fonksiyon \u00e7a\u011fr\u0131lar\u0131 gibi senaryolarda kullan\u0131l\u0131r. Elemanlar\u0131n ters s\u0131rayla i\u015flenmesi gerekti\u011finde tercih edilir.<br \/>\n*   <strong>Queue (FIFO)<\/strong>: \u0130lk giren ilk \u00e7\u0131kar. G\u00f6rev zamanlama, mesaj i\u015fleme, BFS gibi s\u0131ral\u0131 ve adil i\u015fleme gerektiren senaryolarda kullan\u0131l\u0131r. Elemanlar\u0131n geldikleri s\u0131rayla i\u015flenmesi gerekti\u011finde tercih edilir.<\/p>\n<p>Bir algoritma veya uygulama tasarlarken, verilerin hangi s\u0131rayla eklenip \u00e7\u0131kar\u0131laca\u011f\u0131n\u0131n anla\u015f\u0131lmas\u0131, do\u011fru veri yap\u0131s\u0131n\u0131 se\u00e7mek i\u00e7in anahtard\u0131r. Yanl\u0131\u015f veri yap\u0131s\u0131 se\u00e7imi, algoritman\u0131n verimlili\u011fini d\u00fc\u015f\u00fcrebilir veya tamamen yanl\u0131\u015f sonu\u00e7lar vermesine neden olabilir.<\/p>\n<h2>Geli\u015fmi\u015f Kavramlar ve De\u011ferlendirmeler<\/h2>\n<p>Stack ve Queue'nun temel prensipleri \u00fczerine in\u015fa edilmi\u015f baz\u0131 geli\u015fmi\u015f veri yap\u0131lar\u0131 da bulunmaktad\u0131r:<\/p>\n<h3>Dairesel Kuyruk (Circular Queue)<\/h3>\n<p>Dairesel kuyruk, belirli bir boyuta sahip olan ve kuyru\u011fun sonuna ula\u015f\u0131ld\u0131\u011f\u0131nda ba\u015fa d\u00f6nerek bo\u015f alanlar\u0131 tekrar kullanabilen bir kuyruk t\u00fcr\u00fcd\u00fcr. Bu, \u00f6zellikle sabit boyutlu bellek alanlar\u0131nda veya d\u00f6ng\u00fcsel arabellek (buffer) uygulamalar\u0131nda etkilidir. Dairesel kuyruklar, dizinin s\u00fcrekli olarak kayd\u0131r\u0131lmas\u0131 veya elemanlar\u0131n silinmesi yerine, i\u015faret\u00e7ileri (head ve tail) d\u00f6ng\u00fcsel olarak hareket ettirerek daha verimli bir alan kullan\u0131m\u0131 sa\u011flar.<\/p>\n<h3>\u00d6ncelikli Kuyruk (Priority Queue)<\/h3>\n<p>\u00d6ncelikli kuyruk, elemanlar\u0131 eklenme s\u0131ras\u0131na g\u00f6re de\u011fil, \u00f6ncelik de\u011ferlerine g\u00f6re i\u015fleyen bir kuyruk t\u00fcr\u00fcd\u00fcr. En y\u00fcksek \u00f6nceli\u011fe sahip eleman her zaman ilk \u00e7\u0131kar\u0131l\u0131r. Ayn\u0131 \u00f6ncelikteki elemanlar i\u00e7in genellikle FIFO prensibi uygulan\u0131r. \u0130\u015fletim sistemlerinde s\u00fcre\u00e7 zamanlama, a\u011f y\u00f6nlendiricilerinde paket i\u015fleme veya olay tabanl\u0131 sim\u00fclasyonlar gibi senaryolarda kullan\u0131l\u0131r. Genellikle Heap (Y\u0131\u011f\u0131n A\u011fac\u0131) gibi veri yap\u0131lar\u0131 kullan\u0131larak uygulan\u0131r.<\/p>\n<h3>\u00c7ift Tarafl\u0131 Kuyruk (Deque - Double-Ended Queue)<\/h3>\n<p>Deque (telaffuzu \"deck\"), hem kuyruk hem de y\u0131\u011f\u0131n i\u015flevselli\u011fini birle\u015ftiren bir veri yap\u0131s\u0131d\u0131r. Elemanlar hem \u00f6n\u00fcnden hem de arkas\u0131ndan eklenebilir veya \u00e7\u0131kar\u0131labilir. Bu esneklik, belirli algoritmalarda (\u00f6rne\u011fin, kayan pencere problemleri) veya i\u015flemlerin hem LIFO hem de FIFO mant\u0131\u011f\u0131yla yap\u0131labilece\u011fi durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Stack ve Queue, bilgisayar bilimleri ve yaz\u0131l\u0131m m\u00fchendisli\u011finin temel ta\u015flar\u0131ndan iki do\u011frusal veri yap\u0131s\u0131d\u0131r. LIFO (Stack) ve FIFO (Queue) prensipleri, bir\u00e7ok algoritma ve ger\u00e7ek d\u00fcnya uygulamas\u0131n\u0131n arkas\u0131ndaki mant\u0131\u011f\u0131 olu\u015fturur. JavaScript gibi modern bir dilde bu yap\u0131lar\u0131 anlamak ve etkili bir \u015fekilde uygulamak, daha sa\u011flam, verimli ve \u00f6l\u00e7eklenebilir yaz\u0131l\u0131mlar geli\u015ftirmenin anahtar\u0131d\u0131r.<\/p>\n<p>Bu makalede, Stack ve Queue'nun tan\u0131mlar\u0131n\u0131, temel i\u015flemlerini, JavaScript'te <\/code>Array<code> ve <\/code>Object` kullanarak nas\u0131l uygulanabilece\u011fini, zaman karma\u015f\u0131kl\u0131klar\u0131n\u0131 ve yayg\u0131n kullan\u0131m senaryolar\u0131n\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceledik. Ayr\u0131ca, dairesel kuyruk, \u00f6ncelikli kuyruk ve Deque gibi geli\u015fmi\u015f kavramlara da k\u0131saca de\u011findik.<\/p>\n<p>Veri yap\u0131lar\u0131 d\u00fcnyas\u0131 geni\u015f ve karma\u015f\u0131kt\u0131r, ancak Stack ve Queue ile sa\u011flam bir ba\u015flang\u0131\u00e7 yapmak, daha karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 (a\u011fa\u00e7lar, graflar, hash tablolar\u0131 vb.) anlamak i\u00e7in temel bir zemin olu\u015fturur. Bu bilgileri peki\u015ftirmek i\u00e7in farkl\u0131 senaryolarda Stack ve Queue kullanarak pratik yapmaya devam etmek, problem \u00e7\u00f6zme becerilerinizi ve algoritma bilginizi \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirecektir. Unutmay\u0131n, iyi bir yaz\u0131l\u0131mc\u0131 sadece kod yazmaz, ayn\u0131 zamanda veriyi nas\u0131l organize edece\u011fini ve i\u015fleyece\u011fini de bilir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\nGiri\u015f: Veri Yap\u0131lar\u0131n\u0131n Temeli\nYaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, verileri etkili b","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-30527","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\" \/>\n<meta property=\"og:description\" content=\"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek Giri\u015f: Veri Yap\u0131lar\u0131n\u0131n Temeli Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, verileri etkili b\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-28T20:40:52+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\",\"datePublished\":\"2025-09-28T20:40:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\"},\"wordCount\":1191,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\",\"name\":\"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-28T20:40:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek","og_description":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek Giri\u015f: Veri Yap\u0131lar\u0131n\u0131n Temeli Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, verileri etkili b","og_url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-28T20:40:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek","datePublished":"2025-09-28T20:40:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/"},"wordCount":1191,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/","url":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/","name":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-28T20:40:52+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascript-ile-stack-ve-queue-veri-yapilarini-kesfetmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript ile Stack ve Queue Veri Yap\u0131lar\u0131n\u0131 Ke\u015ffetmek"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30527"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30527\/revisions"}],"predecessor-version":[{"id":30528,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30527\/revisions\/30528"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}