Heim häufiges Problem Programmierer, der Datenstruktur-Stack, den Sie kennen sollten

Programmierer, der Datenstruktur-Stack, den Sie kennen sollten

Aug 23, 2019 pm 05:01 PM
数据结构

Programmierer, der Datenstruktur-Stack, den Sie kennen sollten

Der Stapel in der Datenstruktur sollte nicht mit dem Stapel in Java verwechselt werden. Sie sind nicht dasselbe. Der Stapel in der Datenstruktur ist eine eingeschränkte lineare Liste verfügt über erweiterte Out- und Last-In-First-Out-Eigenschaften, da der Stapel nur den Zugriff auf das letzte Datenelement ermöglicht, dh auf das zuletzt eingefügte Datenelement. Vielleicht haben Sie Fragen, warum nicht ein Array oder eine verknüpfte Liste anstelle eines Stapels verwenden, da der Stapel so viele Einschränkungen hat? In der Entwicklung haben wir bestimmte Szenarien und wählen Datenstrukturen entsprechend bestimmten Szenarien aus. Es gibt viele anwendbare Szenarien für den Browser, z. B. die Vorwärts- und Rückwärtsbewegung des Browsers, die Rechtmäßigkeit von Zeichenfolgenklammern usw. Es ist für uns besser, Stapel zu verwenden Implementierung, da der Stack viel weniger externe Schnittstellen bereitstellt als Arrays und verknüpfte Listen. Durch weniger Schnittstellen wird die Fehlerwahrscheinlichkeit verringert und die Kontrollierbarkeit von Risiken verbessert.

Empfohlene Tutorials: PHP-Video-Tutorial

Implementieren Sie eins Stapel

Wie aus der Definition des Stapels ersichtlich ist, verfügt der Stapel hauptsächlich über zwei Operationen: Eine besteht darin, ein Datenelement hinzuzufügen, was wir Pushen nennen, und die andere darin Erhalten Sie ein Datenelement, das als „Stapel platzen“ bezeichnet wird. Die folgenden beiden Bilder sind schematische Diagramme zum Schieben und Platzieren des Stapels.

Programmierer, der Datenstruktur-Stack, den Sie kennen sollten

Programmierer, der Datenstruktur-Stack, den Sie kennen sollten

Es gibt zwei Möglichkeiten, den Stapel zu implementieren: Die eine basiert auf Arrays, wir nennen sie einen sequentiellen Stapel, und die andere ist es Basierend auf einer verknüpften Liste implementiert, nennen wir es einen verknüpften Stapel. Das Folgende ist der Implementierungscode der beiden Stapel

Array-basierter sequentieller Stapel

/**
 * 基于数组的顺序栈
 */
 public class ArrayStack {    // 栈最大容量
    private int maxSzie;    // 存放内容
    private String[] array;    // 栈顶元素
    private int top;    
    public ArrayStack(int size){      
      this.maxSzie = size;        
      this.array = new String[this.maxSzie];        
      this.top = 0;
    }  
      /**
     * 入栈操作
     *
     * @param data 数据
     * @return 0:入栈失败 1:入栈成功
     */
    public int push(String data) {      
      if (top == maxSzie) return 0;
        array[top] = data;
        top++;        
        return 1;
    }    
    /**
     * 出栈操作
     *
     * @return
     */
    public String pop() {     
       if (top == 0) return null;        
       return array[--top];
    }    
    /**
     * 获取栈顶元素
     *
     * @return
     */
    public String peek() {     
       return array[top - 1];
    }    
    /**
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty() {    
        return top == 0;
    }
}
Nach dem Login kopieren

Verknüpfter Stapel basierend auf verknüpfter Liste

/**
 * 基于链表的链式栈
 */public class LinkStack {    // 始终指向栈的第一个元素
    private Node top = null;    
    /**
     * 压栈
     *
     * @param data
     * @return
     */
    public int push(String data) {
        Node node = new Node(data);        
        if (top == null) {
            top = node;
        } else {
            node.next = top;
            top = node;
        }       
         return 1;
        }   
     /**
     * 出栈
     *
     * @return
     */
    public String pop() {     
       if (top == null) return null;
        String data = top.getData();
        top = top.next;       
         return data;
    }   
     /**
     * 节点信息
     */
    private static class Node {      
      private String data;      
      private Node next;        
      public Node(String data) {        
          this.data = data;          
          this.next = null;
        }       
      public String getData() {          
        return this.data;
        }
    }
}
Nach dem Login kopieren

Die Implementierung des Stapels ist relativ einfach, da der Stapel nicht viele Operationen umfasst, hauptsächlich zwei Operationen: Push und Pop.

Stack-Anwendung

Erkennen Sie die Rechtmäßigkeit von Zeichenfolgenklammern

Manchmal müssen wir die Rechtmäßigkeit von Zeichenfolgenklammern überprüfen, das heißt, eine linke Klammer muss mit einer rechten Klammer übereinstimmen. Wir können den Stapel verwenden, um dies zu erreichen. Können wir verstehen, warum der Stapel aus rechtlicher Sicht verwendet wird? Wenn die Klammern legal verwendet werden, entspricht die letzte linke Klammer der ersten rechten Klammer, die vorletzte linke Klammer entspricht der zweiten rechten Klammer und so weiter. Dies steht im Einklang mit der First-In-Last-Out-Funktion unseres Stapels.

Angenommen, wir haben drei Arten von Klammern: runde Klammern (), eckige Klammern [] und geschweifte Klammern {}. Wir verwenden den Stapel, um die Gültigkeit der Klammern zu überprüfen. Wir schieben alle linken Klammern auf den Stapel. Zu diesem Zeitpunkt gibt es drei Situationen: ●Der Stapel ist leer, was darauf hinweist, dass keine linke Klammer vorhanden ist von Klammern ist illegal

●Die aus dem Stapel entnommene linke Klammer stimmt nicht mit der rechten Klammer überein, und die Verwendung von Klammern ist illegal

●Die aus dem Stapel entnommene linke Klammer stimmt mit überein rechte Klammer, und die Verwendung von Klammern ist vorübergehend zulässig

Wenn nach dem Scannen der gesamten Zeichenfolge noch ein Wert im Stapel vorhanden ist, bedeutet dies, dass die Verwendung von Klammern zulässig ist Auf jeden Fall ist die Verwendung von Klammern illegal.

Implementierungscode

public static boolean BracketChecker(String data) {
    char[] chars = data.toCharArray();
    ArrayStack stack = new ArrayStack(chars.length);    
    for (char ch : chars) {
            switch (ch){
                        case '{':            
                        case '[':            
                        case '(':
                                stack.push(ch);                
                                break;            
                         case '}':            
                         case ']':            
                         case ')':             
                                if (!stack.isEmpty()){                 
                                   char ch1 = stack.pop();                    
                                   if ((ch=='}' && ch1 !='{')
                                        ||(ch==']' && ch1 !='[')
                                        ||(ch==')' && ch1 !='(')

                    ){                 
                           return false;
                    }
                }else {    
                           return false;
                }     
                break;            
        default:            
            break;
        }
    }   
    return stack.isEmpty();
}
Nach dem Login kopieren

Browser-Vorwärts- und Rückwärtsfunktionen Wir alle verwenden Browser. Wissen Sie? , der Browser kann sich vorwärts und rückwärts bewegen, und die Vorwärts- und Rückwärtsfunktionen des Browsers stimmen auch mit den Eigenschaften des Stapels überein. Die Webseite, die wir zuerst besuchen, muss die letzte sein, zu der wir zurückkehren. Schauen wir uns an, wie der Stack diese Funktion implementiert.

Wir müssen die zum ersten Mal besuchte Seite in den ersten Stapel verschieben. Wenn wir zurückklicken, nehmen wir die Daten vom ersten Stapel und legen sie in den zweiten Stapel ab Wenn Sie auf die Schaltfläche „Weiter“ klicken, werden die Daten vom zweiten Stapel übernommen und im ersten Stapel abgelegt. Wenn der erste Stapel keine Daten enthält, bedeutet dies, dass es keine Seite gibt, auf die man klicken kann, um vorwärts zu gehen. Wenn der zweite Stapel keine Daten enthält, bedeutet dies, dass es keine Seite gibt, auf die man klicken kann, um vorwärts zu gehen. Auf diese Weise implementieren wir die Vorwärts- und Rückwärtsfunktionen des Browsers über den Stapel.

Das obige ist der detaillierte Inhalt vonProgrammierer, der Datenstruktur-Stack, den Sie kennen sollten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vergleichen Sie komplexe Datenstrukturen mithilfe des Java-Funktionsvergleichs Vergleichen Sie komplexe Datenstrukturen mithilfe des Java-Funktionsvergleichs Apr 19, 2024 pm 10:24 PM

Bei der Verwendung komplexer Datenstrukturen in Java wird Comparator verwendet, um einen flexiblen Vergleichsmechanismus bereitzustellen. Zu den spezifischen Schritten gehören: Definieren einer Komparatorklasse und Umschreiben der Vergleichsmethode, um die Vergleichslogik zu definieren. Erstellen Sie eine Komparatorinstanz. Verwenden Sie die Methode „Collections.sort“ und übergeben Sie die Sammlungs- und Komparatorinstanzen.

Java-Datenstrukturen und -Algorithmen: ausführliche Erklärung Java-Datenstrukturen und -Algorithmen: ausführliche Erklärung May 08, 2024 pm 10:12 PM

Datenstrukturen und Algorithmen sind die Grundlage der Java-Entwicklung. In diesem Artikel werden die wichtigsten Datenstrukturen (wie Arrays, verknüpfte Listen, Bäume usw.) und Algorithmen (wie Sortier-, Such-, Diagrammalgorithmen usw.) ausführlich untersucht. Diese Strukturen werden anhand praktischer Beispiele veranschaulicht, darunter die Verwendung von Arrays zum Speichern von Bewertungen, verknüpfte Listen zum Verwalten von Einkaufslisten, Stapel zum Implementieren von Rekursionen, Warteschlangen zum Synchronisieren von Threads sowie Bäume und Hash-Tabellen für schnelle Suche und Authentifizierung. Wenn Sie diese Konzepte verstehen, können Sie effizienten und wartbaren Java-Code schreiben.

Vertieftes Verständnis der Referenztypen in der Go-Sprache Vertieftes Verständnis der Referenztypen in der Go-Sprache Feb 21, 2024 pm 11:36 PM

Referenztypen sind ein spezieller Datentyp in der Go-Sprache. Ihre Werte speichern nicht direkt die Daten selbst, sondern die Adresse der gespeicherten Daten. In der Go-Sprache umfassen Referenztypen Slices, Karten, Kanäle und Zeiger. Ein tiefes Verständnis der Referenztypen ist entscheidend für das Verständnis der Speicherverwaltungs- und Datenübertragungsmethoden der Go-Sprache. In diesem Artikel werden spezifische Codebeispiele kombiniert, um die Merkmale und Verwendung von Referenztypen in der Go-Sprache vorzustellen. 1. Slices Slices sind einer der am häufigsten verwendeten Referenztypen in der Go-Sprache.

PHP-Datenstruktur: Das Gleichgewicht der AVL-Bäume sorgt für eine effiziente und geordnete Datenstruktur PHP-Datenstruktur: Das Gleichgewicht der AVL-Bäume sorgt für eine effiziente und geordnete Datenstruktur Jun 03, 2024 am 09:58 AM

Der AVL-Baum ist ein ausgewogener binärer Suchbaum, der schnelle und effiziente Datenoperationen gewährleistet. Um ein Gleichgewicht zu erreichen, führt es Links- und Rechtsdrehungen durch und passt Teilbäume an, die das Gleichgewicht verletzen. AVL-Bäume nutzen den Höhenausgleich, um sicherzustellen, dass die Höhe des Baums im Verhältnis zur Anzahl der Knoten immer klein ist, wodurch Suchoperationen mit logarithmischer Zeitkomplexität (O(logn)) erreicht werden und die Effizienz der Datenstruktur auch bei großen Datensätzen erhalten bleibt.

Vollständige Analyse des Java-Sammlungsframeworks: Analyse der Datenstruktur und Enthüllung des Geheimnisses effizienter Speicherung Vollständige Analyse des Java-Sammlungsframeworks: Analyse der Datenstruktur und Enthüllung des Geheimnisses effizienter Speicherung Feb 23, 2024 am 10:49 AM

Überblick über das Java Collection Framework Das Java Collection Framework ist ein wichtiger Teil der Programmiersprache Java. Es stellt eine Reihe von Containerklassenbibliotheken bereit, die Daten speichern und verwalten können. Diese Containerklassenbibliotheken verfügen über unterschiedliche Datenstrukturen, um den Datenspeicher- und -verarbeitungsanforderungen in verschiedenen Szenarien gerecht zu werden. Der Vorteil des Sammlungsframeworks besteht darin, dass es eine einheitliche Schnittstelle bietet, die es Entwicklern ermöglicht, verschiedene Containerklassenbibliotheken auf die gleiche Weise zu betreiben, wodurch die Entwicklungsschwierigkeiten verringert werden. Datenstrukturen des Java-Sammlungsframeworks Das Java-Sammlungsframework enthält eine Vielzahl von Datenstrukturen, von denen jede ihre eigenen einzigartigen Eigenschaften und anwendbaren Szenarien aufweist. Im Folgenden sind einige gängige Datenstrukturen des Java Collection Frameworks aufgeführt: 1. Liste: Liste ist eine geordnete Sammlung, die die Wiederholung von Elementen ermöglicht. Li

Lernen Sie die Geheimnisse der Datenstrukturen der Go-Sprache ausführlich kennen Lernen Sie die Geheimnisse der Datenstrukturen der Go-Sprache ausführlich kennen Mar 29, 2024 pm 12:42 PM

Eine eingehende Untersuchung der Geheimnisse der Datenstruktur der Go-Sprache erfordert spezifische Codebeispiele. Als prägnante und effiziente Programmiersprache zeigt die Go-Sprache auch ihren einzigartigen Charme bei der Verarbeitung von Datenstrukturen. Datenstruktur ist ein Grundkonzept der Informatik, das darauf abzielt, Daten so zu organisieren und zu verwalten, dass sie effizienter abgerufen und bearbeitet werden können. Indem wir uns eingehend mit den Geheimnissen der Datenstruktur der Go-Sprache befassen, können wir besser verstehen, wie Daten gespeichert und verarbeitet werden, und so die Programmiereffizienz und Codequalität verbessern. 1. Array Array ist eine der einfachsten Datenstrukturen

PHP-SPL-Datenstrukturen: Bringen Sie Geschwindigkeit und Flexibilität in Ihre Projekte PHP-SPL-Datenstrukturen: Bringen Sie Geschwindigkeit und Flexibilität in Ihre Projekte Feb 19, 2024 pm 11:00 PM

Überblick über die PHPSPL-Datenstrukturbibliothek Die PHPSPL-Datenstrukturbibliothek (Standard PHP Library) enthält eine Reihe von Klassen und Schnittstellen zum Speichern und Bearbeiten verschiedener Datenstrukturen. Zu diesen Datenstrukturen gehören Arrays, verknüpfte Listen, Stapel, Warteschlangen und Mengen, von denen jede einen bestimmten Satz von Methoden und Eigenschaften zum Bearbeiten von Daten bereitstellt. Arrays In PHP ist ein Array eine geordnete Sammlung, die eine Folge von Elementen speichert. Die SPL-Array-Klasse bietet erweiterte Funktionen für native PHP-Arrays, einschließlich Sortierung, Filterung und Zuordnung. Hier ist ein Beispiel für die Verwendung der SPL-Array-Klasse: useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

Die auf Hash-Tabellen basierende Datenstruktur optimiert die Schnitt- und Vereinigungsberechnungen von PHP-Arrays Die auf Hash-Tabellen basierende Datenstruktur optimiert die Schnitt- und Vereinigungsberechnungen von PHP-Arrays May 02, 2024 pm 12:06 PM

Die Hash-Tabelle kann zur Optimierung von PHP-Array-Schnittpunkt- und Vereinigungsberechnungen verwendet werden, wodurch die Zeitkomplexität von O(n*m) auf O(n+m) reduziert wird. Die spezifischen Schritte sind wie folgt: Verwenden Sie eine Hash-Tabelle, um die Elemente von zuzuordnen Wandeln Sie das erste Array in einen booleschen Wert um, um schnell herauszufinden, ob das Element im zweiten Array vorhanden ist, und um die Effizienz der Schnittpunktberechnung zu verbessern. Verwenden Sie eine Hash-Tabelle, um die Elemente des ersten Arrays als vorhanden zu markieren, und fügen Sie dann die Elemente des zweiten Arrays nacheinander hinzu, wobei Sie vorhandene Elemente ignorieren, um die Effizienz der Vereinigungsberechnungen zu verbessern.