ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ Κωδικός Θ: ΤΠ3001, Κωδικός Ε: ΤΠ3101 (ΜΕΥ/Υ) Ώρες (Θ - Ε): 4-2 Προαπαιτούμενα: Δρ. ΒΙΔΑΚΗΣ ΝΙΚΟΣ
ΕΡΓΑΣΤΗΡΙΟ 7 Ουρά (Queue)
Queue Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 3
Queue Introduction Queue is charecterised by fact that additions are made at the end, or tail, of the queue while removals are made from the front, or head, of the queue. Is a first in, first out (FIFO) data structure. Is characterised by only two fundamental operations enqueue and dequeue. As an example, queue is used: Load queue of processes in operating systems. SMTP e-mail servers to process incoming and outgoing e-mail into a FIFO buffer. etc. The enqueue operation adds to the end of the queue, or initializing the queue if it is empty. The dequeue operation removes an item from the front of the queue, or results in an empty queue. Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 4
Queue Code descrtion: Queue is an data structure in which we are using two methods, to put an object in the queue(enqueue) and to get an object from the queue(dequeue). Before we get an object from the queue(dequeue), we have to check, if the queue is empty. We have to check, if the queue if full before we put any object to the queue. Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 5
Queue data structure working sequence Working of Queue: Ας θεωρήσουμε το array A[0],A[1],A[2]... A[n-1],A[n] είναι η ουρά μας με πρώτο στοιχείο το A[0] και τελευταίο είναι το A[n]. Και έχουμε δύο μεταβλητές σαν δείκτες, όπου ο ένας θα κρατάει σε ποιο στοιχείο μπορούμε να τοποθετήσουμε στοιχείο στο πίνακα(έστω το p)και ο άλλος θα δείχνει ποιο στοιχείο παίρνουμε από τον πίνακα(έστω το k). Βήματα enqueue και dequeue(το p πρέπει να είναι πάντα p<=k ή αντιστροφά ανάλογα από ποια πλευρά είναι η είσοδος και η έξοδος της ουράς.) Εnqueue: 1.Compare p and n. 2.If p==n the queue is full, else put the object to the array and p=p-1. Dequeue: 1.Compare p and k. 2.If p==k the queue is empty,else get the object from the array and k=k+1. Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 6
Ξεκίνημα Queue Working with Queue Example qinsert(a) A qinsert(b) A B qinsert(c) A B C qremove( ) A B C qinsert(d) A B C D qremove( ) A B C D qremove( ) A B C D qremove( ) A B C D Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 7 Ξεζωνάκης ΚΕΦΑΛΑΙΟ 6 ΟΥΡΕΣ σχήμα 6.2
Queue Working with Queue Example Example array values: 12, 9, 4, 99, 120 1.enqueue(12) empty queue 2. enqueue(9) 12 3. dequeue( ) 9 12 4. enqueue(4) 9 5. enqueue(99) 4 9 6. enqueue(120) 99 4 9 7. dequeue() 120 99 4 9 8. dequeue() 120 99 4 9. dequeue() 120 99 10. dequeue() 120 empty queue Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 8
import java.io.*; import java.util.*; public class QueueImplement LinkedList<Integer> list; String str; int num; public static void main(string[] args) QueueImplement q = new QueueImplement(); public QueueImplement() try list = new LinkedList<Integer>(); InputStreamReader ir = new InputStreamReader (System.in); BufferedReader bf = new BufferedReader(ir); System.out.println("Enter number of elements : ") ; str = bf.readline(); if((num = Integer.parseInt(str)) == 0) System.out.println("You have entered either zer o/null."); System.exit(0); Queue Example code in Java else System.out.println("Enter elements : "); for(int i = 0; i < num; i++) str = bf.readline(); int n = Integer.parseInt(str); list.add(n); System.out.println("First element :" + list.remove First()); System.out.println("Last element :" + list.remove Last()); System.out.println("Rest elements in the list :"); while(!list.isempty()) System.out.print(list.remove() + "\t"); catch(ioexception e) System.out.println(e.getMessage() + " is not a le gal entry."); System.exit(0); Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 9
#include<stdio.h> #define N 6 int queue[n]=0; int rear=0,front=0; void insert(void); void del(void); void disp(void); void cre(void); Queue Example code in C (1/2) main() int user=0; while(user!=4) printf("\n\n\n\t\t\t THE SIZE OF QUEUE IS %d",n); printf("\n\t 1.INSERT"); printf("\n\t 2.DELETE"); printf("\n\t 3.DISPLAY"); printf("\n\t 4.EXIT"); printf("\n\t 5.CREATE\n"); scanf("%d",&user); switch(user) case 1: insert(); break; case 2: del(); break; case 3: disp(); break; case 4: printf("\n\t THANK U"); break; case 5: cre(); break; getchar(); getchar(); Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 10
void insert(void) int t; if(rear<n) printf("\n\t ENTER A VALUE IN QUEUE: "); scanf("%d",&t); queue[rear]=t; rear++; else printf("\n\t Q OVERFLOW!"); void del(void) int i; printf("\n\t %d gets deleted...",queue[front]); queue[front]=0; front++; Queue Example code in C (2/2) void disp(void) int i; for(i=front;i<rear;i++) printf("\n\t %d",queue[i]); void cre(void) int t; printf("\n\t ENTER A VALUE IN QUEUE: "); scanf("%d",&t); front=0; queue[front]=t; rear=front+1; Copyrights: http://www.dailyfreecode.com/code/simple-queuearray-2414.aspx Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 11
Visual Paradigms Concentric Stack Java Applet Queue in Java Applets Centre Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 12
Bibliography http://www.wikedia.org http://hamilton.bell.ac.uk/swdev2/notes/notes_13.pdf http://www.concentric.net/~ttwang/java/queuedemo.html http://www.cosc.canterbury.ac.nz/mukundan/dsal/cqueueappl.html Σημειώσεις Θεωρίας Δομές Δεδομένων και Αλγόριθμοι (Ξεζωνάκης) Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 13
Ασκήσεις Άσκηση 1 Επιβάτες φτάνουν στο εκδοτήριο εισιτηρίων ενός λιμανιού. Υπάρχει ένα ταμείο ανοικτό. Κάθε επιβάτης παρουσιάζεται με ένα νούμερο το οποίο είναι ο αριθμός προτεραιότητας! Όσο μικρότερος ο αριθμός τόσο ποιο νωρίς αναχωρεί το πλοίο του επιβάτη και άρα θα πρέπει να εξυπηρετηθεί νωρίτερα. Ο υπάλληλος του εκδοτηρίου πρέπει να ξέρει να κάνει με τρόπο αποδοτικό: Αναζήτηση του ελάχιστου στην ουρά προτεραιότητας (με την μέθοδο του sorting) Διαγραφή ενός στοιχείου από την ουρά Εισαγωγή ενός νέου στοιχείου στην ουρά Παρατηρήσεις Θα πρέπει να δημιουργήσετε ένα μονοδιάστατο πίνακα τον οποίο θα γεμίσετε με τυχαίους διακριτούς ακεραίους. Ο πίνακας αυτός θα προσομοιάζει την ουρά επιβατών που περιμένουν στο εκδοτήριο (ουρά αναμονής). Αφού η ουρά αναμονής γεμίσει θα πρέπει κάθε επιβάτης που εξυπηρετείτε να διαγράφεται από την ουρά αναμονής και να εισάγεται σε άλλη ουρά Μάθημα: Δομές Δεδομένων & Αλγόριθμοι (Εργαστήριο) Καθηγητής: Δρ. Βιδάκης Νίκος Slide 14