ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Σχετικά έγγραφα
υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Σημειώσεις ένατης εβδομάδας

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Φροντιςτήριο. Linked-List

Δομές Δεδομένων & Αλγόριθμοι

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Προγραμματισμός. Linked Lists

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Προγραμματισμός. Linked Lists

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

C: Από τη Θεωρία στην Εφαρμογή

Προγραµµατισµός. Linked Lists

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

Σημειώσεις όγδοης εβδομάδας

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Σημειώσεις έκτης και έβδομης εβδομάδας

Φροντιστήριο 4 Σκελετοί Λύσεων

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Εργαστήριο 5: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Διπλά Συνδεδεμένη Λίστα

Σε μια στοίβα 10 θέσεων έχουν τοποθετηθεί διαδοχικά τα στοιχεία: Σ, Γ, Μ, Α, Δ στην 1η, 2η, 3η, 4η και 5η θέση αντίστοιχα. Να προσδιορίσετε την τιμή

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Βασικές Δομές Δεδομένων

Τμήμα Πληροφορικής & Επικοινωνιών

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

υναµικές οµές εδοµένων

Δομές Δεδομένων Ενότητα 4

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις

ιαφάνειες παρουσίασης #5 (β)

Στοίβες με Δυναμική Δέσμευση Μνήμης

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Βασικές Έννοιες Δοµών Δεδοµένων

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Οι δομές δεδομένων στοίβα και ουρά

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Οντοκεντρικός Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Βασικές οµές εδοµένων

ιαφάνειες παρουσίασης #11

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ιαφάνειες παρουσίασης #6 (α)

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο 3 : εδοµένα. Πίνακες Στοίβα Ουρά Αναζήτηση Ταξινόµηση. Προγράµµατα

Διδάσκων: Παναγιώτης Ανδρέου

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

Δομές Δεδομένων & Αλγόριθμοι

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

3 ΟΥ και 9 ΟΥ ΚΕΦΑΛΑΙΟΥ

IsEmptyList(L): επιστρέφει true αν L = < >, false

Τμήμα Πληροφορικής & Επικοινωνιών

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Στοίβες Ουρές - Λίστες

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in First-Out, FIFO, στην οποία το κάθε στοιχείο που εισάγεται πρώτο, θα εξαχθεί επίσης πρώτο. Τα νεοεισερχόμενα στοιχεία τοποθετούνται στο τέλος της ουράς ενώ απαιτούνται δύο δείκτες για τον προσδιορισμό του πρώτου και του τελευταίου στοιχείου: ο FRONT και ο REAR. Μια ουρά μπορεί εύκολα να υλοποιηθεί είτε με πίνακες ή με λίστες. Οι ακόλουθες εικόνες παρουσιάζουν ένα παράδειγμα υλοποίησης μιας ουράς με τη βοήθεια ενός πίνακα καθώς επίσης και της μεταβολής της κατά την εισαγωγή και εξαγωγή ενός στοιχείου. Κατά την εισαγωγή ενός στοιχείου μεταβάλλεται ο δείκτης REAR ενώ κατά την εξαγωγή μεταβάλλεται ο δείκτης FRONT. Σε κάθε περίπτωση, πριν την εισαγωγή ενός στοιχείου θα πρέπει να γίνεται έλεγχος ώστε να μην έχει γεμίσει η ουρά (overflow - υπερχείλιση). Ομοίως, πριν την εξαγωγή ενός στοιχείου, θα πρέπει να ελέγχουμε αν υπάρχουν στοιχεία μέσα στην ουρά (underflow υποχείλιση). Υποχείλιση έχουμε όταν FRONT=REAR=-1. Οι αλγόριθμοι εισαγωγής και εξαγωγής στοιχείων από την ουρά έχουν ως ακολούθως: Code 1

(Υλοποιεί με τη χρήση ξεχωριστών συναρτήσεων όλες τις λειτουργίες σε μια ουρά υλοποίηση με πίνακα) #include <stdio.h> #include <conio.h> #define MAX 10 // Changing this value will change length of array int queue[max]; int front = -1, rear = -1; void insert(void); int delete_element(void); int peek(void); void display(void); int main() int option, val; do printf("\n\n ***** MAIN MENU *****"); printf("\n 1. Insert an element"); printf("\n 2. Delete an element"); printf("\n 3. Peek"); printf("\n 4. Display the queue"); printf("\n 5. EXIT"); printf("\n Enter your option : "); scanf("%d", &option); switch(option) case 1: insert(); case 2: val = delete_element(); if (val!= -1) printf("\n The number deleted is : %d", val); case 3: val = peek(); if (val!= -1) printf("\n The first value in queue is : %d", val); case 4: display(); while(option!= 5); getch(); return 0;

void insert() int num; printf("\n Enter the number to be inserted in the queue : "); scanf("%d", &num); if(rear == MAX-1) printf("\n OVERFLOW"); if(front == -1 && rear == -1) front = rear = 0; rear++; queue[rear] = num; int delete_element() int val; if(front == -1 front>rear) printf("\n UNDERFLOW"); return -1; val = queue[front]; front++; if(front > rear) front = rear = -1; return val; int peek() if(front==-1 front>rear) printf("\n QUEUE IS EMPTY"); return -1; return queue[front]; void display()

int i; printf("\n"); if(front == -1 front > rear) printf("\n QUEUE IS EMPTY"); for(i = front;i <= rear;i++) printf("\t %d", queue[i]); Το μειονέκτημα της χρήσης των πινάκων είναι γνωστό πως αφορά στο σταθερό τους μέγεθος. Αν όμως δεν μπορούμε να γνωρίζουμε εκ των προτέρων το μέγεθος μιας ουράς, τότε η καλύτερη λύση είναι να χρησιμοποιήσουμε υλοποίηση με λίστες. Οι λίστες βολεύουν ιδιαίτερα όταν η ουρά πρόκειται να έχει μεγάλο μέγεθος. Στην υλοποίηση με λίστες, κάθε κόμβος έχει τα δεδομένα καθώς και το δείκτη προς τον επόμενο κόμβο. Ο πρώτος κόμβος είναι ο FRONT ενώ σε σχέση με την υλοποίηση μιας απλής συνδεδεμένης λίστας, υιοθετούμε ακόμα ένα δείκτη προς τον τελευταίο κόμβο τον REAR. Όλες οι εισαγωγές γίνονται στο τέλος ενώ οι εξαγωγές στην αρχή (μπορούμε να υιοθετήσουμε τις κατάλληλες συναρτήσεις που μελετήσαμε στο προηγούμενο εργαστήριο). Η ακόλουθη εικόνα παρουσιάζει ένα παράδειγμα διαχείρισης μιας ουράς με τη βοήθεια μιας λίστας: Ακολουθούν οι αλγόριθμοι εισαγωγής και εξαγωγής ενός στοιχείου από μια ουρά.

Code 2 (Υλοποιεί με τη χρήση ξεχωριστών συναρτήσεων όλες τις λειτουργίες σε μια ουρά υλοποίηση με λίστα) /*Queue - Linked List implementation*/ #include<stdio.h> #include<stdlib.h> struct Node int data; struct Node* next; ; // Two glboal variables to store address of front and rear nodes. struct Node* front = NULL; struct Node* rear = NULL; // To Enqueue an integer void Enqueue(int x) struct Node* temp = (struct Node*)malloc(sizeof(struct Node)); temp->data =x; temp->next = NULL; if(front == NULL && rear == NULL) front = rear = temp; return; rear->next = temp; rear = temp; // To Dequeue an integer. void Dequeue() struct Node* temp = front; if(front == NULL) printf("queue is Empty\n"); return; if(front == rear) front = rear = NULL; front = front->next; free(temp); int Front() if(front == NULL) printf("queue is empty\n"); return 0; return front->data; void Print() struct Node* temp = front;

while(temp!= NULL) printf("%d ",temp->data); temp = temp->next; printf("\n"); int main() /* Drive code to test the implementation. */ // Printing elements in Queue after each Enqueue or Dequeue Enqueue(2); Print(); Enqueue(4); Print(); Enqueue(6); Print(); Dequeue(); Print(); Enqueue(8); Print();