View Full Version : [C#]Pila
Kleidemos
12-01-2003, 14:54
Qualcuno mi puo postare il codice di una pila commentato.............cosi capisco come funzia??????????
Tnk & Ciao
Kleidemos
12-01-2003, 19:08
http://forum.html.it/forum/images/smilies/014.gif
Avevo un scritto un esempio di pila agli inizi...se lo ritrovo te lo posto ...
Kleidemos
12-01-2003, 19:33
Originally posted by "atragon"
Avevo un scritto un esempio di pila agli inizi...se lo ritrovo te lo posto ...
se me lo commenti riga-riga che sono un decelebrato..............ti faccio la statua!
Un primo esempio è questo, anche se non mi pare sia quello che avevo fatto io..boh?!?...provalo che non mi ricordo assolutamente se funziona e intanto studialo, poi, se proprio non ci riesci, vedo di commentartelo...cmq, se sai come funziona uno stack è più facile se provi ad implementarlo da solo....ritengo un pessimo metodo partire dal codice altrui per vedere come fungono algoritmi di base come questo...opinione del tutto personale....
using System;
public class Stack
{
private Node first = null;
public bool Empty {
get {
return (first == null);
}
}
public object Pop()
{
if (first == null)
throw new Exception("Stack vuoto");
else {
object temp = first.Value;
first = first.Next;
return temp;
}
}
public void Push(object o){
first = new Node(o, first);
}
class Node
{
public Node Next;
public object Value;
public Node(object value): this(value, null) {}
public Node(object value, Node next)
{
Next = next;
Value = value;
}
}
}
class test
{
static void Main()
{
Stack s = new Stack();
for (int i = 0; i < 10; i++)
s.Push(i);
while (!s.Empty)
Console.WriteLine(s.Pop());
}
}
Kleidemos
12-01-2003, 20:05
nn ho capito nulla :cry:
Partendo dal presupposto che io il C# non lo conosco...provo a commentartelo...
using System;
//La classe Stack ha 3 metodi :
//Empty: testa se lo stack è vuoto
//Push: immette nella pila un oggetto
//Pop: estrae dalla pila lìultimo oggetto inserito
public class Stack
{
private Node first = null; //inizializzo il puntatore al primo nodo
public bool Empty {
get {
return (first == null); //se first è uguale a null ritorna vero (implica che lo stack è vuoto)
}
}
public object Pop()
{
if (first == null) //se la pila è vuota alora non posso estrarre
throw new Exception("Stack vuoto"); //allora lancio una eccezione
else {
object temp = first.Value; //Faccio un oggetto temporaneo a cui
//assegno il valore dell'oggetto puntato da first (oggetto da estrarre)
first = first.Next; //assegno a first il prossimo Node da estrarre
return temp; //ritorno l'oggetto salvato precedentemente
}
}
public void Push(object o){
first = new Node(o, first); //creo un nuovo Node di valore o e
//che punta all'ultimo Node inseirito in pila (in pratica inserisco in testa alla pila)
}
//Questa classe contiene gli elementi della pila:
//Next: è l'elemento puntato dal nodo corrente
//Value: è il valore dell'oggetto nel nodo corrente
class Node
{
public Node Next;
public object Value;
//Nel caso venga richiamato il costruttore sotto (Node n = new Node(o);) viene
//richiamato automaticamente il costruttore successivo passando il valore null
//come secondo parametro
//In pratica chimando Node n = new Node(o); è vome se si chiamasse Node n = new Node(o, null);
public Node(object value): this(value, null) {}
//Con questo costruttore si assegnano i vari campi
public Node(object value, Node next)
{
Next = next;
Value = value;
}
}
}
class test
{
static void Main()
{
Stack s = new Stack(); //creo uno stack
for (int i = 0; i < 10; i++)
s.Push(i); //inserisco i nello stack
while (!s.Empty) //fino a quando lo stack non è vuoto
Console.WriteLine(s.Pop()); //rendo in output il valore estratto dallo stack
}
}
In pratica l'output di questo programma è :
9 (è l'ultimo valore inserito)
8
7
6
5
4
3
2
1
0
Perfetto. Non c'è nulla da aggiungere. Thx, Cionci, mi hai risparmiato il lavoro di scrivere i commenti ;)
Kleidemos
13-01-2003, 13:37
ora me lo studio, tnk!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.