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

Preview:

Citation preview

Ουρά Στοίβα

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

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

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

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

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

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

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

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

Στοίβα[6]

84

62

253

5

4

3

2

1

6

κορυφή

39

2013

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

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

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

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

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

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

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

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

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

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

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

723 51

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

1 2 3 4 5 6 7

508 8

F R

438

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

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

ΑλγόριθμοςΑλγόριθμος Εισαγωγή_σε_ουρά Εισαγωγή_σε_ουρά ΔεδομέναΔεδομένα //ουρά, Ν, //ουρά, Ν, 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////Τέλος Τέλος Εξαγωγή_από_ουράΕξαγωγή_από_ουρά

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

Recommended