ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

Σχετικά έγγραφα
Γραμμικές Δομές Δεδομένων

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation.

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ????

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

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

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

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

ΕΠΛ232: Εργαστήριο 2

ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.

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

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 4: ΑΤΔ Λίστα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.

Δρ. Πέτρος Παναγή B123

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

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

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

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

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

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

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

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

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

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

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

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

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

Δέντρα (Trees) - Ιεραρχική Δομή

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

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

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

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

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

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

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

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

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

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

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

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

ΠΙ Ν Α Κ Ε Σ (arrays)

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

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

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

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

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

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

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

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

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

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

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

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

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

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

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

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

Generics και ArrayLists

Προγραμματισμός Ι (ΗΥ120)

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

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

Προγραµµατισµός Ι (ΗΥ120)

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

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

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

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

Χρήσεις Στοίβας ΣΤΟΙΒΑ. Ορισμός Στοίβας (stack) Βασική Λειτουργικότητα

Λίστες (Lists) Ο ΑΤΔ λίστα είναι µια συλλογή στοιχείων του ίδιου τύπου µε

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

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

Ενότητα 6: Κατακερματισμός Ασκήσεις και Λύσεις

Transcript:

ΛΙΣΤΕΣ Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα Υλοποίηση με δείκτες (pointers) Υλοποίηση με πίνακα Εφαρμογές και Χρήση Λιστών

Λίστες (Lists) Δεδομένα Ο ΑΤΔ λίστα είναι μια πεπερασμένη συλλογή στοιχείων του ίδιου τύπου Τ με γραμμική δομή (ολική διάταξη).

Βασικές Πράξεις Δημιουργία Καταστροφή Κενή Εισαγωγή Διαγραφή Περιεχόμενο (τιμή στοιχείου) Επόμενο, προηγούμενο στοιχείο Αναζήτηση

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

Σχεδιασμός a 1 a 2 a 3 a n A[0] A[1] A[2]... A[n-1]...... A[plithos-1] Η λογική διάταξη των στοιχείων της λίστας αντιστοιχεί τη φυσική διάταξη των στοιχείων του πίνακα. Eκτός από την αποθήκευση των στοιχείων της λίστας στον πίνακα είναι αναγκαίο να χρησιμοποιηθεί και μια βοηθητική μεταβλητή megethos που θα διατηρεί το εκάστοτε πλήθος των στοιχείων της λίστας. Οδηγούμαστε λοιπόν στις δηλώσεις :

#define plithos... typedef... typos_stoixeiou; typedef struct { typos_stoixeiou typos_pinaka[plithos] int megethos; typos_listas; typos_listas lista;

Η υλοποίηση των βασικών πράξεων για τον ΑΤΔ ακολουθιακή λίστα είναι εύκολη και ορισμένες από αυτές παρουσιάζονται παρακάτω: void dimiourgia (typos_listas *lista) /* Προ : Καμμία Μετα : Δημιουργεί μια κενή λίστα/* { lista->megethos = 0;

int keni(typos_listas lista) /* Προ : Δημιουργία μιας λίστας. Μετα : Ελέγχει αν μια λίστα είναι κενή*/ { return (lista.megethos == 0 );

int epomenos(typos_listas lista, int thesi){ /* Προ : Δημιουργία λίστας. Mετά: Αν είναι έγκυρη η Thesi eπιστρέφει την επόμενη θέση της thesi αλλιώς -1. */ if ((thesi<0) (thesi>lista.megethos 1)){ return (-1); else return (++thesi); Παρατηρήστε την διπλή χρήση της τιμής επιστροφής της συνάρτησης. Εφόσον δεν έχουν νόημα οι αρνητικές τιμές σε θέση πίνακα, χρησιμοποιούμε την αρνητική τιμή -1 για ένδειξη λάθους. Εναλλακτικός τρόπος αντί για σημαία.

thesi megethos Εισαγωγή 23 43 54 65 82 93 95?...? 23 43 54 60 65 82 93 95?...? Μόλις δημιουργηθεί ο χώρος αυτός τότε τοποθετείται το νέο στοιχείο της λίστας. Η υλοποίηση της διαδικασίας της εισαγωγής ενός νέου στοιχείου στη λίστα παρουσιάζεται στη συνέχεια. Όπως για την ουρά και τη στοίβα, έτσι και για τη λίστα θα πρέπει να ελεγχθεί πρώτα αν η λίστα είναι γεμάτη. Πολυπλοκότητα : O(n)

int eisagogi_meta(typos_listas *lista, typos_stoixeiou stoixeio, int thesi, int *full){ /* Προ : Δημιουργία της λίστας. Mετά: Εισάγεται το στοιχείο stoixeio μετά την θέση thesi */ int i; *full = 0; if (thesi<0) (thesi>lista->megethos-1) return(-1); else if (lista->megethos == plithos) *full =1; else {/* εισαγωγή είναι δυνατή. Mετακίνηση στοιχείων μια θέση δεξιά από την thesi*/ for (i = lista->megethos-1 ; i >= thesi+1 ; i--) lista->pinakas[i+1] = lista->pinakas[i]; lista->pinakas[thesi+1]=stoixeio; lista->megethos++; return(0);

Διαγραφή Στοιχείου (Μετακινήσεις) thesi megethos 23 43 54 60 65 82 93 95?...? 23 43 60 65 82 93 95?...?

int diagrafi(typos_listas *lista, int thesi) /* Προ : Δημιουργία της λίστας. Mετά: Διαγράφεται το στοιχείο της *lista στη θέση thesi. */ { int i; if ((thesi<0) (thesi>lista->megethos -1)) return(-1) else if (keni(*lista)) *empty=1; else {/* μείωση του μεγέθους της λίστας κατά 1 και αφαίρεση του κενού χώρου */ lista->megethos--; for (i=thesi; i <= lista->megethos-1 ; i++ ) lista->pinakas[i] = lista->pinakas[i+1]; return(0);