Η ουρά (queue) είναι μια γραμμική δομή δεδομένων που ακολουθεί την αρχή FIFO (First In, First Out). Αυτό σημαίνει ότι το πρώτο στοιχείο που προστέθηκε είναι το πρώτο που θα αφαιρεθεί.
Η υλοποίηση της ουράς γίνεται με μονοδιάστατο πίνακα. Η αρχή και το τέλος της ουράς παρακολουθούνται με τους δείκτες front και rear.
Η ουρά μπορεί να υλοποιηθεί με δύο κύριους τρόπους:
Χρησιμοποιείται ένας στατικός μονοδιάστατος πίνακας για την αποθήκευση των στοιχείων. Η αρχή και το τέλος της ουράς παρακολουθούνται με τους δείκτες front και rear.
Κάθε κόμβος περιέχει ένα στοιχείο και έναν δείκτη στον επόμενο κόμβο. Η αρχή είναι ο πρώτος κόμβος και το τέλος είναι ο τελευταίος κόμβος.
Παραστάσεις μιας ουράς με τρία στοιχεία: 3 (αρχή), 5, 7 (τέλος).
Παρακάτω παρουσιάζονται οι αλγόριθμοι για τις βασικές λειτουργίες μιας ουράς χρησιμοποιώντας την ψευδογλώσσα ΓΛΩΣΣΑ.
Αλγόριθμος Εισαγωγή
Δεδομένα // queue, front, rear, size, item
αν rear < size τότε
rear ← rear + 1
queue[rear] ← item
overflow ← ψευδής
αλλιώς
overflow ← αληθής
τέλος_αν
Αποτελέσματα // front, rear, overflow, queue
Τέλος Εισαγωγή
Αλγόριθμος Αφαίρεση
Δεδομένα // queue, front, rear, underflow
αν front <= rear τότε
underflow ← ψευδής
item ← queue[front]
front ← front + 1
αλλιώς
underflow ← αληθής
τέλος_αν
Αποτελέσματα // front, rear, underflow, queue, item
Τέλος Αφαίρεση
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_Ουράς
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ουρά[5], Front, Rear, Επιλογή, Στοιχείο
ΑΡΧΗ
Front ← 1
Rear ← 0
ΓΡΑΨΕ '1: Εισαγωγή (Enqueue), 2: Αφαίρεση (Dequeue), 3: Έξοδος'
ΔΙΑΒΑΣΕ Επιλογή
ΟΣΟ Επιλογή ≠ 3 ΕΠΑΝΑΛΑΒΕ
ΑΝ Επιλογή = 1 ΤΟΤΕ
! --- ΚΩΔΙΚΑΣ ΕΙΣΑΓΩΓΗΣ (ENQUEUE) ---
ΑΝ Rear < 5 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε στοιχείο για εισαγωγή:'
ΔΙΑΒΑΣΕ Στοιχείο
Rear ← Rear + 1
Ουρά[Rear] ← Στοιχείο
ΓΡΑΨΕ 'Το στοιχείο ', Στοιχείο, ' εισήχθη επιτυχώς.'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αδυναμία εισαγωγής: Υπερχείλιση (Η ουρά είναι γεμάτη)!'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ_ΑΝ Επιλογή = 2 ΤΟΤΕ
! --- ΚΩΔΙΚΑΣ ΑΦΑΙΡΕΣΗΣ (DEQUEUE) ---
ΑΝ Front <= Rear ΤΟΤΕ
Στοιχείο ← Ουρά[Front]
Front ← Front + 1
ΓΡΑΨΕ 'Εξήχθη το στοιχείο: ', Στοιχείο
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αδυναμία εξαγωγής: Υποχείλιση (Η ουρά είναι άδεια)!'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λανθασμένη επιλογή. Ξαναπροσπάθησε.'
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ '1: Εισαγωγή (Enqueue), 2: Αφαίρεση (Dequeue), 3: Έξοδος'
ΔΙΑΒΑΣΕ Επιλογή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Ερώτηση 1: Ποια είναι η αρχή λειτουργίας μιας ουράς;
Ερώτηση 2: Ποιο σφάλμα προκύπτει όταν προσπαθούμε να προσθέσουμε ένα στοιχείο σε μια γεμάτη ουρά;
Ερώτηση 3: Ποιοι δείκτες χρησιμοποιούνται για να παρακολουθούνται η αρχή και το τέλος μιας ουράς υλοποιημένης με μονοδιάστατο πίνακα;
Ερώτηση 4 (Θεωρητική): Ποια είναι η διαφορά μεταξύ μιας ουράς και μιας στοίβας;
Ερώτηση 5 (Θεωρητική): Ποια από τις παρακάτω λειτουργίες ΔΕΝ είναι βασική λειτουργία μιας ουράς;
Ερώτηση 6 (Θεωρητική): Ποιες από τις παρακάτω δομές δεδομένων χρησιμοποιούν την αρχή FIFO;
Πελάτες[100] για την αποθήκευση των αριθμών προτεραιότητας.Front και Rear για να παρακολουθείτε την αρχή και το τέλος της ουράς.Rear < 100. Αν ναι, διαβάστε τον αριθμό προτεραιότητας και αυξήστε τον δείκτη Rear.Front <= Rear. Αν ναι, εμφανίστε τον αριθμό προτεραιότητας του πελάτη στην αρχή και αυξήστε τον δείκτη Front.ΟΣΟ για να συνεχίζετε την επανάληψη μέχρι ο χρήστης να επιλέξει Έξοδος.Παρακολουθήστε πώς λειτουργούν οι βασικές λειτουργίες μιας ουράς (Εισαγωγή και Αφαίρεση) με οπτικοποίηση.