{"id":31251,"date":"2022-06-08T19:00:00","date_gmt":"2022-06-08T17:00:00","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=31251"},"modified":"2024-11-27T15:13:09","modified_gmt":"2024-11-27T14:13:09","slug":"stack-vs-queue","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/stack-vs-queue\/","title":{"rendered":"Stack vs. Queue"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In diesem Artikel erf\u00e4hrst du:<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Was sind die Unterschiede zwischen den Datenstrukturen Stack und Queue?<\/li><li>Was bedeuten LIFO-Prinzip und FIFO-Prinzip?<\/li><li>Wie unterscheiden sich die Java-Interfaces bzw. Klassen <code>Stack<\/code> und <code>Queue<\/code>?<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen wir mit den Datenstrukturen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"unterschied-zwischen-stack-und-queue\">Unterschied zwischen Stack und Queue<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Stack ist eine lineare Datenstruktur, bei der die Elemente nach dem <strong>LIFO-Prinzip<\/strong> (\"last-in-first-out\") eingef\u00fcgt und entnommen werden. Das bedeutet, dass dasjenige Elemente, das als <em>letztes<\/em> auf den Stack gelegt wurde, als <em>erstes<\/em> wieder entnommen wird \u2013 und dass das Element, das <em>zuerst<\/em> auf den Stack gelegt wurde, als <em>letztes<\/em> wieder entnommen wird.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"281\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-600x281.png\" alt=\"Stack vs. Queue: Stack-Datenstruktur\" class=\"wp-image-30977\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-600x281.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-224x105.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-336x157.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-504x236.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-672x315.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-400x187.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-800x375.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-944x442.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Stack-Datenstruktur<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Eine Queue ist eine lineare Datenstruktur, bei der die Elemente nach dem <strong>FIFO-Prinzip<\/strong> (\"first-in-first-out\") eingef\u00fcgt und entnommen werden. Elemente, die als <em>erstes<\/em> in die Queue eingef\u00fcgt wurden, werden auch als <em>erstes<\/em> wieder entnommen. Elemente, die als <em>letztes<\/em> in die Queue eingef\u00fcgt wurden, werden <em>zuletzt<\/em> entnommen.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"174\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-600x174.png\" alt=\"Stack vs. Queue: Queue-Datenstruktur\" class=\"wp-image-30989\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-600x174.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-224x65.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-336x97.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-504x146.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-672x195.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-400x116.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-800x232.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-944x274.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Queue-Datenstruktur<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Weitere Details, wie Anwendungsgebiete und Betrachtungen der Zeitkomplexit\u00e4t, findest du im <a href=\"\/de\/algorithmen\/stack-datenstruktur\/\">Hauptartikel \u00fcber die Stack-Datenstruktur<\/a> und im <a href=\"\/de\/algorithmen\/queue-datenstruktur\/\">Hauptartikel \u00fcber die Queue-Datenstruktur<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"stack-und-queue-terminologie\">Stack und Queue \u2013 Terminologie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Einf\u00fcge- und Entnahmeoperation sowie die Seiten der Datenstrukturen werden bei Stacks und Queues unterschiedlich bezeichnet:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Operation<\/th><th class=\"has-text-align-center\" data-align=\"center\">Stack<\/th><th class=\"has-text-align-center\" data-align=\"center\">Queue<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Einf\u00fcgen<\/td><td class=\"has-text-align-center\" data-align=\"center\">Push (top)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Enqueue (back \/ tail)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Entnehmen<\/td><td class=\"has-text-align-center\" data-align=\"center\">Pop (top)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Dequeue (front \/ head)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die untere Seite des Stacks wird als \"bottom\" bezeichnet und ist \u00fcber die Operationen nicht erreichbar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"unterschied-zwischen-java-stack-und-queue\">Unterschied zwischen Java Stack und Queue<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Abschnitt beschreibt die Unterschiede zwischen der Java-Klasse <code>java.util.Stack<\/code> und dem Interface <code>java.util.Queue<\/code> hinsichtlich verschiedener Aspekte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"klasse-vs-interface\">Klasse vs. Interface<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Stack<\/code> ist eine Klasse (\u2192 <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-stack\/\">alle Details \u00fcber die Stack-Klasse<\/a>), also eine konkrete Implementierung des Stack-Datentyps im JDK.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Queue<\/code> hingegen ist ein Interface (\u2192 <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-queue\/\">alle Details \u00fcber das Queue-Interface<\/a>). Das JDK stellt mehrere Queue-Implementierungen mit verschiedenen Charakteristika zur Verf\u00fcgung. Entsprechend deines Anwendungsgebiets kannst du eine <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-queue-implementierungen\/\">geeignete Queue-Implementierung ausw\u00e4hlen<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"thread-sicherheit\">Thread-Sicherheit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Alle <code>Stack<\/code>-Methoden sind <code>synchronized<\/code> \u2013 <code>Stack<\/code> ist also threadsicher. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir jedoch keine Threadsicherheit ben\u00f6tigen, ist die Synchronisation \u00fcberfl\u00fcssig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Und wenn wir Threadsicherheit ben\u00f6tigen, w\u00e4re die Verwendung von pessimistischen Locks, wie <code>synchronized<\/code> sie verwendet, nur bei einer hohen Anzahl an Zugriffskonflikten (\"high thread contention\") sinnvoll. Bei moderaten Zugriffskonflikten w\u00e4re optimistisches Locking besser geeignet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr das <code>Queue<\/code>-Interface bietet das JDK mehrere Implementierungen: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>nicht threadsichere Implementierungen (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/arraydeque-java\/\">ArrayDeque<\/a>\u00b9)<\/li><li>threadsichere Implementierungen mit pessimistischem Locking (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/linkedblockingdeque-java\/\">LinkedBlockingQueue<\/a>)<\/li><li>threadsichere Implementierungen mit optimistischem Locking (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/concurrentlinkeddeque-java\/\">ConcurrentLinkedQueue<\/a>)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tats\u00e4chlich empfehlen die JDK-Entwickler die Klasse <code>Stack<\/code> nicht mehr zu verwenden und stattdessen Implementierungen des <code>Deque<\/code>-Interfaces, welches ebenfalls die Stack-Methoden <code>push()<\/code> und <code>pop()<\/code> definiert, einzusetzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auch f\u00fcr das Deque-Interface bietet das JDK zahlreiche Implementierungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>nicht threadsichere Implementierungen (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/arraydeque-java\/\">ArrayDeque<\/a>\u00b9)<\/li><li>threadsichere Implementierungen mit pessimistischem Locking (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/linkedblockingdeque-java\/\">LinkedBlockingDeque<\/a>)<\/li><li>threadsichere Implementierungen mit optimistischem Locking (z. B. <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/concurrentlinkeddeque-java\/\">ConcurrentLinkedDeque<\/a>)<\/li><\/ul>\n\n\n\n<p class=\"hc-footnote wp-block-paragraph\">\u00b9 Das Java-<code>Deque<\/code>-Interface erbt von <code>Queue<\/code>, daher kann <code>ArrayDeque<\/code> sowohl als Deque als auch als Queue eingesetzt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"verletzung-des-interface-segregation-prinzips\">Verletzung des Interface-Segregation-Prinzips<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sowohl die <code>Stack<\/code>-Klasse als auch das <code>Deque<\/code>-Interface definieren Methoden, die die jeweilige Datenstruktur eigentlich nicht anbieten sollte. Damit verletzen beide das <a rel=\"noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Interface-Segregation-Prinzip\" target=\"_blank\">Interface-Segregation-Prinzip<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da <code>Stack<\/code> und <code>Deque<\/code> letztendlich das <code>Collection<\/code>-Interface implementieren, haben sie z. B. die Methoden <code>remove()<\/code>, <code>removeIf()<\/code>, <code>removeAll()<\/code> und <code>ratainAll()<\/code>, mit denen Elemente aus der Mitte der Datenstruktur entnommen werden k\u00f6nnen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Stack<\/code> hat zudem eine <code>insertElementAt()<\/code>-Methode, mit der Elemente in der Mitte des Stacks eingef\u00fcgt werden k\u00f6nnen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Artikel \"<a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/stack-implementieren\/\">Stack in Java implementieren<\/a>\" und \"<a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/queue-implementieren-array\/\">Queue mit einem Array implementieren<\/a>\" zeigen, wie ein Stack- bzw. Queue-Interface eigentlich aussehen sollte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zusammenfassung\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Artikel hat die Unterschiede zwischen den Datenstrukturen Stack und Queue und den entsprechenden Java-Interfaces bzw. Klassen erl\u00e4utert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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>Was sind die Unterschiede zwischen den Datenstrukturen Stack und Queue? Wie unterscheiden sich die entsprechenden Java-Interfaces bzw. Klassen?<\/p>\n","protected":false},"author":1,"featured_media":31276,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Wie unterscheiden sich die Datenstrukturen Stack und Queue? Wie unterscheiden sich die entsprechenden Java-Interfaces und Klassen?","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"stack vs. queue,stack vs queue,queue vs. stack,queue vs stack,stack und queue,queue und stack","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[{"_seopress_pro_rich_snippets_type":"none"}],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_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":4720,"_post_count":0,"footnotes":""},"categories":[127],"tags":[191],"class_list":["post-31251","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\/06\/stack-and-queue-differences-1770x986-1.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/06\/stack-and-queue-differences-1770x986-1.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Was sind die Unterschiede zwischen den Datenstrukturen Stack und Queue? Wie unterscheiden sich die entsprechenden Java-Interfaces bzw. Klassen?","public_identification_id":"0843e574259e4644bed9711742294532","private_identification_id":"42ed8aa5a11e4d088d9ac84dc5da04a8","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/31251","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=31251"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/31251\/revisions"}],"predecessor-version":[{"id":31293,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/31251\/revisions\/31293"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/31276"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=31251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=31251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=31251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}