19.6. Stack

As the name implies, a Stack encapsulates a standard LIFO abstract data type. You use the Pop and Push methods of the Stack class to retrieve and insert elements respectively. Like Queue, Stack also has a Peek method which returns the element that is next to be popped out without actually popping it out.

Calling Pop() on an empty Stack will result in a System.InvalidOperationException exception. To prevent that from happening, you can check the Stack's Count public property before invoking Pop().

 1: using System;
 2: using System.Collections;
 3:
 4: public class TestClass{
 5:   public static void Main(){
 6:
 7:     Stack s = new Stack();
 8:
 9:     // Using Push
10:     s.Push("A");
11:     s.Push("B");
12:     s.Push("C");
13:     PrintCollection(s);
14:

Output:

Stack elements: C,B,A,

The static PrintCollection method defined on line 40 below prints out the elements in the Stack object passed in.

15:     // Using Count
16:     Console.WriteLine("Count: " + s.Count);
17:

Output:

Count: 3

18:     // Using Peek
19:     string token = (string)s.Peek();
20:     Console.WriteLine("Peeked:" + token);
21:     PrintCollection(s);
22:

Output:

Peeked:C
Stack elements: C,B,A,

23:     // Using Pop
24:     token = (string)s.Pop();
25:     Console.WriteLine("Popped:" + token);
26:     PrintCollection(s);
27:

Output:

Popped:C
Stack elements: B,A,

Notice that the last element pushed in (string C) is popped out first.

28:     token = (string)s.Pop();
29:     Console.WriteLine("Popped:" + token);
30:     PrintCollection(s);
31:

Output:

Popped:B
Stack elements: A,

32:     token = (string)s.Pop();
33:     Console.WriteLine("Popped:" + token);
34:     PrintCollection(s);
35:

Output:

Popped:A
Stack elements:

36:     token = (string)s.Pop(); // InvalidOperationException

Output (runtime exception):

Unhandled Exception: System.InvalidOperationException: Stack empty at System.Collections
.Stack.Pop() at TestClass.Main()

When attempting to Pop an empty Stack, an InvalidOperationException will be thrown.

37:   }
38:
39:   // Prints out all elements in the Queue
40:   public static void PrintCollection (Stack s){
41:     IEnumerator enumerator = s.GetEnumerator();
42:     Console.Write("Stack elements: ");
43:
44:     while (enumerator.MoveNext())
45:       Console.Write(enumerator.Current + ",");
46:
47:     Console.WriteLine();
48:   }
49: }

It is possible to Push onto a Stack a null instead of an object. nulls are often used as placeholders on the Stack to separate consecutive objects.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.117.93.0