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

Σχετικά έγγραφα
Δρ. Πέτρος Παναγή B123

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

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

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

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

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

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

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

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

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

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

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

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

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

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

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

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

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

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

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

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

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

Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 25 Ιουνίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας

Επανάληψη για τις Τελικές εξετάσεις

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

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

Η γλώσσα προγραμματισμού C

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

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

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

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

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

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

Λύσεις για τις ασκήσεις του lab5

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

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

Γραμμικές Δομές Δεδομένων

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

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

Συλλογές, Στοίβες και Ουρές

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

Σημειώσεις για πρόοδο στο εργαστήριο

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

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

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

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

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

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

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

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

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

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

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

Τυχαίοι αριθμοί Αλφαριθμητικά και χαρακτήρες

Συμβολοσειρές. 1 Συμβολοσειρές. 6 Απριλίου 2014

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

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

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

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

Transcript:

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

6. Αντιγραφή 7. Συνένωση 8. Αναζήτηση 9. Εισαγωγή 10. Αποµάκρυνση 11. Αντικατάσταση 12. Σύγκριση

Υλοποίηση του ΑΤΔ Συµβολοσειρά µε πίνακα #define megisto_mikos... typedef struct int mikos; char xaraktiras[megisto_mikos]; typos_seiras;

void dimiourgia(typos_seiras *seira) /* Δηµιουργεί µια κενή συµβολοσειρά */ seira->mikos=0; int mikos(typos_seiras seira) /* Υπολογίζει το πλήθος των χαρακτήρων της seira */ return seira.mikos;

char anaktisi(typos_seiras seira, int i) /* Αν 0<= i <mikos(seira), δηλαδή η θέση i ανήκει στη συµβολοσειρά τότε επιστρέφει 1 το χαρακτήρα της θέσης i.*/ return(seira.xaraktiras[i]);

int prosartisi(typos_seiras *seira, char xar) /*Βάζει στο τέλος της συµβολοσειράς τον χαρακτήρα xar.*/ if (mikos(*seira)==megisto_mikos) printf( Η συµβολοσειρά είναι πλήρης ); return 0; seira->xaraktiras[seira->mikos]=xar; seira->mikos++; return 1;

int diagrafi(typos_seiras *seira) /* Προ : Δηµιουργία της seira. Μετα : Επιστρέφει τη seira χωρίς τον πρώτο χαρακτήρα της */ int i; if (mikos(*seira) ==0)/* κενή seira */ printf ( Διαγραφή από κενή seira ); return 0; for (i=0; i < seira->mikos-1; i++) seira->xaraktiras[i]=seira->xaraktiras[i+1]; seira->mikos--; return 1;

Ολες οι πράξεις εκτός της διαγραφής έχουν πολυπλοκότητα Ο(1), δηλαδή εκτελούνται σε σταθερό χρόνο ανεξάρτητα από το µέγεθος της συµβολοσειράς. Η πράξη της διαγραφής έχει Ο(n) χρόνο για συµβολοσειρές µήκους n, γιατί κάθε χαρακτήρας πρέπει να µετακινηθεί κατά µία θέση αριστερά προκειµένου να καλυφθεί το κενό που δηµιουργείται µε τη διαγραφή του πρώτου χαρακτήρα.

int antigrafi_seiras(typos_seiras arxiki, int thesi, int n, typos_seiras *neaseira) /* Προ :Δηµιουργία συµβολοσειράς arxiki, και thesi, n >= 0. Μετα : Επιστρέφει τη neaseira που περιέχει τους n χαρακτήρες της arxiki που αρχίζουν από τη thesi. */ int i, teleytaios; teleytaios = thesi + n 1; if (teleytaios >= mikos(arxiki)) printf( Δεν υπάρχουν οι χαρακτήρες που θέλετε να αντιγράψετε στην αρχική σειρά ); return 0; συνέχεια

else dimiourgia(neaseira); /* Αντιγραφή των n χαρακτήρων από τη thesi της seira στη neaseira*/ for (i=0; i<n; i++) prosartisi(neaseira, anaktisi(arxiki, thesi+i)); return 1; Αντιγραφή thesi n thesi+n-1..

int synenosi_seiras(typos_seiras seira1, seira2, *neaseira) /* Προ : Δηµιουργία των συµβολοσειρών seira1 και seira2. Μετα : Δηµιουργεί µια νέα συµβολοσειρά από τη συνένωση των seira1 και seira2.*/ int mks1, mks2, i, k; mks1=mikos(seira1); mks2=mikos(seira2); if (mks1+mks2 > megisto_mikos) printf( Οι συµβολοσειρές είναι πολύ µεγάλες και δεν µπορούν να συνενωθούν ); return 0; συνέχεια

else /* Αντιγραφή της seira1 στη neaseira */ k = antigrafi_seiras(seira1, 0, mks1, neaseira); if (k == 1) /* Αντιγραφή της seira2 στη neaseira */ for (i=0; i < mks2, i++) k = prosartisi(neaseira, anaktisi(seira2, i)); return k; Συνένωση..

Αναζήτηση κείµενο.. σχήµα (pattern)

keimeno : a b c a b c a b d a b b a sxima : a b c a b d keimeno : a b c a b c a b d a b b a sxima : a b c a b d

keimeno : a b c a b c a b d a b b a sxima : a b c a b d keimeno : a b c a b c a b d a b b a sxima : a b c a b d

int anazitisi_seiras(typos_seiras sxima, keimeno) /*Αναζητά τη πρώτη εµφάνιση της sxima µέσα στην keimeno*/ int s, k, thesi, mkss, mksk; mkss=mikos(sxima); mksk=mikos(keimeno); if (mkss==0) return 0; else if (mkss > mksk) return -1; else thesi=0; s=0; k=0; συνέχεια

while ((s<mkss) && (k<mksk)) if (anaktisi(sxima,s) == anaktisi(keimeno,k)) s++; k++; else thesi++; k=thesi; s=0; if (s>mkss-1) return thesi; else return -1;

Εισαγωγή..

int eisagogi_seiras(typos_seiras *seira1, *seira2, int thesi) /*Εισάγει τη seira1 µέσα στη seira2 στη θέση thesi*/ typos_seiras proti, teleytaia; if ((0 <= thesi) && (thesi < mikos(*seira2))) antigrafi_seiras(*seira2, 0, thesi, &proti); antigrafi_seiras(*seira2, thesi, mikos(*seira2) - thesi, &teleytaia); synenosi_seiras(proti, seira1, &proti); synenosi_seiras(proti, teleytaia, seira2); return 1; else return 0;

Διαγραφή.....

int diagrafi_seiras(typos_seiras *seira, int thesi, int mks) /*Διαγράφει mks χαρακτήρες από τη συµβολοσειρά seira ξεκινώντας από τη θέση thesi.*/ typos_seiras proti,teleytaia; if ( mks > mikos(*seira) thesi ) printf( Δεν είναι δυνατή η διαγραφή ); return 0; antigrafi_seiras(*seira, 0, thesi, &proti); thesi+=mks; antigrafi_seiras(*seira, thesi, mikos(*seira)-thesi, &teleytaia); synenosi_seiras(proti, teleytaia, seira); return 1;

Αντικατάσταση..

int antikatastasi_seiras(typos_seiras seira1, seira2, *seira) /*Αντικαθιστά την συµβολοσειρά seira1 µε την συµβολοσειρά seira2 στην πρώτη εµφάνισή της στη συµβολοσειρά seira*/ int thesi; int mks; thesi=anazitisi_seiras(seira1,*seira); if (thesi<0) return 0; else if ( mikos(*seira) - mikos(seira1) + mikos(seira2) > megisto_mikos) printf ( Δεν είναι δυνατή η αντικατάσταση ); return 0; mks=mikos(seira1); diagrafi_seiras(seira, thesi, mks); eisagogi_seiras(seira2, seira, thesi); return 1;

char sygrisi(typos_seiras seira1, seira2) /*Συγκρίνει τη seira1 και τη seira2. Επιστρέφει το χαρακτήρα < αν seira1 < seira2, = αν seira1 = seira2, και > αν seira1 > seira2. Δύο συµβολοσειρές είναι ίσες αν έχουν το ίδιο µήκος και όλοι οι χαρακτήρες τους συµπίπτουν. Αν όλοι οι χαρακτήρες συµπίπτουν µέχρι το µήκος της µικρότερης συµβολοσειράς, τότε αυτή είναι η µικρότερη */ int i,ises; i=0; ises=1; while ( ises && (i<mikos(seira1)) && (i<mikos(seira2))) if (anaktisi(seira1,i) == anaktisi(seira2,i)) i++; συνέχεια

else ises=0; if(anaktisi(seira1, i) < anaktisi(seira2, i)) return '<'; else return '>'; if (ises) if (mikos(seira1) == mikos(seira2)) return '='; else if (mikos(seira1) < mikos(seira2)) return '<'; else return '>';

void diavase_seira(typos_seiras *seira) /*Διαβάζει χαρακτήρες και τους τοποθετεί στη seira*/ char xar; dimiourgia(seira); xar = getchar( ); while (xar!= '\n' ) prosartisi(seira, xar); xar = getchar( );

void typose_seira(typos_seiras seira) /*Τυπώνει τους χαρακτήρες της seira*/ int i, mks; mks = mikos(seira); for (i=0; i < mks; i++) putchar(anaktisi(seira, i));