<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net_Tutorial%2FCollections%2FYour_Stack</id>
		<title>VB.Net Tutorial/Collections/Your Stack - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net_Tutorial%2FCollections%2FYour_Stack"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net_Tutorial/Collections/Your_Stack&amp;action=history"/>
		<updated>2026-04-05T22:05:33Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net_Tutorial/Collections/Your_Stack&amp;diff=2969&amp;oldid=prev</id>
		<title> в 16:40, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net_Tutorial/Collections/Your_Stack&amp;diff=2969&amp;oldid=prev"/>
				<updated>2010-05-26T16:40:30Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:40, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net_Tutorial/Collections/Your_Stack&amp;diff=2970&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net_Tutorial/Collections/Your_Stack&amp;diff=2970&amp;oldid=prev"/>
				<updated>2010-05-26T12:53:55Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Define your own Stack class based on List==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;Public Class List&lt;br /&gt;
   Private firstNode As Node&lt;br /&gt;
   Private lastNode As Node&lt;br /&gt;
   Private name As String&lt;br /&gt;
   Public Sub New(ByVal listName As String)&lt;br /&gt;
      name = listName&lt;br /&gt;
      firstNode = Nothing&lt;br /&gt;
      lastNode = Nothing&lt;br /&gt;
   End Sub&lt;br /&gt;
   Public Sub New()&lt;br /&gt;
      MyClass.New(&amp;quot;list&amp;quot;)&lt;br /&gt;
   End Sub &amp;quot; New&lt;br /&gt;
   Public Sub InsertAtFront(ByVal insertItem As Object)&lt;br /&gt;
      SyncLock (Me) &lt;br /&gt;
         If IsEmpty() Then&lt;br /&gt;
            lastNode = New Node(insertItem)&lt;br /&gt;
            firstNode = lastNode&lt;br /&gt;
         Else &lt;br /&gt;
            firstNode = New Node(insertItem, firstNode)&lt;br /&gt;
         End If&lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Sub&lt;br /&gt;
   Public Sub InsertAtBack(ByVal insertItem As Object)&lt;br /&gt;
      SyncLock (Me)&lt;br /&gt;
         If IsEmpty() Then&lt;br /&gt;
            lastNode = New Node(insertItem)&lt;br /&gt;
            firstNode = lastNode&lt;br /&gt;
         Else&lt;br /&gt;
            lastNode.NextNode = New Node(insertItem)&lt;br /&gt;
            lastNode = lastNode.NextNode&lt;br /&gt;
         End If&lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Sub&lt;br /&gt;
   Public Function RemoveFromFront() As Object&lt;br /&gt;
      SyncLock (Me)&lt;br /&gt;
         Dim removeItem As Object = Nothing&lt;br /&gt;
         If IsEmpty() Then&lt;br /&gt;
            Throw New EmptyListException(name)&lt;br /&gt;
         End If&lt;br /&gt;
         removeItem = firstNode.Data&lt;br /&gt;
         If firstNode Is lastNode Then&lt;br /&gt;
            firstNode = Nothing&lt;br /&gt;
            lastNode = Nothing&lt;br /&gt;
         Else&lt;br /&gt;
            firstNode = firstNode.NextNode&lt;br /&gt;
         End If&lt;br /&gt;
         Return removeItem &lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Function&lt;br /&gt;
   Public Function RemoveFromBack() As Object&lt;br /&gt;
      SyncLock (Me)&lt;br /&gt;
         Dim removeItem As Object = Nothing&lt;br /&gt;
         If IsEmpty() Then&lt;br /&gt;
            Throw New EmptyListException(name)&lt;br /&gt;
         End If&lt;br /&gt;
         removeItem = lastNode.Data&lt;br /&gt;
         If firstNode Is lastNode Then&lt;br /&gt;
            lastNode = Nothing&lt;br /&gt;
            firstNode = lastNode&lt;br /&gt;
         Else&lt;br /&gt;
            Dim current As Node = firstNode&lt;br /&gt;
            While (Not (current.NextNode Is lastNode))&lt;br /&gt;
               current = current.NextNode&lt;br /&gt;
            End While&lt;br /&gt;
            lastNode = current&lt;br /&gt;
            current.NextNode = Nothing&lt;br /&gt;
         End If&lt;br /&gt;
         Return removeItem&lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Function&lt;br /&gt;
   &lt;br /&gt;
   Public Function IsEmpty() As Boolean&lt;br /&gt;
      SyncLock (Me)&lt;br /&gt;
         If firstNode Is Nothing Then&lt;br /&gt;
            Return True&lt;br /&gt;
         Else&lt;br /&gt;
            Return False&lt;br /&gt;
         End If&lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Function&lt;br /&gt;
   &lt;br /&gt;
   Public Overridable Sub Print()&lt;br /&gt;
      SyncLock (Me)&lt;br /&gt;
         If IsEmpty() Then&lt;br /&gt;
            Console.WriteLine(&amp;quot;Empty &amp;quot; &amp;amp; name)&lt;br /&gt;
            Return&lt;br /&gt;
         End If&lt;br /&gt;
         Console.Write(&amp;quot;The &amp;quot; &amp;amp; name &amp;amp; &amp;quot; is: &amp;quot;)&lt;br /&gt;
         Dim current As Node = firstNode&lt;br /&gt;
         While Not current Is Nothing&lt;br /&gt;
            Console.Write(current.Data &amp;amp; &amp;quot; &amp;quot;)&lt;br /&gt;
            current = current.NextNode&lt;br /&gt;
         End While&lt;br /&gt;
         Console.WriteLine(vbCrLf)&lt;br /&gt;
      End SyncLock&lt;br /&gt;
   End Sub&lt;br /&gt;
End Class &lt;br /&gt;
Public Class Node&lt;br /&gt;
   Private mData As Object&lt;br /&gt;
   Private mNextNode As Node&lt;br /&gt;
   Public Sub New(ByVal dataValue As Object)&lt;br /&gt;
      MyClass.New(dataValue, Nothing)&lt;br /&gt;
   End Sub&lt;br /&gt;
   Public Sub New(ByVal dataValue As Object, ByVal nextNodeValue As Object)&lt;br /&gt;
      mData = dataValue&lt;br /&gt;
      mNextNode = nextNodeValue&lt;br /&gt;
   End Sub&lt;br /&gt;
   &lt;br /&gt;
   Public ReadOnly Property Data() As Object&lt;br /&gt;
      Get&lt;br /&gt;
         Return mData&lt;br /&gt;
      End Get&lt;br /&gt;
   End Property&lt;br /&gt;
   Public Property NextNode() As Node&lt;br /&gt;
      Get&lt;br /&gt;
         Return mNextNode&lt;br /&gt;
      End Get&lt;br /&gt;
      Set(ByVal value As Node)&lt;br /&gt;
         mNextNode = value&lt;br /&gt;
      End Set&lt;br /&gt;
   End Property&lt;br /&gt;
End Class &lt;br /&gt;
Public Class EmptyListException&lt;br /&gt;
   Inherits ApplicationException&lt;br /&gt;
   Public Sub New(ByVal name As String)&lt;br /&gt;
      MyBase.New(&amp;quot;The &amp;quot; &amp;amp; name &amp;amp; &amp;quot; is empty&amp;quot;)&lt;br /&gt;
   End Sub &amp;quot; New&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class Stack&lt;br /&gt;
   Inherits List&lt;br /&gt;
   Public Sub New()&lt;br /&gt;
      MyBase.New(&amp;quot;stack&amp;quot;)&lt;br /&gt;
   End Sub &amp;quot; New&lt;br /&gt;
   Public Sub Push(ByVal dataValue As Object)&lt;br /&gt;
      MyBase.InsertAtFront(dataValue)&lt;br /&gt;
   End Sub &lt;br /&gt;
   Public Function Pop() As Object&lt;br /&gt;
      Return MyBase.RemoveFromFront()&lt;br /&gt;
   End Function &lt;br /&gt;
End Class&lt;br /&gt;
Module modStackInheritanceTest&lt;br /&gt;
   Sub Main()&lt;br /&gt;
      Dim stack As Stack = New Stack()&lt;br /&gt;
      stack.Push(True) &amp;quot; add Boolean&lt;br /&gt;
      stack.Push(Convert.ToChar(&amp;quot;$&amp;quot;)) &amp;quot; add Char&lt;br /&gt;
      stack.Push(123)&lt;br /&gt;
      stack.Push(&amp;quot;aString&amp;quot;) &amp;quot; add String&lt;br /&gt;
      stack.Print()&lt;br /&gt;
      Dim removedObject As Object = Nothing&lt;br /&gt;
      Try&lt;br /&gt;
         While True&lt;br /&gt;
            removedObject = stack.Pop()&lt;br /&gt;
            Console.WriteLine(removedObject &amp;amp; &amp;quot; popped&amp;quot;)&lt;br /&gt;
            stack.Print()&lt;br /&gt;
         End While&lt;br /&gt;
      Catch emptyListException As EmptyListException&lt;br /&gt;
         Console.Error.WriteLine(emptyListException.StackTrace)&lt;br /&gt;
      End Try&lt;br /&gt;
   End Sub &lt;br /&gt;
End Module&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;The stack is: aString 123 $ True&lt;br /&gt;
aString popped&lt;br /&gt;
The stack is: 123 $ True&lt;br /&gt;
123 popped&lt;br /&gt;
The stack is: $ True&lt;br /&gt;
$ popped&lt;br /&gt;
The stack is: True&lt;br /&gt;
True popped&lt;br /&gt;
Empty stack&lt;br /&gt;
   at List.RemoveFromFront()&lt;br /&gt;
   at modStackInheritanceTest.Main()&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>