Coigé E.D. Agoithmes et Stuctues de Données n 2 Thème : Les Listes Execice II.1 Cacu en notation poonaise postfixée 1. Un agoithme est e suivant : si n est a ongueu de expession épéte n fois ie a chaîne suivante c ; si c est un opéateu op aos depie(entie i1) ; eeu si pie vide depie(entie i2) ; eeu si pie vide cacue = i1 op i2 ; empie() ; sinon si c est un entie aos empie(c) ; sinon eeu ; finsi ; finsi ; fin epete ; si pie non vide aos eeu ; finsi ; pogamme Java impot java.io.*; pubic cass Postfixe { static BuffeedReade in = new InputSteamReade(System.in)); pubic static void main (Sting[] ags) { Pie P=new Pie (); Sting s; ty { fo (int i=0; i< ags.ength; i++) { s = ags[i]; if (s.equas("+")) { P.empie(i1+i2); ese if (s.equas("-")){ P.empie(i2-i1); ese if (ags[i].equas("x")) { BuffeedReade(new 1
P.empie(i1*i2); ese if (s.equas("/")){ P.empie(i2/i1); ese P.empie (Intege.paseInt(s)); if (P.estVide()) System.out.pint("Expession ma ecite"); ese System.out.pint("Resutat du cacu : "+ P.sommet()); catch (Exception e) { System.out.pint("Pobeme "+ e); Execice II.2 Invesion d'une iste chaînée Question 1 On veut écie une nouvee méthode envese qui invese a iste couante. - pointea au fu et à mesue su a patie non encoe invesée de a iste. Nous utiisons 2 pointeus suppémentaies : qui pointe su a tête de a sous-iste déjà invesée de a iste. Initiaisé à nu. p est simpement un pointeu auxiiaie qui pemet d effectue e tansfet d un éément de a tête de ves a tête de. Liste envese Liste =this ; Liste = nu; Liste p ; début tant que /= nu faie p = ; -- on sauvegade dans p a tête de a iste =.suivant; -- on avance (on enève a tête de ) -- on insèe p en tête de p.suivant = ; = p; fait; -- ici ==nu et contient e ésutat de invesion. etoune ; fin Impantation en Java, en utiisant a casse Liste et es méthodes vues en cous : Liste envese(liste ){ 2
Liste 1= ; Liste = nu; Liste p ; whie ( 1!= nu){ p = 1;//on sauvegade dans p a tête de a iste 1 = 1.queue();// on avance 1 (on enève a tête de 1) p = new Liste(p.tete(),); // on insèe p en tête de = p; //ici 1==nu et contient e ésutat de invesion. etun (); Su exempe, au début : Pemie passage dans a bouce tant que : Deuxième passage dans a bouce tant que : Etc à a fin : 3
Question 2 Cacue a compexité de cette pocédue. Si n est e nombe d ééments (ou ongueu) de a iste, aos a bouce s exécute n fois. Un passage pa a bouce coespond à 4 opéations. Donc a compexité de cette pocédue est O(n). Execice II.3 Invesion écusive d'une iste chaînée Iustation de idée de a écusion : Une iste L non vide peut toujous ête considéée comme a juxtaposition de son pemie éément (ou de son en_tête), que nous notons x, avec une aute iste L (qui est en fait L pivée de x). x Reste de L (ou L ) L Si on sait invese L aos on sait invese L puisque : Invese(L ) x Invese(L) Question 1 Liste inveserec (Liste ){ //invesion ecusive Liste 1 = ; if ( 1.queue() == nu) etun 1 ; int x = 1.tete(); 1=1.queue(); // est aos tonquée de son pemie eement 1=inveseRec(1) ; //appe écusif 1.inseeenqueue (x); etun (1); Question 2 Cacue a compexité de cette pocédue. Exempe d exécution : 4
Si n est e nombe d ééments de a iste, aos a pocédue invesion est invoquée n fois. aêt Invesion{a,b,c Invesion{b,c Invesion{c Invesion{ a b c A chaque fois, i faut au pie n opéations pou effectue insetion en queue. Cette pocédue est donc en O(n 2 ). A compae avec a pocédue d invesion de a question pécédente. Execice II.4 Invesion d'une iste contiguë Question 1 Défini un pincipe efficace d invesion d une iste epésentée pa un tabeau. On peut pemute es contenus des ééments extêmes, pa paies. On pemute 1 et n, puis 2 et (n-1), puis 3 et (n-2),. Si n est pai, tous es ééments sont pemutés 2 à deux et cea fait n/2 pemutations. Si n est impai, éément centa ne change pas et cea fait (n-1)/2 pemutations. Question 2 Écie a méthode invese et cacue sa compexité. void invesetab(int tab[]){ int n, miieu, tamp ; n=tab.ength - 1; miieu = n / 2; // division entièe fo ( int i=0;i <=miieu;i++) { //pemutation des ééments d indice i et n-i tamp = tab[n-i]; tab [n-i]= tab[i]; tab[i ]=tamp; De ode de n/2 passages dans a bouce pou (3 opéations éémentaies à chaque fois) donc a compexité est O(n). 5