Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

14

Transcript of Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Page 1: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"
Page 2: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Ουρά Στοίβα

Page 3: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Η στοίβα (stack) και η ουρά (queue), είναι από τις πιο σπουδαίες δομές δεδομένων στον προγραμματισμό εφαρμογών.

Στο περιβάλλον της «ΓΛΩΣΣΑΣ», υλοποιούνται με πίνακες, οι οποίοι γεμίζουν και προσπελαύνονται με συγκεκριμένη χρήση των δεικτών στα στοιχεία.

Χρησιμοποιούνται σε εφαρμογές, όπως: διαχείριση ουράς σε ταμεία, λιμάνια, αποθήκες προϊόντων, συνεργεία αυτοκινήτων ή άλλες ουρές αναμονής, εσωτερικά στο λειτουργικό σύστημα, σε παιχνίδια, αναδρομικές κλήσεις συναρτήσεων/διαδικασιών κλπ.

Page 4: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Είναι ένας μονοδιάστατος πίνακας, που τον σκεφτόμαστε σαν μια πραγματική στοίβα πραγμάτων, το ένα επάνω στο άλλο, όπως μια στοίβα με πιάτα.

Κορυφή, είναι μια μεταβλητή που αποθηκεύει τη θέση του επάνω στοιχείου της στοίβας (δηλ. του πιο πρόσφατα τοποθετημένου).

Η μέθοδος προσπέλασης στα στοιχεία, ονομάζεται L.I.F.O. (Last In First Out), δηλ. αυτό που τοποθετήσαμε τελευταίο, είναι το πρώτο που θα εξάγουμε προς χρήση.

Page 5: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Ωθούμε (push) ένα νέο στοιχείο στη στοίβα, εισάγοντάς το πάντα στην κορυφή, προσέχοντας να υπάρχει διαθέσιμη θέση (αλλιώς έχουμε υπερχείλιση - overflow). Πριν την εισαγωγή, αυξάνουμε την κορυφή κατά 1.

Απωθούμε (pop) ένα στοιχείο προς χρήση, εξάγοντάς το πάντα από την κορυφή, προσέχοντας να υπάρχει ένα τουλάχιστον (αλλιώς έχουμε υποχείλιση - underflow). Μετά μειώνουμε την κορυφή κατά 1.

Page 6: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Στοίβα[6]

84

62

253

5

4

3

2

1

6

κορυφή

39

2013

Page 7: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

ΠΡΟΣΟΧΗ Η διαδικασία της ώθησης πρέπει

οπωσδήποτε να ελέγχει, αν η στοίβα είναι γεμάτη, οπότε λέγεται ότι συμβαίνει υπερχείλιση της στοίβας. Αντίστοιχα, η διαδικασία απώθησης ελέγχει, αν υπάρχει ένα τουλάχιστον στοιχείο στη στοίβα, δηλαδή ελέγχει αν γίνεται υποχείλιση της στοίβας.

Page 8: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

ΑλγόριθμοςΑλγόριθμος Ώθηση_push ΔεδομέναΔεδομένα //στοίβα, Ν, κορυφή, στοιχείο// ΑνΑν κορυφή < Ν τότετότε κορυφή κορυφή+1 στοίβα[ κορυφή ] στοιχείο status αληθήςαληθής ΑλλιώςΑλλιώς status ψευδήςψευδής Τέλος_ανΤέλος_αν ΑποτελέσματαΑποτελέσματα //στοίβα, κορυφή, status//ΤέλοςΤέλος Ώθηση_push

ΑλγόριθμοςΑλγόριθμος Απώθηση_pop ΔεδομέναΔεδομένα //στοίβα, κορυφή//

ΑνΑν κορυφή >= 1 τότετότε στοιχείο στοίβα[ κορυφή ] κορυφή κορυφή - 1 status αληθήςαληθής ΑλλιώςΑλλιώς status ψευδήςψευδής Τέλος_ανΤέλος_αν ΑποτελέσματαΑποτελέσματα //στοίβα, κορυφή, status, στοιχείο//ΤέλοςΤέλος Απώθηση_pop

Page 9: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Είναι επίσης ένας μονοδιάστατος πίνακας Χρειάζονται δύο δείκτες (μεταβλητές)

ορίων της ουράςΓια την αρχή (front) Για το τέλος (rear) της ουράς

Η μέθοδος προσπέλασης στα στοιχεία, ονομάζεται F.I.F.O. (First In First Out), δηλ. όποιο στοιχείο εισάγεται πρώτο στην ουρά, εξάγεται (εξυπηρετείται) και πρώτο

Page 10: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Όπως και σε μια συνηθισμένη ουρά αναμονής, οι λειτουργίες είναι :Η εισαγωγή (enqueue) στοιχείου πάντα στο

τέλος της ουράς, προσέχοντας να υπάρχει διαθέσιμη θέση. Πριν την εισαγωγή, αυξάνουμε την rear. Αν φτάσουμε στο τέλος, τα μεταφέρουμε όλα προς την αρχή ώστε να αδειάσει χώρος στο τέλος

Η εξαγωγή (dequeue) στοιχείου πάντα από την αρχή της ουράς, προσέχοντας να υπάρχει διαθέσιμο στοιχείο. Μετά, αυξάνουμε την front

Page 11: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

723 51

Ουρά[7]Ουρά[7]

1 2 3 4 5 6 7

508 8

F R

438

Page 12: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

ΠΡΟΣΟΧΗ Σε κάθε περίπτωση όμως,

πρέπει να ελέγχεται πριν από οποιαδήποτε ενέργεια, αν υπάρχει ελεύθερος χώρος στον πίνακα για την εισαγωγή και αν υπάρχει ένα τουλάχιστον στοιχείο για την εξαγωγή

Page 13: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

ΑλγόριθμοςΑλγόριθμος Εισαγωγή_σε_ουρά Εισαγωγή_σε_ουρά ΔεδομέναΔεδομένα //ουρά, Ν, //ουρά, Ν, rearrear, , στοιχείο//στοιχείο// ΑνΑν rearrear < Ν < Ν τότετότε rearrear rear rear ++ 11 ουρά[ ουρά[ rear rear ] ] στοιχείο στοιχείο statusstatus αληθήςαληθής ΑλλιώςΑλλιώς statusstatus ψευδήςψευδής Τέλος_ανΤέλος_αν ΑποτελέσματαΑποτελέσματα //ουρά, //ουρά, rearrear, , statusstatus////Τέλος Τέλος Εισαγωγή_σε_ουράΕισαγωγή_σε_ουρά

ΑλγόριθμοςΑλγόριθμος Εξαγωγή_από_ουρά Εξαγωγή_από_ουρά ΔεδομέναΔεδομένα //ουρά, //ουρά, front, rearfront, rear//// ΑνΑν front <= rearfront <= rear τότετότε στοιχείο στοιχείο ουρά[ ουρά[ front front ] ] front front front front ++ 1 1 status status αληθήςαληθής ΑλλιώςΑλλιώς status status ψευδήςψευδής Τέλος_ανΤέλος_αν ΑποτελέσματαΑποτελέσματα //ουρά, //ουρά, frontfront, , στοιχείο,στοιχείο, statusstatus////Τέλος Τέλος Εξαγωγή_από_ουράΕξαγωγή_από_ουρά

Page 14: Παρουσίαση Ουράς και Στοίβας για τη "Γλώσσα"

Σας ευχαριστώ για την προσοχή και την υπομονή σας.