Θεωρητικό Μέρος. 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); } }

Σχετικά έγγραφα
ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 1 ο Μέρος

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

Insert(K,I,S) Delete(K,S)

Προγραµµατιστική Εργασία 1 ο Μέρος

ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

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

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

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

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

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


ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

Ενότητα 7 Ουρές Προτεραιότητας

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

for for for for( . */

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

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

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

1 Ο Λύκειο Ρόδου. Β ΓΕΛ ΕισΑρχΕπ Η/Υ. Γεωργαλλίδης Δημήτρης

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

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

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

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

1o Φροντιστήριο ΗΥ240

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ 2002

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ 2002

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

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

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

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

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

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

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

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

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

Πανεπιστήμιο Ιωαννίνων Τμήμα Μηχανικών Η/Υ και Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2013

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΥΠΗΡΕΣΙΩΝ 2005

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

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

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

Ενότητα 2 Στοίβες Ουρές - Λίστες

Ενότητα 7 Ουρές Προτεραιότητας

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

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

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

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Transcript:

Πανεπιστήµιο Ιωαννίνων, Τµήµα Πληροφορικής 2 Νοεµβρίου 2005 Η/Υ 432: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκού Έτους 2005-2006 Παναγιώτα Φατούρου Ηµεροµηνία Παράδοσης 1 ο Σετ Ασκήσεων Θεωρητικό Μέρος: 1 ο Μέρος: Πέµπτη, 10/11, ώρα: 15:00. 2 ο Μέρος: ευτέρα 21/11, ώρα 12:00 Προγραµµατιστικό Μέρος: ευτέρα, 21/11, ώρα 12:00 Τρόπος Παράδοσης Θεωρητικό Μέρος: Παραδίδονται στους βοηθούς του µαθήµατος (Νικόλαος Καλλιµάνης και Μαρία Χριστοδουλίδου) το αργότερο µέχρι τις ηµεροµηνίες παράδοσης. Το γραφείο των βοηθών του µαθήµατος είναι το Α25. Προγραµµατιστικό Μέρος: Θα χρησιµοποιήσετε το πρόγραµµα turnin. Η εντολή που θα εκτελέσετε είναι: turnin lab1_05@cs432 <όνοµα_αρχείου1.c> <όνοµα_αρχείου2.c>... <όνοµα_αρχείουk.c> Θεωρητικό Μέρος 1o Mέρος 1. α. Θεωρήστε την ακόλουθη αναδροµική διαδικασία: 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); Σας ζητείται να τρέξετε στο χαρτί (δηλαδή να κάνετε trace) την rec(n) για την περίπτωση που n = 19. Πρέπει να παρουσιάσετε όλες τις αναδροµικές κλήσεις της rec καθώς και τις τιµές των µεταβλητών n, n1 και n2 σε κάθε εκτέλεση της rec. [10%]

β. Για την ακόλουθη διαδικασία που περιγράφεται σε ψευδοκώδικα, εξετάστε αν τερµατίζει σε πεπερασµένο πλήθος βηµάτων για οποιαδήποτε ακέραια τιµή της παραµέτρου n: a. int g(int n) { b. if (n <= 1) return(1); c. else if (n <= 4) return ([n/2]); d. else if (n <= 20) return(g([n/2])); e. else if (n mod 2 == 0) return(g(n/2)); f. else if (n mod 2 == 1) return(g([n/3])); g. else return(g(2*n)); Τι θα ίσχυε αν η γραµµή f. της διαδικασίας παραληφθεί; [10%] 2. α. Ποιες από τις ακόλουθες προτάσεις είναι σωστές και ποιες όχι; [10%] i. sqrt(n 5 ) O(n 2 ) ii. log(n 3 ) O(n logn) iii. sqrt(n) log(sqrt(n)) O(n) iv. 5n 2 +10n+3 O(n 2/3 ) v. 5n 2 +10n+3 O(n 3 ) vi. 5n 2 +10n+3 Θ(n 2 ) vii. 5n 2 +10n+3 Ω(n) γ. Βρείτε τη χρονική πολυπλοκότητα T(n) των παρακάτω αλγορίθµων. Βρείτε επίσης την τάξη της T(n) σε κάθε περίπτωση. [10%] i. procedure f1(int n) for i = 1 to n do { if (i mod 2 == 0) { for j = 1 to i do y = y+1; for j=n down to i do x = x+1; ii. procedure f2(int n) for j = 1 to n { x = n; while (x > 0) do x = x-j; while k = j to n 2 do y = y-1; Σηµείωση: Το άθροισµα H n = 1+1/2+ 1/3 +... + 1/n ονοµάζεται αρµονικός αριθµός και είναι γνωστό ότι H n = O(ln n).

2 ο Μέρος 1. Θεωρήστε έναν τριγωνικό πίνακα Α[i,j] µε 1 i, j n. Θέλουµε να αποθηκεύσουµε τα µη-µηδενικά στοιχεία του πίνακα Α σε διάταξη κατά στήλες σε έναν µονοδιάστατο πίνακα P. i. Ποιο πρέπει να είναι το µέγεθος του πίνακα P; [3%] ii. Εξηγήστε σε ποια θέση του πίνακα P βρίσκεται το στοιχείο Α[i,j]. [5%] iii. Περιγράψτε τη διαδικασία read_a(int i, int j), η οποία επιστρέφει την τιµή του Α[i,j] (δεδοµένου ότι ο Α έχει υλοποιηθεί χρησιµοποιώντας τον P). [7%] 2. Να γραφούν διαδικασίες (σε ψευδοκώδικα) που ανταλλάζουν το πρώτο στοιχείο µιας συνδεδεµένης λίστας µε το τελευταίο στοιχείο της, όταν: i. Η λίστα είναι απλά συνδεδεµένη. ii. Η λίστα είναι διπλά συνδεδεµένη. iii. Η λίστα είναι κυκλική (δηλαδή ο δείκτης next του τελευταίου στοιχείου της λίστας δεν είναι NULL αλλά δείχνει στο πρώτο στοιχείο της λίστας). ώστε επίσης διαδικασίες διαγραφής ενός στοιχείου από την αρχή και το τέλος κάθε µιας από τις παραπάνω κατηγορίες λιστών. Ποιες είναι οι χρονικές πολυπλοκότητες καθεµιάς από τις παραπάνω διαδικασίες ως συνάρτηση του αριθµού n των στοιχείων της λίστας; [22%] 3. Να γραφούν διαδικασίες (σε ψευδοκώδικα) που αντιστρέφουν τη σειρά των στοιχείων µιας απλής συνδεδεµένης λίστας, µιας κυκλικής λίστας, µιας διπλά συνδεδεµένης λίστας και µιας διπλά συνδεδεµένης κυκλικής λίστας. Μελετήστε την πολυπλοκότητα των αλγορίθµων που προτείνετε. Προσπαθήστε οι αλγόριθµοι αυτοί να έχουν τη µικρότερη δυνατή πολυπλοκότητα. [23%] Προγραµµατιστικό Μέρος (προαιρετικό) Για απλότητα, θεωρήστε πως οι λίστες, στοίβες και ουρές που ζητούνται στην συνέχεια αποθηκεύουν µόνο έναν ακέραιο στο info πεδίο τους. ουλέψτε σε όσα από τα ακόλουθα προγράµµατα σας ευχαριστεί. Το (Ε) σηµαίνει «Εύκολο», το (Μ) σηµαίνει «Μέτριο» και το ( ) σηµαίνει «ύσκολο». Να σηµειωθεί ότι ο αριθµός των προγραµµάτων που περιγράφονται στη συνέχεια είναι µεγάλος για να υλοποιηθούν όλα ως την ηµεροµηνία παράδοσης. ουλέψτε σε κάποια µόνο από αυτά. Ένας καλός αριθµός θα ήταν να δοκιµάσετε 2 ασκήσεις από την κατηγορία (Ε), 1 από την κατηγορία (Μ) και µία από την κατηγορία ( ) (ή αντί αυτής δύο ακόµη από την κατηγορία (Μ)). Καλές επιλογές είναι π.χ.: 2 4-6 9, 2-4-6-10, 1 3 4 10, 2-6-5-9, κ.α. Φυσικά, ο κάθε φοιτητής µπορεί να υλοποιήσει όσες και όποιες ασκήσεις θέλει (αφού είναι όλες προαιρετικές). Μοιράστε τη δουλειά των ασκήσεων που αποφασίσατε πως θα υλοποιήσετε σε δύο µέρη (µε περίπου ίδια δουλειά κάθε ένα από αυτά) και επιστρέψτε το πρώτο µέρος την Πέµπτη, 10/11, ενώ το δεύτερο µέρος τη ευτέρα 21/11. Για παράδειγµα το πρώτο µέρος µπορεί

να περιλαµβάνει τις ασκήσεις της κατηγορίας (Ε) και (Μ) και το δεύτερο µέρος την άσκηση της κατηγορίας ( ). 1. Υλοποιήστε σε C µια συνδεδεµένη στοίβα και µια συνδεδεµένη ουρά. Η υλοποίηση της ουράς έχει ήδη συζητηθεί στο µάθηµα: γράψτε το πρόγραµµα και δείτε το να εκτελείται. Η στοίβα υλοποιείται µε εντελώς αντίστοιχο τρόπο. (ΕΕ) 2. Υλοποιήστε σε C µια απλά συνδεδεµένη λίστα. Οι ακόλουθες λειτουργίες θα πρέπει να υλοποιηθούν (η σειρά µε την οποία εµφανίζονται στη συνέχεια καθορίζει και τη δυσκολία τους σε αύξουσα διάταξη): (Ε) i. InsertToFront: Παίρνει ως παράµετρο έναν ακέραιο n. Εισάγει ένα νέο κόµβο που περιέχει την τιµή n ως πρώτο στοιχείο της λίστας. ii. PrintList: ιατρέχει τη λίστα και τυπώνει όλα τα στοιχεία της. iii. LookUp: Ψάχνει για ένα στοιχείο µε τιµή n (όπου το n είναι ακέραιος, παράµετρος στη LookUp). iv. DeleteFromFront: διαγράφει το πρώτο στοιχείο της λίστας. v. DeleteFromEnd: διαγράφει το τελευταίο στοιχείο της λίστας. vi. Delete: Παίρνει ως παράµετρο έναν ακέραιο n, ψάχνει στη λίστα για τον κόµβο που περιέχει την τιµή n και αν ο κόµβος αυτός υπάρχει τον διαγράφει. Ο προς-διαγραφή κόµβος µπορεί να βρίσκεται οπουδήποτε µέσα στη λίστα. 3. Υλοποιήστε µια απλά συνδεδεµένη ταξινοµηµένη λίστα. Οι λειτουργίες που πρέπει να υλοποιηθούν είναι οι Insert (για την εισαγωγή ενός νέου κόµβου), LookUp (για την αναζήτηση µιας τιµής), Delete (για τη διαγραφή ενός κόµβου) και PrintList (για εκτύπωση των στοιχείων της λίστας). (Ε) 4. Υλοποιήστε µια διαδικασία που θα συνενώνει δύο απλά συνδεδεµένες ταξινοµηµένες λίστες σε µια. Η λίστα που προκύπτει πρέπει να είναι επίσης ταξινοµηµένη και να περιέχει τα στοιχεία και των δύο λιστών. (Μ) 5. Υλοποιήστε µια διπλά συνδεδεµένη λίστα. (Μ) 6. Υλοποιήστε µια απλά συνδεδεµένη κυκλική λίστα. Τροποποιήστε κατάλληλα τον κώδικα που γράψατε για την προγραµµατιστική άσκηση 2. (Ε) 7. Υλοποιήστε µια διπλά συνδεδεµένη κυκλική λίστα. Τροποποιήστε κατάλληλα τον κώδικα που γράψατε για την προγραµµατιστική άσκηση 5. (Μ) 8. Υλοποιήστε όσες από τις λειτουργίες που περιγράφονται στη θεωρητική άσκηση 4 δεν έχετε ακόµη υλοποιήσει για τα είδη λιστών που επιλέξατε να υλοποιήσετε στις προηγούµενες ασκήσεις. (Μ) 9. Υλοποιήστε τις λειτουργίες που περιγράφονται στη θεωρητική άσκηση 5 για τα είδη λιστών που επιλέξατε να υλοποιήσετε στις προηγούµενες ασκήσεις. ( ) 10. Τροποποιήστε τον κώδικα που γράψατε για την προγραµµατιστική άσκηση 2, ώστε η λίστα να αποθηκεύει πολυώνυµα της µορφής a n x n + + a 1 x + a 0. Το πρόγραµµα σας θα πρέπει να έχει τη δυνατότητα να αποθηκεύει περισσότερα από ένα πολυώνυµα (δηλαδή περισσότερες από µια λίστες). Χρησιµοποιείστε πίνακα ή λίστα για να αποθηκεύετε τους δείκτες στα πρώτα στοιχεία των λιστών αυτών. Υλοποιήστε

τη διαδικασία MultPol, που θα υπολογίζει το γινόµενο δύο πολυωνύµων και θα το αποθηκεύει σε µια νέα λίστα. Τα δύο πολυώνυµα που θα συµµετέχουν στον υπολογισµό του γινοµένου θα επιλέγονται από το χρήστη (στον οποίο θα πρέπει να τυπώνονται όλα τα υπάρχοντα αποθηκευµένα πολυώνυµα και να του ζητείται να επιλέξει δύο εξ αυτών).