Forum » Programiranje » [c#] Sklad
[c#] Sklad
Cvenemir ::
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Povecaj(Stack<int> skl, Stack<int> pomozni_skl) { while (skl.Count != 0) { pomozni_skl.Push(skl.Pop() + 1); } while (pomozni_skl.Count != 0) { skl.Push(pomozni_skl.Pop()); } foreach (int vrednost in skl) { Console.WriteLine("{0}", vrednost); } } static void Main(string[] args) { Stack<int> skl = new Stack<int>(); Stack<int> pomozni_skl = new Stack<int>(); skl.Push(1); skl.Push(2); skl.Push(3); skl.Push(4); skl.Push(5); Povecaj(skl, pomozni_skl); Console.ReadKey(true); } } }
Kako naj priredim metodo Povecaj(), da pri izpisu vrstni red števil ne bo zamenjan? Uporabim pa lahko samo en pomozni sklad.
darkolord ::
foreach čez stack seveda ne gre po vrsti, ampak v obratnem vrstnem redu, enako kot Pop(). Vrednost lahko izpišeš v prejšnji zanki.
Cvenemir ::
Se eno vprašanje. Tule morem pa z uporabo sklada obrnat podan seznam.
Do tegale sm pršu, ampak mi meče napako "Collection was modified after the enumerator was instantiated." pri drugi foreach zanki v metodi Obrni().
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Obrni_seznam { class Program { public static void Obrni(LinkedList<int> seznam, Stack<int> obrnjeno, Stack<int> temp) { foreach (int stevilo in seznam) { temp.Push(stevilo); } foreach (int stevilo in temp) { int a = temp.Pop(); obrnjeno.Push(a); Console.WriteLine(a); } } static void Main(string[] args) { LinkedList<int> seznam = new LinkedList<int>(); Stack<int> temp = new Stack<int>(); Stack<int> obrnjeno = new Stack<int>(); seznam.AddLast(1); seznam.AddLast(2); seznam.AddLast(3); seznam.AddLast(4); seznam.AddLast(5); Obrni(seznam, obrnjeno, temp); Console.WriteLine(obrnjeno); Console.ReadKey(true); } } }
Do tegale sm pršu, ampak mi meče napako "Collection was modified after the enumerator was instantiated." pri drugi foreach zanki v metodi Obrni().
mihies ::
Spura ima prav. Zakaj sploh potrebuješ tole:
Daj raje for zanko od 0 to temp.Count-1
foreach (int stevilo in temp)
Daj raje for zanko od 0 to temp.Count-1
Spura ::
Spura ima prav. Zakaj sploh potrebuješ tole:
foreach (int stevilo in temp)
Daj raje for zanko od 0 to temp.Count-1
Taka for zanka ne bo delovala.
V primeru, da ima sklad "temp" 10 elementov se bo izvedla le 5-krat, ker se temp.Count vsako iteracijo zmanjsa za eno.
Pravilna je uporaba while zanke:
while(!temp.isEmpty()) { // ne vem ce C# ima empty na stacku, ce nima napisi temp.Count != 0 kot pogoj obrnjeno.push(temp.pop); }
V splosnem ljudje prevec uporabljajo for zanke in premalo while zanke.
Zgodovina sprememb…
- spremenil: Spura ()
mihies ::
Ooops, Spura ima prav. Zanka bi morala biti od Count-1 do 0. Rešitev z IsEmpty je še lepša.
Spura ::
Pa ne rabis dveh stackov da obrnes. Stack je LIFO struktura in itak obrne vrstni red. Ta tvoja koda ti v "obrnjeno" da isti vrstni red kot je v podanem seznamu.
Spura ::
Pa nehi ga srat s temi void funkcijami. Predpostavljam, da bi ti dejansko moral vracat List z obrnjenim vrstnim redom.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Obrni_seznam { class Program { public static LinkedList<int> Obrni(LinkedList<int> seznam) { Stack<int> stack = new Stack<int>(); LinkedList<int> ret = new LinkedList<int>(); foreach (int stevilo in seznam) { stack.Push(stevilo); } foreach (int stevilo in stack) { ret.AddLast(stevilo); } return ret; } static void Main(string[] args) { LinkedList<int> seznam = new LinkedList<int>(); seznam.AddLast(1); seznam.AddLast(2); seznam.AddLast(3); seznam.AddLast(4); seznam.AddLast(5); LinkedList<int> obrnjeno = Obrni(seznam); Console.WriteLine(obrnjeno); Console.ReadKey(true); } } }
Zgodovina sprememb…
- spremenil: Spura ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1648 (1593) | Cvenemir |
» | c sharp LinkedList - NalogaOddelek: Programiranje | 1841 (1792) | Msatir |
» | Povezani seznamOddelek: Programiranje | 2086 (1683) | pohano |
» | [c#] LinkedList branje poljubnega elementaOddelek: Programiranje | 1537 (1446) | FrEaKmAn |
» | c# LinkedList iteratorOddelek: Programiranje | 782 (667) | Mitja Bonča |