Programmeringskonst - Stacken och Kön
Innehållsförteckning
- Introduktion till staplar och köer
- Introduktion till listor
- Listor som grund för staplar och köer
- Stapel - Definition och funktioner
- Push-funktionen
- Pop-funktionen
- Top-funktionen
- Fullständig kodexempel för stapel
- Kö - Definition och funktioner
- Enqueue-funktionen
- Dequeue-funktionen
- Front- och Rear-funktioner
- Exempelkod för kö
- Staplar och köer i praktiken
- Vanliga tillämpningar av staplar och köer
- Fördelar och nackdelar med staplar och köer
- Slutsats
- Resurser och referenser
📚 Introduktion till staplar och köer
Staplar och köer är två vanliga behållare inom datalogi som tillåter oss att lagra och hantera grupper av element. Dessa strukturer, baserade på listor, möjliggör specifik och begränsad åtkomst till data och används inom en mängd olika program. I denna artikel kommer vi att utforska staplar och köer mer grundligt och lära oss hur vi kan implementera dem i våra egna program. Vi kommer att undersöka deras definitioner, funktioner och tillämpningar samt diskutera fördelarna och nackdelarna med att använda dem. Låt oss börja genom att få en grundläggande förståelse för listor som ligger till grund för både staplar och köer.
📚 Introduktion till listor
Listor är en vanlig typ av datastruktur som möjliggör gruppering av individuella dataelement. De kan vara implementerade som antingen en array eller en sekvens av länkade strukturer. Genom att gruppera dataelement kan vi arbeta med dem som en helhet eller som separata element. Med hjälp av listor kan vi enkelt lagra och hämta data samt utföra olika operationer på den.
📚 Listor som grund för staplar och köer
Staplar och köer är två typer av behållare som bygger på listor. Vad som gör dem unika är deras åtkomstpunkter och hur de fungerar när det gäller att hantera data. Låt oss först titta på stapeln och hur den skiljer sig från en vanlig lista.
📚 Stapel - Definition och funktioner
En stapel är en enkel struktur inom programmering som följer ett LIFO (last in, first out) -principen. Det betyder att det element som senast lades till i stapeln kommer att vara det första som tas bort. Till skillnad från en vanlig lista, där alla element är synliga och åtkomliga, är bara det översta elementet i stapeln synligt och åtkomligt. Resten av elementen, som ligger nedanför, är i stort sett osynliga och oåtkomliga för resten av programmet.
För att implementera en stapel behöver vi bara erbjuda tre grundläggande funktioner: push, pop och top. Push är funktionen som lägger till ett nytt element på toppen av stapeln. När vi vill hämta ett element från stapeln använder vi funktionen pop, som tar bort det översta elementet fysiskt och gör det underliggande elementet synligt. Slutligen ger top-funktionen oss möjligheten att se vilket element som ligger överst i stapeln utan att ta bort det.
För att bättre förstå detta, låt oss ta en titt på koden för en enkel stapelimplementation.
// Kodbild för stapel
STORLEK = 100 // Maximalt antal element som stapeln kan lagra
def initiera_stapel():
"""
Initierar stapelstrukturen.
"""
global stack, topp, antal_element
stack = [None] * STORLEK // Skapar en tom array med storleken STORLEK
topp = -1 // Börjar med toppen av stapeln vid -1
antal_element = 0 // Antalet element i stapeln
def push(element):
"""
Lägger till ett element på toppen av stapeln.
"""
global stack, topp, antal_element
if antal_element == STORLEK:
raise Exception("Stapeln är full")
else:
topp += 1
stack[topp] = element
antal_element += 1
def pop():
"""
Tar bort och returnerar det översta elementet från stapeln.
"""
global stack, topp, antal_element
if antal_element == 0:
raise Exception("Stapeln är tom")
else:
element = stack[topp]
topp -= 1
antal_element -= 1
return element
def top():
"""
Returnerar det översta elementet på stapeln utan att ta bort det.
"""
global stack, topp
if topp == -1: // Kontrollerar om stapeln är tom
raise Exception("Stapeln är tom")
else:
return stack[topp]
📚 Kö - Definition och funktioner
En kö är en annan typ av behållare som används för att modellera en begränsad åtkomstdatastruktur. Kö används vanligtvis när det finns en skillnad mellan matningshastigheten och bearbetningshastigheten, där matningshastigheten för inkommande data kan överstiga bearbetningshastigheten. Könsystemet fungerar enligt FIFO (first in, first out) -principen, vilket innebär att det första elementet som placerades in i kön kommer att tas bort först.
För att implementera en kö behöver vi två grundläggande funktioner: enqueue (NQ) och dequeue (DEC). Enqueue lägger till ett element i kön, vilket placerar det i slutet av kön. Dequeue tar bort och returnerar det första elementet i kön. Kön har också två extra funktioner, front och rear, som ger oss en titt på de element som ligger i början och slutet av kön utan att ta bort dem.
Låt oss titta på ett exempel på hur man implementerar en enkel köstruktur.
# Kodbild för kö
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Queue:
def __init__(self):
self.front = None
self.rear = None
self.count = 0
def enqueue(self, data):
new_node = Node(data)
if self.rear is None:
self.front = new_node
self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
self.count += 1
def dequeue(self):
if self.front is None:
raise Exception("Kön är tom")
else:
data = self.front.data
self.front = self.front.next
if self.front is None:
self.rear = None
self.count -= 1
return data
def front(self):
if self.front is None:
raise Exception("Kön är tom")
else:
return self.front.data
def rear(self):
if self.rear is None:
raise Exception("Kön är tom")
else:
return self.rear.data
📚 Staplar och köer i praktiken
Staplar och köer är värdefulla verktyg som kan användas för att lösa en mängd olika programproblemet. Här är några exempel på användning av staplar och köer i praktiken:
-
Staplar
- Namnsättning av underprogram och returadresser i datorprogram.
- Vända ordning på datasekvenser, som utförs med hjälp av rekursion.
- Kontroll av balanseringen av parenteser och andra symboler inom programmering.
- Historikhantering för webbläsare och ångra-funktioner.
- Utförande av djup först-sökningar och bakåtspårning i algoritmer.
-
Köer
- Styrning av processer i fleranvändarsystem.
- Hantering av meddelanden och uppgifter i kösystem.
- Bearbetning av dataströmmar, t.ex. i videospelfabriker.
- Klienthantering i datorsimuleringar och simulering av köer.
- Utskriftsköhantering för datornätverk.
📚 Vanliga tillämpningar av staplar och köer
Staplar och köer har en lång lista över användningsområden inom programutveckling och datalogi. Här är några vanliga användningsområden för dessa datastrukturer:
-
Staplar
- Minimalistisk navigering och återgångshantering i webbläsare och applikationer.
- Textredigering och formatering, t.ex. genom att använda formateringsstapel i textredigerare.
- Omvänd polsk notation (RPN) för att beräkna matematiska uttryck.
- Används vid rekursion och återgång av funktioner.
- Backtracking-algoritmer som djup först-sökning (DFS).
-
Köer
- Köhantering för att styra processer och trådar i operativsystem.
- Hantering av arbetsuppgifter och meddelanden i köbaserade system.
- Buffring och dataflödeshantering i kommunikationssystem och datastrukturer för dataflöde.
- Schemaläggning av processer och uppgifter i industriell automatisering.
- Könshantering i klienttjänster och supportsystem.
📚 Fördelar och nackdelar med staplar och köer
Precis som alla datastrukturer har både staplar och köer sina egna fördelar och nackdelar. Här är en översikt över några av de viktigaste fördelarna och nackdelarna med att använda staplar och köer:
Fördelar med staplar:
- Lätt att implementera och använda.
- Ger snabb access till det senast tillagda elementet.
- Kan användas för att vända ordningen på en sekvens.
- Används i rekursion och återgång av funktioner.
- Harmoniserar med LIFO-baserade algoritmer.
- Kan användas i djup först-sökning och åter-stegning.
Nackdelar med staplar:
- Ger ingen direkt åtkomst till andra element än det översta.
- Kräver linjärt minne och kan orsaka minnesutnyttjande i vissa fall.
- Kan vara känsligt för stackoverflow fel vid rekursion utan tillräcklig begränsning.
Fördelar med köer:
- Simulerar den faktiska hanteringen av objekt i en kö.
- Underlättar behandling av uppgifter i ordning.
- Används för att hantera processer och resursdelning i fleranvändarsystem.
- Implementeras effektivt i realtids- och kösystem.
- Används vid kommunikation och flöde av information.
Nackdelar med köer:
- Kan orsaka tidsfördröjningar för vissa processer på grund av könsstyrning.
- Kräver mer minne och beräkningsresurser än andra datastrukturer.
- Kan bli komplicerade och svårare att implementera vid hantering av prioriteringar.
- Kan vara mindre effektivt i system som kräver hög kapacitet och snabb bearbetning.
📚 Slutsats
Staplar och köer är två mycket användbara och kraftfulla datastrukturer som kan användas för att lösa en mängd olika programmeringsproblem. Med staplar kan vi enkelt vända ordning på en sekvens, hantera parentesuttryck och implementera historikhantering. Köer å andra sidan möjliggör hantering av processer, hantering av meddelanden och utförande av flera uppgifter enligt FIFO-principen.
Genom att förstå hur staplar och köer fungerar och kunna implementera dem i våra program öppnar vi upp för många möjligheter att lösa problem på ett effektivt sätt. Oavsett om det handlar om att bearbeta dataströmmar, hantera köhanteringssystem eller optimera algoritmer, är staplar och köer värdefulla verktyg att ha i vår programmeringsverktygslåda.
🔗 Resurser och referenser