Mega Code Archive

 
Categories / C# / Collections Data Structure
 

A stack class for characters

/* C#: The Complete Reference  by Herbert Schildt  Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // A stack class for characters.       using System;      class Stack {      // these members are private    char[] stck; // holds the stack     int tos;     // index of the top of the stack         // Construct an empty Stack given its size.     public Stack(int size) {        stck = new char[size]; // allocate memory for stack       tos = 0;      }         // Push characters onto the stack.     public void push(char ch) {        if(tos==stck.Length) {          Console.WriteLine(" -- Stack is full.");          return;        }                stck[tos] = ch;       tos++;     }          // Pop a character from the stack.     public char pop() {        if(tos==0) {          Console.WriteLine(" -- Stack is empty.");          return (char) 0;         }              tos--;        return stck[tos];      }      // Return true if the stack is full.    public bool full() {      return tos==stck.Length;       }      // Return true if the stack is empty.    public bool empty() {      return tos==0;    }      // Return total capacity of the stack.    public int capacity() {      return stck.Length;    }      // Return number of objects currently on the stack.    public int getNum() {      return tos;    }  }   // Demonstrate the Stack class.      public class StackDemo31 {      public static void Main() {        Stack stk1 = new Stack(10);        Stack stk2 = new Stack(10);        Stack stk3 = new Stack(10);        char ch;        int i;            // Put some characters into stk1.      Console.WriteLine("Push A through Z onto stk1.");      for(i=0; !stk1.full(); i++)          stk1.push((char) ('A' + i));           if(stk1.full()) Console.WriteLine("stk1 is full.");        // Display the contents of stk1.      Console.Write("Contents of stk1: ");        while( !stk1.empty() ) {           ch = stk1.pop();          Console.Write(ch);        }            Console.WriteLine();          if(stk1.empty()) Console.WriteLine("stk1 is empty.\n");          // put more characters into stk1        Console.WriteLine("Again push A through Z onto stk1.");      for(i=0; !stk1.full(); i++)          stk1.push((char) ('A' + i));          /* Now, pop from stk1 and push the element in stk2.         this causes stk2 to hold the elements in          reverse order. */      Console.WriteLine("Now, pop chars from stk1 and push " +                        "them onto stk2.");      while( !stk1.empty() ) {           ch = stk1.pop();          stk2.push(ch);      }          Console.Write("Contents of stk2: ");        while( !stk2.empty() ) {           ch = stk2.pop();          Console.Write(ch);        }          Console.WriteLine("\n");        // put 5 characters into stack      Console.WriteLine("Put 5 characters on stk3.");      for(i=0; i < 5; i++)          stk3.push((char) ('A' + i));          Console.WriteLine("Capacity of stk3: " + stk3.capacity());      Console.WriteLine("Number of objects in stk3: " +                        stk3.getNum());         }    }