{"id":28030,"date":"2022-03-16T17:20:26","date_gmt":"2022-03-16T16:20:26","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=28030"},"modified":"2024-11-27T15:12:33","modified_gmt":"2024-11-27T14:12:33","slug":"stack-datenstruktur","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/stack-datenstruktur\/","title":{"rendered":"Stack Datenstruktur"},"content":{"rendered":"\n<p>In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Stack\" (deutsch: \"Stapelspeicher\", \"Kellerspeicher\" oder kurz \"Stapel\", \"Keller\"):<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Wie funktioniert ein Stack?<\/li><li>Was sind die Anwendungsgebiete f\u00fcr Stacks?<\/li><li>Wie verwendet man die Java-Klasse \"Stack\"?<\/li><li>Wie implementiert man einen eigenen Stack in Java?<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"was-ist-ein-stack\">Was ist ein Stack?<\/h2>\n\n\n\n<p>Ein Stack ist eine Sammlung von Elementen, bei der die Elemente nur auf einer Seite (in grafischen Darstellungen klassischerweise oben) eingef\u00fcgt und wieder entnommen werden k\u00f6nnen.<\/p>\n\n\n\n<p>Am besten stellt man sich einen Stack wie einen Tellerstapel vor:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"150\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-600x150.png\" alt=\"Tellerstapel\" class=\"wp-image-28118\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-600x150.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-224x56.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-336x84.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-504x126.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-672x168.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-400x100.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-800x200.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates-944x236.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/stack-of-plates.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Tellerstapel<\/figcaption><\/figure><\/div>\n\n\n\n<p><span style=\"color: initial;\">Neue Teller k\u00f6nnen nur <em>oben<\/em> auf den Stapel gelegt werden, und Teller k\u00f6nnen auch nur von <em>oben<\/em> wieder entnommen werden.<\/span><\/p>\n\n\n\n<p>Da dadurch der zuletzt hinzugef\u00fcgte Teller als erstes wieder entnommen wird, spricht man vom Last-in-First-out-Prinzip (LIFO).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"lifo-prinzip-beim-stack\">LIFO-Prinzip beim Stack<\/h2>\n\n\n\n<p>Beim abstrakten Datentyp \"Stack\" k\u00f6nnte das dann in etwa wie folgt aussehen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"252\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-600x252.png\" alt=\"Stack Datenstruktur\" class=\"wp-image-28623\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-600x252.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-224x94.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-336x141.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-504x212.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-672x282.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-400x168.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-800x336.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure-944x396.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/03\/stack-data-structure.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Stack-Datenstruktur<\/figcaption><\/figure><\/div>\n\n\n\n<p>Die Grafik zeigt einen Stack, der einige Strings enth\u00e4lt. Als n\u00e4chstes Element wird \"grape\" auf den Stack gelegt. Danach w\u00fcrden wir \"grape\" auch als erstes wieder entnehmen m\u00fcssen.<\/p>\n\n\n\n<p>Eine Stack-Datenstruktur bietet in der Regel die folgenden Operationen an:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\"Push\": Hinzuf\u00fcgen eines Elements auf den Stack<\/li><li>\"Pop\": Entnehmen eines Elements von der Oberseite des Stacks<\/li><li>\"Peek\" oder \"Top\": Betrachten des obersten Elements des Stapels, ohne es zu entnehmen<\/li><li>Eine Pr\u00fcfung, ob der Stack leer ist<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"anwendungsgebiete-fuer-stacks\">Anwendungsgebiete f\u00fcr Stacks<\/h2>\n\n\n\n<p>Du kannst dir z. B. die Webseiten-Historie innerhalb eines Browser-Tabs als Stack vorstellen: Jedesmal, wenn du einen Link anklickst, wird die vorherige URL auf einen Stack gelegt. Beim Bet\u00e4tigen des Zur\u00fcck-Buttons wird die oberste URL des Stacks entnommen und wieder angezeigt. <\/p>\n\n\n\n<p>In \u00e4hnlicher Weise werden bei der Ausf\u00fchrung eines Computerprogramms die R\u00fccksprungsadressen beim Aufruf von Methoden auf den sogennanten Call Stack gelegt (deutsch: \"Aufrufstapel\"), so dass nach Ausf\u00fchrung der Methode an die Aufrufposition zur\u00fcckgesprungen werden kann. Der durch eine zu tiefe Verschachtelung verursachte <code>StackOverflowError<\/code> ist dir vielleicht schon mal begegnet.<\/p>\n\n\n\n<p>Auch Compiler und Parser verwenden Stacks, z. B. bei der Verarbeitung von XML- und JSON-Dokumenten oder der Evaluierung von mathematischen Ausdr\u00fccken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zeitkomplexitaet-der-stack-operationen\">Zeitkomplexit\u00e4t der Stack-Operationen<\/h2>\n\n\n\n<p><em>Eine Einf\u00fchrung in das Thema Zeitkomplexit\u00e4t findest du im Artikel \"<a href=\"\/de\/algorithmen\/o-notation-zeitkomplexitaet\/\">O-Notation und Zeitkomplexit\u00e4t \u2013 anschaulich erkl\u00e4rt<\/a>\".<\/em><\/p>\n\n\n\n<p>In der Regel wird ein Stack <a href=\"\/de\/algorithmen\/stack-implementieren-array\/\">mit einem Array<\/a> oder <a href=\"\/de\/algorithmen\/stack-implementieren-linked-list\/\">einer verketteten Liste<\/a> implementiert. Bei beiden Varianten ist der Aufwand f\u00fcr das Einf\u00fcgen oder Entnehmen eines Elements konstant und h\u00e4ngt nicht von der Anzahl der im Stack vorhandenen Elemente ab.<\/p>\n\n\n\n<p>Die Zeitkomplexit\u00e4t lautet somit: <em>O(1)<\/em>.<\/p>\n\n\n\n<p>Stacks k\u00f6nnen auch <a href=\"\/de\/algorithmen\/stack-implementieren-queue\/\">mit Queues<\/a> implementiert werden \u2013 das aber eher zu Schulungszwecken. Die Zeitkomplexit\u00e4t ist dann h\u00f6her. Mehr dazu liest du im entsprechenden Teil des Tutorials.<\/p>\n\n\n\n<p>Wenn du noch Fragen hast, stelle sie gerne \u00fcber die Kommentar-Funktion. M\u00f6chtest du \u00fcber neue Tutorials und Artikel informiert werden? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders.eu-Newsletter anzumelden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Stack\" (\"Stapelspeicher\", \"Kellerspeicher\") und wie man ihn in Java implementiert.<\/p>\n","protected":false},"author":1,"featured_media":28552,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Stack\" (\"Stapelspeicher\", \"Kellerspeicher\") und wie man ihn in Java implementiert.","_seopress_robots_index":"","_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":3163,"_post_count":0,"footnotes":""},"categories":[127],"tags":[191],"class_list":["post-28030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmen","tag-datenstrukturen-stack"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",1770,996,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",300,169,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",768,432,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",1024,576,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-224x126.jpg",224,126,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-336x189.jpg",336,189,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-504x284.jpg",504,284,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-672x378.jpg",672,378,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-400x225.jpg",400,225,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-600x338.jpg",600,338,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-800x450.jpg",800,450,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-944x531.jpg",944,531,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-1200x675.jpg",1200,675,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",1536,864,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/02\/plate-629970.jpg",1770,996,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Stack\" (\"Stapelspeicher\", \"Kellerspeicher\") und wie man ihn in Java implementiert.","public_identification_id":"5f79753e1b95437ab490e401e4a79348","private_identification_id":"da73300445b24863bd02f15de87ac17e","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=28030"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28030\/revisions"}],"predecessor-version":[{"id":28625,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28030\/revisions\/28625"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/28552"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=28030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=28030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=28030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}