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

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

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

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

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

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

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

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

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

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

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

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

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

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

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

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

Ιδιοκτησία Αντικειµένου

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

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

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

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

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

4. Συνδεδεμένες Λίστες

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

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

Προγραμματισμός Δομές Δεδομένων

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

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

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

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

Αναδρομικοί Αλγόριθμοι

Διδάσκων: Κωνσταντίνος Κώστα

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 9: Ειδικά θέματα Δομών Δεδομένων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

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

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

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

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

Transcript:

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Λίστες -Υλοποίηση ταξινομημένης λίστας με δυναμική δέσμευση μνήμης ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Παράδειγμα ταξινομημένης λίστας 2 3 1 Λίστα L 5 4 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες Μία λίστα μπορεί να υλοποιηθεί ως μια συνδεδεμένη λίστα (με παρόμοιο τρόπο όπως μια στοίβα). LIST Size=3 head data next data next data next NULL node node node Πιθανές δηλώσεις κόμβων είναι(χρησιμοποιείται intαντί για type): typedef struct node { int data; struct node *next; NODE; typedef struct list { NODE *head; int size; LIST; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Βοηθητική συνάρτηση: Δημιουργία κόμβου NODE* createlistnode(int x) data next newnode NULL NODE* createlistnode(int x){ NODE *newnode = NULL; newnode = (NODE*) malloc( sizeof(node) ); newnode->data = x; newnode->next = NULL; return newnode; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Πιο κάτω ορίζονται κάποιες χρήσιμες πράξεις. Εύρεση Κόμβου με συγκεκριμένο στοιχείο: bool existsnode(list *L, int x) bool existsnode(list *L, int x){ NODE* tmp = L->head; while( tmp!=null ) { if( tmp->data == x ) return true; tmp = tmp->next; return false; To p είναι ένα αντίγραφο της διεύθυνσης στην οποία δείχνει το L->head ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Με παρόμοιο τρόπο μπορούμε να ορίσουμε διαδικασία: NODE* findnode(list *L, int x); που επιστρέφει δείκτη προς κόμβο της λίστας που περιέχει το στοιχείο x, αν υπάρχει. NODE* findnode(list *L, int x){ NODE* tmp = L->head; while( tmp!=null ){ if( tmp->data == x ) return tmp; tmp = tmp->next; return NULL; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Ευθύγραμμες Απλά Συνδεδεμένες Λίστες(συν.) Εξαγωγή Κόμβου με συγκεκριμένη πληροφορία x : void deletenode(list *L, int x) LIST Size=3 head prev tmp 1 1 data next data next data next 2 node node node NULL 2 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Υλοποίηση της συνάρτησης Delete 1 2 3 1.Ο απλός τρόπος Node1 next = Node2 next Πιο είναι το πρόβλημα? --- Ο κόμβος Node2 παραμένει στην μνήμη X 2. Ο ΣΩΣΤΟΣ τρόπος (απελευθέρωση αχρείαστης μνήμης) TempNode= Node2 Node1 next = Node2 next free(tempnode) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Υλοποίηση Ταξινομημένης Λίστας Δομές που θα χρειαστείτε: //easily change the implementation from int to other type, e.g., typedef double type; typedef int type; //The NODE data structure typedef struct node { type data; struct node *next; NODE; //The LIST data structure typedef struct list { NODE *head; int size; LIST; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Συναρτήσεις που πρέπει να υλοποιήσετε NODE* createlistnode(type x); void makeemptylist(list *L); bool isemptylist(list *L); void printlist(list *L); void insertnode(list *L, type x); void deletenode(list *L, type x); type deletemin(list *L); type deletemax(list *L); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Λύσεις NODE* createlistnode(int x){ NODE *newnode = NULL; newnode = (NODE*) malloc( sizeof(node) ); newnode->data = x; newnode->next = NULL; return newnode; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Λύσεις (συν.) void makeemptylist(list *L) { L->size = 0; L->head = NULL; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

Λύσεις (συν.) bool IsEmpty(LIST *L) { return (L->size == 0); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13

Λύσεις (συν.) void printlist(list *L) { NODE* tmp = L->head; for(int i=0; i<l->size; i++){ printf("%d ", tmp->data); tmp = tmp->next; printf("\n"); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Λύσεις (συν.) void insertnode(list *L, int x){ NODE *newnode = createlistnode(x); NODE *tmp = L->head; if( L->size==0 ) { L->head = newnode; else { if(tmp->data>newnode- >data){ newnode->next = tmp; L->head = newnode; break; else { while( (tmp!= NULL) ) { if(tmp->next == NULL) if(tmp->next- >data>newnode->data) break; tmp = tmp->next; newnode->next = tmp- >next; tmp->next = newnode; L->size++; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Λύσεις (συν.) void deletenode(list *L, int x){ NODE* tmp = L->head; NODE* previous = tmp; if(!isempty(l)){ if (L->head->data == x){ L->head = L->head->next; L->size--; free(tmp); else { while( tmp!=null ){ if( tmp->data == x ){ previous->next = tmp- >next; L->size--; free(tmp); break; previous = tmp; tmp = tmp->next; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16

Λύσεις (συν.) type deletemin(list *L){ type result=-1; NODE* tmp = L->head; if(!isempty(l)){ result = tmp->data; L->head = L->head->next; L->size--; free(tmp); return result; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 17

Λύσεις (συν.) type deletemax(list *L){ type result =-1; NODE* tmp = L->head; NODE* prev = L->head; if(!isempty(l)){ if(l->size==1) { result = tmp->data; free(tmp); L->head = NULL; else{ while( (tmp- >next)!=null){ prev = tmp; tmp = tmp->next; result = tmp->data; free(tmp); prev->next=null; L->size--; return result; return -1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 18