Nadesłany przez Kamil Dworak, 25 lipca 2010 12:39
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
stos_1_j.java:
/**************************************** * Implementacja stosu * * www.algorytm.org * * Opracowal Dworak Kamil * *****************************************/ import java.util.*; /* pojedynczy element */ class Elem { int wartosc; Elem next; /* konstruktor */ public Elem(int x, Elem n){ next=n; wartosc=x; } /* zwracam wskzaznik na nastepny obiekt */ public Elem getNext(){ return next; } /* zwracam przechowywana wartosc */ public int getWartosc(){ return wartosc; } } public class Stos { /* wierzcholek stosu */ Elem start; Stos(){ start=null; } /* zwracam wartosc wierzcholka */ public Elem getStart(){ return start; } /* dodaje element do stosu */ public void push(int x){ Elem temp = new Elem(x,start); start=temp; } /* sciagam element ze stosu */ public void pop(){ if(start!=null){ start = start.getNext(); } else { System.out.println("Stos jest pusty"); } } /* wyswietlam zawartosc stosu */ public void show(){ if(start!=null){ Elem temp = start; while(temp!=null){ System.out.print(temp.getWartosc() + " "); temp=temp.getNext(); } System.out.println(); } else { System.out.println("Stos jest pusty"); } } /* zwracam ile elementow jest na stosie */ public int zlicz(){ if(start!=null){ Elem temp = start; int licznik=0; while(temp!=null){ licznik++; temp = temp.getNext(); } return licznik; } else return 0; } /* * odwracam kolejnosc elemetow na stosie * wspomagajac sie dodatkowymi dwoma stosami */ public void reverse(Stos stos2, Stos stos3){ if(start!=null){ Elem temp = start; while(temp!=null){ stos2.push(temp.getWartosc()); this.pop(); temp=temp.getNext(); } while(stos2.getStart()!=null){ stos3.push(stos2.getStart().getWartosc()); stos2.pop(); } while(stos3.getStart()!=null){ this.push(stos3.getStart().getWartosc()); stos3.pop(); } } } /* * porzadkuje kolejnosc elementow na * stosie (od min do max) * */ public void sort(Stos stos2){ if(start!=null){ int licznik = this.zlicz(); int max, licznik2=0; while(licznik!=0){ Elem temp = start; max = temp.getWartosc(); while(temp!=null){ if(max>temp.getWartosc()){ max = temp.getWartosc(); } temp = temp.getNext(); } while(start!=null){ if(start.getWartosc()!=max){ stos2.push(start.getWartosc()); this.pop(); licznik2++; } else { this.pop(); while(licznik2!=0){ this.push(stos2.getStart().getWartosc()); stos2.pop(); licznik2--; } stos2.push(max); break; } } licznik--; } while(stos2.getStart()!=null){ this.push(stos2.getStart().getWartosc()); stos2.pop(); } } else { System.out.println("Stos jest pusty"); } } public static void menu(){ System.out.println("(0) Menu\n(1) PUSH\n(2) POP\n(3) SHOW"); System.out.println("(4) ZLICZ\n(5) REVERSE\n(6) SORT\n(7) EXIT"); } /* main */ public static void main(String[]args){ Stos stos1 = new Stos(); Stos stos2 = new Stos(); Stos stos3 = new Stos(); Scanner in = new Scanner(System.in); int t; while(in.hasNext()){ t=in.nextInt(); switch(t){ case 0: Stos.menu();break; case 1: t=in.nextInt();stos1.push(t);break; case 2: stos1.pop();break; case 3:stos1.show();break; case 4:System.out.println(stos1.zlicz());break; case 5:stos1.reverse(stos2, stos3);break; case 6:stos1.sort(stos2);break; case 7:System.exit(0); default:; } } } }