The Stack Collection

Stack კლასი არის კოლექცია LIFO (Last In, First Out) ფუნქციონალურობით.
Stack არის მონაცემთა თანმიმდევრობა, რომელშიც ინახება მონაცემები შემდგომ გამოყენებამდე.
Stack იგივე Queue მსგავსია იმ განსხვავებით, რომ Queue – დან წევრებს ვიღებთ იმ თანმიმდევრობით რა თანმიმდევრობითაც მოხდა ჩაწერა, ხოლო Stack–იდან ის წევრი გამოდის პირველი რომელიც ბოლო ჩაიწერა, აქედან გამომდინარეობს მისი ფუნქციონალურობის აბრევიატურა LIFO.
Stack ხშირად გამოიყენება ოპერაციულ სისტემებში და მაღალი დონის პროგრამირების ენებში ერთერთი ამის მაგალითია პროგრამული გამოძახების (program calls) დროს პროგრამის დაბრუნების ნიშნულის (return points) დამახსოვრება. ყოველი ქვებრძანების(subroutine) გამოძახების შემთხვევაში მოხდება პროგრამის მიმდინარე მისამართის შენახვა(pushed) Stack–ში (ასე შეიძლება მრავალჯერ მოხდეს გამოძახება), როგორცკი დამთავრდება ქვებრძანების შესრულება Stack–დან ამოიკითხება(popped) ბოლო მისამართი და შესრულდება შესაბამისი ბრძანება ხოლო საბოლოოდ Stack–დან ამოიკითხება ძირითადი პროგრამიდან გამოძახებისას მასში ჩაწერილი მისამართი.  მარტივად გასაგებათ სტეკი შეგვიძლია შევადაროთ ავტომატის აბოიმას რომელშიც ბოლოს ჩადებული ტყვია გაისროლება პირველი, ხოლო პირველად ჩადებული ბოლოს. .net framework შეიცავს Stack კოლექციას. მოცემული კლასი უზრუნველყობს LIFO–ს მთელ ფუნქციონალურობას. Stack კლასი არის ძალზე მარტივი კოლექცია, რომელიც შეიძლება შეიცავდეს ნებისმიერ ობჯექტს, დუბლირებული წევრებისა და null სიდიდის წევრების ჩათვლით.                                                                                                           ისევე როგორც Queue–ში Stack–ის გადავსებისასაც ხდება მისი ტევადობის გაორმაგება, მეხსიერების წინაწარ გამოყოფის მიზნით. უპარამეტრო კონსტრუქტორის გამოყენების შემთხვევაში კოლექციის მიერ ავტომატურად ხდება 10 ელემენტისთვის მეხსიერებაში ადგილის წინასწარ გამოყოფა.                                                            მოცემული კლასი, ისევე როგორც Queue შედის System.Collections ნეიმსფეისში ამიტომ მისი გამოყენების წინ საჭიროა using System.Collections დამატება.

using System;
using System.Collections;

namespace StackDemo {
  class Program {

    static void Main(string[] args) {
      Constructors();
      PushMethod();
      PopMethod();
      PeekMethod();
      Clear();
      Contains();
      ToArray();
      CreatingAThreadSafeStackWrapper();
    }

    // Constructors
    static void Constructors() {
      ArrayList myList = new ArrayList();
      myList.Add("String 1");
      myList.Add("String 2");

      //Stack myLifo = new Stack();

      //Stack myLifo = new Stack(15);//სტეკისთვის 15–ს
      //ტოლი მეხსიერების გამოყოფა

      Stack myLifo = new Stack(myList);
      //Copies myList into the stack
    }

    // Push Method
    static void PushMethod() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");//ელემენტების ჩაწერა სტეკში

      Console.WriteLine("Count: {0}", breadcrumbs.Count); 
      // Outputs "Count: 3"
    }

    // Pop Method
    static void PopMethod() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");

      while(breadcrumbs.Count != 0) {
        string next = breadcrumbs.Pop().ToString();
        //სტეკიდან ელემენტების ამოღება, როგორც შედეგიდან
        //ჩანს სტეკში ბოლოს ჩაწერილი ამოვიდა პირველი
        Console.WriteLine(next);
      }

      /* OUTPUT

      C#
      Articles
      Home Page

      */
    }

    // Peek Method
    static void PeekMethod() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");

      string next = breadcrumbs.Peek().ToString();
      //მოცემული Peek()
      //ფუნქციით ხდება არა ელემენტის ამოღება, არამედ მოცემული
      //ელემენტის მნიშვნელობოს ჩაწერა string–ის ტიპის ცვლადში.
      Console.WriteLine(next);
      // Outputs "C#"
      Console.WriteLine("Count: {0}", breadcrumbs.Count);
      // Outputs "Count: 3"
    }

    // Clear
    static void Clear() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");

      Console.WriteLine("Count: {0}", breadcrumbs.Count);
      // Outputs "Count: 3"
      breadcrumbs.Clear();//მოცემული მეთოდი ასუფთავებს
      //სტეკს წევრებისგან
      Console.WriteLine("Count: {0}", breadcrumbs.Count);
      // Outputs "Count: 0"
    }

    // Contains
    static void Contains() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");

      Console.WriteLine(breadcrumbs.Contains("Articles"));
      // Outputs "True"
      Console.WriteLine(breadcrumbs.Contains("SQL Server"));
      // Outputs "False"
    }

    // ToArray
    static void ToArray() {
      Stack breadcrumbs = new Stack();

      breadcrumbs.Push("Home Page");
      breadcrumbs.Push("Articles");
      breadcrumbs.Push("C#");

      // Copy items
      object[] array = breadcrumbs.ToArray();
      //ToArray() მეთოდი უზრუნველყობს სტეკის ელემენტების
      //ისე ამოღებას რომ არ დაირღვეს სტეკის თანმიმდევრობა.
      //სტეკის შემადგენლობა ამოწერილი იქნება მასივში object
      //წევრების სახით.

      // List array items
      foreach(object o in array)
        Console.WriteLine(o.ToString());

      /* OUTPUT

      C#
      Articles
      Home Page

      */
    }

    // Creating a Thread-Safe Stack Wrapper
    static void CreatingAThreadSafeStackWrapper() {
      Stack myCollection = new Stack();

      Stack myThreadSafe = Stack.Synchronized(myCollection);

      Console.WriteLine(myThreadSafe.IsSynchronized);
      // Outputs "True"
    }
  }
}

* This source code was highlighted with Source Code Highlighter.

Advertisements
This entry was posted in C# Programming. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s