package si.wolf; import java.util.Stack; public class Main { public static void main(String[] args) { Stack s = new Stack(); s.push("A"); s.push("B"); s.push("C"); s.push("D"); s.push("E"); s.push("F"); s.push("G"); System.out.println("Input : " + s); obrni(s,1,7); System.out.println("Output: " + s); } /** * Metoda prepiše/dopise(ce stack ni prazen) en stack v drugega * @param s Sklad 1 * @param s1 Sklad 2 */ private static void prepisi(Stack s, Stack s1) { Stack pomozni = new Stack(); while(!s.isEmpty()) { pomozni.push(s.pop()); //elemente v obrnjenem vrstnem redu skopira v pomozni sklad } while(!pomozni.isEmpty()) { s1.push(pomozni.pop()); //Iz pomoznega sklada obrne elemente v nov sklad (kar je isto kot prvi sklad) } } /** * Obrne sklad * @param s sklad */ private static void obrni(Stack s) { Stack pomozni = new Stack(); while(!s.isEmpty()) { pomozni.push(s.pop()); //elemente v obrnjenem vrstnem redu skopira v pomozni sklad } prepisi(pomozni, s); //prepise is pomoznega nazaj v prvotni sklad } /** * Ta metoda obrne od n mesta dalje m elementov * @param s Sklad * @param n od katerega mesta dalje * @param m koliko elementov * @return Obrnjen sklad */ private static void obrni(Stack s, int n, int m) //[A, B, C, D, E, F, G] { Stack stariElementi = new Stack(); Stack ObrnjeniElementi = new Stack(); for (int i = 0; i < n; i++) //Od zgoraj sklada na vzdol sklada premakni n elementov v pomozni sklad { stariElementi.push(s.pop()); //[G, F] } for (int j = 0; j < m; j++) //ostalih m elemtov premakni v svoj sklad { ObrnjeniElementi.push(s.pop()); //[E, D, C] } prepisi(ObrnjeniElementi, s); //V naš prvotni sklad dodamo obrnjene elemente: [A, B, E, D, C] obrni(stariElementi); //Obrnemo naše stare elemente: [G, F] --> [F, G] prepisi(stariElementi, s); //Dodamo naše obrnjene elemente: [F, G] ---> [A, B, E, D, C, F, G] } }