Programmi Visual Basic - prof. Claudio Maccherani - Perugia - 2009
Abstract Data Type - Lista semplice, Coda e Pila in Visual Basic 2008
applicazione
ADT_Lista_Coda_Pila
' FRMADT.VB (form) '+------------------------------------------------------------------------------------------+ '| ADT_Lista_Coda_Pila - Visual Basic 2008 - Prof.Claudio Maccherani - 2009 | '+------------------------------------------------------------------------------------------+ '| Applicazione VB2008, esempio di implementazione LISTA, CODA e PILA utilizzando una | '| Collection/insieme "ADTLista" (definita come classe in un modulo di classe) e le sue | '| proprietà e metodi [Add, Remove, Item]. | '| La LISTA è una lista semplice con inserimenti ed estrazioni solo in testa o in coda. | '| La CODA è implementata con una lista con inserimenti in fondo ed estrazioni in testa.| '| La PILA è implementata con una lista con inserimenti ed estrazioni in testa. | '+------------------------------------------------------------------------------------------+ '| form "frmADT.vb" | '+------------------------------------------------------------------------------------------+ Option Strict Off Option Explicit On Friend Class frmADT Inherits System.Windows.Forms.Form Dim Lista As New ADTLista ' definisce il nuovo oggetto Lista della classe ADTLista Dim Coda As New ADTLista ' definisce il nuovo oggetto Coda della classe ADTLista Dim Pila As New ADTLista ' definisce il nuovo oggetto Pila della classe ADTLista Private Sub frmADT_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Inizializzazione() ' inizializza lista, coda e pila End Sub Private Sub frmADT_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated txtDato.Focus() ' si posiziona sul text box End Sub Private Sub cmdListaAggTesta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdListaAggTesta.Click Lista.Aggiungi(txtDato.Text, "T") ' inserisce dato in testa alla Lista Lista.Mostra(lstLista) ' mostra tutta la Lista txtDato.Focus() ' torna su text box End Sub Private Sub cmdListaAggFondo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdListaAggFondo.Click Lista.Aggiungi(txtDato.Text, "C") ' inserisce dato in coda alla Lista Lista.Mostra(lstLista) ' mostra la Lista txtDato.Focus() ' torna su text box End Sub Private Sub cmdListaTogliTesta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdListaTogliTesta.Click txtDato.Text = Lista.Togli("T") ' toglie l'elemento di testa e lo mette in txtDato Lista.Mostra(lstLista) ' mostra la Lista txtDato.Focus() ' torna su text box End Sub Private Sub cmdListaTogliFondo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdListaTogliFondo.Click txtDato.Text = Lista.Togli("C") ' toglie l'elemento di coda e lo mette in txtDato Lista.Mostra(lstLista) ' mostra la Lista txtDato.Focus() ' torna su text box End Sub Private Sub cmdInCoda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInCoda.Click Coda.Aggiungi(txtDato.Text, "C") ' inserisce dato in Coda (in fondo alla lista) Coda.Mostra(lstCoda) ' mostra la Coda (lista) txtDato.Focus() ' torna su text box End Sub Private Sub cmdFuoriCoda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFuoriCoda.Click txtDato.Text = Coda.Togli("T") ' estrae dato dalla Coda (fondo lista) e lo mette in txtDato Coda.Mostra(lstCoda) ' mostra Coda (lista) txtDato.Focus() ' torna su text box End Sub Private Sub cmdPush_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPush.Click Pila.Aggiungi(txtDato.Text, "T") ' inserisce dato in Pila (in testa alla Lista) - TOP Pila.Mostra(lstPila) ' mostra la Pila txtDato.Focus() ' torna su text box End Sub Private Sub cmdPop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPop.Click txtDato.Text = Pila.Togli("T") ' estrae TOP dalla Pila (testa lista) e lo mette in txtDato Pila.Mostra(lstPila) ' mostra la Pila (lista) txtDato.Focus() ' torna su text box End Sub Private Sub Inizializzazione() Dim i As Integer For i = 1 To 5 Lista.Aggiungi(i & "^ Elemento Lista", "C") ' inserisce dati nella lista Coda.Aggiungi(i & "^ Elemento Coda", "C") ' inserisce dati nella coda Pila.Aggiungi(i & "^ Elemento Pila", "T") ' inserisce dati nella pila Next Lista.Mostra(lstLista) ' mostra la lista Coda.Mostra(lstCoda) ' mostra la coda Pila.Mostra(lstPila) ' mostra la pila End Sub Private Sub cmdFine_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFine.Click End End Sub End Class ' CLSADT.VB (modulo di classe) '+------------------------------------------------------------------------------------------+ '| Definizione della classe "ADTLista" utilizzata per implementare: | '| * LISTA (lista semplice con inserimenti ed estrazioni solo in testa e in coda) | '| * CODA (realizzta con una lista con inserimenti in coda ed estrazioni in testa) | '| * PILA (realizzta con una lista con inserimenti ed estrazioni in testa) | '+------------------------------------------------------------------------------------------+ '| modulo di classe "clsADT.vb" | '+------------------------------------------------------------------------------------------+ Option Strict Off Option Explicit On Friend Class ADTLista Dim Collezione As New Collection Dim Elemento As Object ' aggiunta di un nuovo elemento -------------------------------------------------------- Public Sub Aggiungi(ByRef Dato As String, ByVal TesCod As String) If Dato = "" Then ' se dato è stringa vuota, inserisce "(vuoto)" Dato = "(vuoto)" End If Select Case TesCod Case "T" ' aggiunta in testa If Collezione.Count() = 0 Then ' se collezione vuota allora Collezione.Add(Dato) ' aggiunge come primo della lista Else ' altrimenti Collezione.Add(Dato, , 1) ' aggiunge prima del primo elemento End If Case "C" ' aggiunta in coda Collezione.Add(Dato) ' aggiunge in fondo alla lista End Select End Sub ' eliminazione di un elemento ----------------------------------------------------------- Public Function Togli(ByVal TesCod As String) As String Select Case TesCod Case "T" ' eliminazione in testa If Collezione.Count() > 0 Then ' se lista non vuota allora Togli = Collezione.Item(1) ' estrae l'elemento di testa Collezione.Remove(1) ' e lo toglie dalla lista End If Case "C" ' eliminazione in coda If Collezione.Count() > 0 Then ' se lista non vuota allora Togli = Collezione.Item(Collezione.Count()) ' estrae l'ultimo elemento Collezione.Remove(Collezione.Count()) ' e lo toglie dalla lista End If End Select End Function ' visualizza nel listbox dell'interfaccia grafica il contenuto dell'ADT ----------------- Public Sub Mostra(ByRef List As System.Windows.Forms.ListBox) List.Items.Clear() ' imbianca la listbox For Each Elemento In Collezione ' per ogni elemento della Collezione List.Items.Add(Elemento) ' fa l'aggiunta alla listbox Next Elemento End Sub End Class