1 ÅñãáóôÞñéï 5 ÄïìÝò ÄåäïìÝíùí ôìþìá: Äéá åßñéóçò Ðëçñïöïñéþí, ÔÅÉ ÊáâÜëáò äéäüóêùí: Äñ. Âáóßëåéïò áôæþò, Åð. ÊáèçãçôÞò ôï êåßìåíï áõôü âñßóêåôáé óôï äéáäßêôõï óôç óåëßäá www.it.teithe.gr/ chatzis 5.1 Óôü ïé Óôü ïò ôïõ åñãáóôçñßïõ áõôïý åßíáé ç ðáñïõóßáóç ôçò Ýííïéáò ôçò ëßóôáò. Áñ éêü õëïðïéåßôáé ìßá ôüîç ãéá ìßá ëßóôá áêåñáßùí êáé óôçí óõíý åéá áíôßóôïé ç ðáñáìåôñïðïéçìýíç ôüîç ãéá ïðïéïäþðïôå ôýðï. 5.2 Áðáñáßôçôï Õëéêü ÊÜèå öïéôçôþò ïöåßëåé íá Ý åé ìáæß ôïõ: ôçí äéóêýôá ìå ôïõò êþäéêåò ôùí ðñïçãïýìåíùí åñãáóôçñßùí. ôéò óçìåéþóåéò Þ ôï âéâëßï ôïõ ìáèþìáôïò (åöüóïí Ý ïõí ìïéñáóôåß). õëéêü ãéá íá ìðïñåß íá êñáôü óçìåéþóåéò. 5.3 Ðñïåôïéìáóßá ôïõ Ç/Õ ¼ðùò ðåñéãñüöïíôáé áíáëõôéêü óôï åñãáóôþñéï 1: Äçìéïõñãåßóôå ôïí ðñïóùðéêü óáò êáôüëïãï: C:\USERS\ÅÐÙÍÕÌÏ ÏÍÏÌÁ\DSLAB åöüóïí äåí õðüñ åé. Áðü ôï ìåíïý Tools ôïõ ðáñáèýñïõ ôïõ êáôáëüãïõ DSLAB åðéëýîôå ôçí åðéëïãþ Folder Options... Óôï ðáñüèõñï ðïõ áíïßãåé êüíôå êëéê óôï ìåíïý View êáé áðåíåñãïðïéþóôå ôçí åðéëïãþ Hide file extensions for known file types åöüóïí åßíáé åíåñãïðïéçìýíç. Åëá éóôïðïéþóôå ôï ðáñüèõñï ôïõ êáôáëüãïõ óáò. ÎåêéíÞóôå ôçí Borland C++ êáé êëåßóôå üóá ðáñüèõñá óôï ðåñéâüëëïí åñãáóßáò ôçò áíïßîïõí áõôüìáôá. Áíïßîôå Ýíá ðáñüèõñï Command prompt (MS-DOS prompt) êáé áëëüîôå êáôáëüãïõò (cd) Ýôóé þóôå íá âëýðåôå ôïí ðñïóùðéêü óáò êáôüëïãï.
2 5.4 Äçìéïõñãßá ôüîçò ãéá ëßóôá áêåñáßùí Äïìéêü óôïé åßï ìéáò ëßóôáò åßíáé ï êüìâïò. Áñ éêü ëïéðüí äçìéïõñãïýìå ìßá ôüîç ôçí ïðïßá ïíïìüæïõìå NodeInt óå Ýíá áñ åßï ôï ïðïßï ïíïìüæïõìå NodeInt.h: class NodeInt { / éäéüôçôåò / int data; NodeInt next; / ìýèïäïé / NodeInt() {next = 0; / äïìçôþò / ; Ç ôüîç NodeInt õëïðïéåß ôçí Ýííïéá ôïõ êüìâïõ ìå ðåñéå üìåíï ôýðïõ int. Ðéï óõãêåêñéìýíá ç ìåôáâëçôþ data ôýðïõ int ñçóéìïðïéåßôáé ãéá ôçí áðïèþêåõóç ôùí äåäïìýíùí, áðïôåëåß äçëáäþ ôï ôìþìá äåäïìýíùí ôïõ êüìâïõ, åíþ ç ìåôáâëçôþ next ôýðïõ äåßêôç óå NodeInt ñçóéìïðïéåßôáé ãéá ôçí áðïèþêåõóç ôçò äéåýèõíóçò ìíþìçò ôïõ åðüìåíïõ êüìâïõ (åöüóïí õðüñ åé) êáé áðïôåëåß ôï ôìþìá äéáóýíäåóçò ôïõ êüìâïõ. Óôçí óõíý åéá äßíïõìå ôïí êþäéêá ôçò ôüîçò LinkedListInt ðïõ ðåñéý åôáé óå Ýíá áñ åßï ðïõ ïíïìüæåôáé LinkedListInt.h êáé õëïðïéåß ìéá áðëü óõíäåäåìýíç ëßóôá ìå äåäïìýíá áêýñáéïõò áñéèìïýò. Ç ëßóôá ñçóéìïðïéåß ùò äïìéêü óôïé åßá êüìâïõò ðïõ õëïðïéïýíôáé ìå ôçí ôüîç NodeInt. Ç ôüîç LinkedListInt õëïðïéåßôáé óáí ìßá ëßóôá áðü óõíäåäåìýíïõò êüìâïõò ðïõ óõíäýïíôáé ìåôáîý ôïõò ìå ñþóç ôïõ ôìþìáôïò äéáóýíäåóçò êáé Ý ïõí ùò äåäïìýíá áêýñáéïõò áñéèìïýò. Ï êþäéêáò ðïõ õëïðïéåß ôçí ëßóôá äßíåôáé óôçí óõíý åéá: #include "NodeInt.h" class LinkedListInt{ / éäéüôçôåò / NodeInt head; / ìýèïäïé / LinkedListInt(); / äïìçôþò / LinkedListInt(); / áðïäïìçôþò / int removehead(int &x); int addhead(int x); ; / Õëïðïßçóç ìåèüäùí / LinkedListInt::LinkedListInt() { head = 0; int LinkedListInt::addHead(int x) { NodeInt newnode = new NodeInt;
3 newnode data = x; return 1; newnode next = head; int LinkedListInt::removeHead(int &x) { return -1; NodeInt tmp = head; x = head data; head = head next; delete tmp; LinkedListInt:: LinkedListInt() { int x; while(head) { removehead(x); Ï ðáñáðüíù êþäéêáò ðåñéëáìâüíåé ôçí äþëùóç ôçò ôüîçò ìå ôéò éäéüôçôåò êáé ôéò ìåèüäïõò ôçò êáèþò êáé ôçí õëïðïßçóç ôùí ìåèüäùí áõôþí. Óôçí óõíý åéá èá ðáñïõóéáóôåß ðñüãñáììá ðïõ ñçóéìïðïéåß ôçí ôüîç áõôþ. #include "LinkedListInt.h" #include <iostream.h> void print listint(nodeint tmp) { cout "Start of List" endl; while (tmp) { cout tmp data endl; tmp=tmp next; cout "End of List" endl endl; void main (void) { LinkedListInt lista ;
4 int dat; int err; lista.addhead(1000); lista.addhead(2000); lista.addhead(3000); lista.addhead(4000); print listint(lista.head); lista.removehead(dat); cout "removed:" dat endl; print listint(lista.head); lista. LinkedListInt(); err=lista.removehead(dat); if (err==-1) cout "Error: " err " (Empty List)" endl; 5.5 Äçìéïõñãßá ðáñáìåôñïðïéçìýíçò ôüîçò ãéá ëßóôá Óôç óõíý åéá äßíåôáé ï êþäéêáò ôçò ðáñáìåôñïðïéçìýíçò ôüîçò LinkedList ðïõ õëïðïéåß ìéá áðëü óõíäåäåìýíç ëßóôá. Ðáñáôçñåßóôå ôçí ñþóç ôçò äåóìåõìýíçò ëýîçò template ðïõ äçëþíåé üôé ç ôüîç åßíáé ðáñáìåôñïðïéçìýíç êáé ôïõ óõìâüëïõ Ô ôï ïðïßï ðáßæåé ôïí ñüëï ôïõ ôýðïõ. Áñ éêü äßíåôáé ï êþäéêáò ôçò ðáñáìåôñïðïéçìýíçò ôüîçò ôïõ êüìâïõ Node (áðïèçêåýóôå ôïí óôï áñ åßï Node.h): class Node { T data; Node<T> next; Node() { next = 0 ; ; Ç ôüîç Node ñçóéìïðïéåßôáé óôçí óõíý åéá áðü ôçí ôüîç LinkedList (áðïèçêåýóôå ôïí êþäéêá ðïõ áêïëïõèåß óôï áñ åßï LinkedList.h): #include "Node.h" class LinkedList { / éäéüôçôåò / Node<T> head; / ìýèïäïé /
5 ; LinkedList(); / äïìçôþò / LinkedList(); / áðïäïìçôþò / int addhead(t x); int removehead(t &x); / Õëïðïßçóç ìåèüäùí / LinkedList<T>::LinkedList() { head = 0; int LinkedList<T>::addHead(T x) { Node<T> newnode = new Node<T>; newnode data = x; return 1; newnode next = head; int LinkedList<T>::removeHead(T &x) { return -1; Node<T> tmp = head; x = head data; head = head next; delete tmp; LinkedList<T>:: LinkedList() { T x; while(head) { removehead(x);
6 Ï ôñüðïò ìå ôïí ïðïßï ñçóéìïðïéåßôáé ìßá ðáñáìåôñïðïéçìýíç ôüîç ðáñïõóéüæåôáé óôï ðáñüäåéãìá ðïõ áêïëïõèåß. ÐñïêåéìÝíïõ íá ìðïñïýìå íá ðáñáêïëïõèïýìå ôéò áëëáãýò ðïõ ãßíïíôáé óôéò ëßóôåò äçìéïõñãïýìå áñ éêü ìßá ðáñáìåôñïðïéçìýíç óõíüñôçóç print list ðïõ óáñþíåé ïëüêëçñç ôçí ëßóôá êáé ôõðþíåé ôá ðåñéå üìåíá ôùí êüìâùí ôçò. #include "LinkedList.h" #include <iostream.h> void print list(node<t> tmp) { cout "Start of List" endl; while (tmp) { cout tmp data endl; tmp=tmp next; cout "End of List" endl endl; void main (void) { LinkedList<int> lista; LinkedList<char> lista2; int dat; char dat2; lista.addhead(1000); lista.addhead(2000); lista.addhead(3000); lista.addhead(4000); lista2.addhead( n ); lista2.addhead( h ); lista2.addhead( o ); lista2.addhead( J ); print list(lista.head); print list(lista2.head); Óôï êýñéï ðñüãñáììá main áñ éêü äçëþíåôáé ç ëßóôá lista ôýðïõ int êáé ç ëßóôá lista2 ôýðïõ char. Ðáñáôçñåßóôå ôçí áíôéêáôüóôáóç ôçò ðáñáìýôñïõ Ô óôïí ôýðï ôçò ëßóôáò áðü ôïí åðéèõìçôü ôýðï (int êáé char) áíôßóôïé á. Áðü ôï óçìåßï áõôü êáé ìåôü ïé äýï ëßóôåò ñçóéìïðïéïýíôáé, üðùò êáé óôá ðñïçãïýìåíá ðáñáäåßãìáôá, ìå êáôüëëçëåò êëþóåéò ôùí ìåèüäùí ðïõ ðáñý åé ç ðáñáìåôñïðïéçìýíç ôüîç LinkedList.