Typ generyczny Stack

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2663 razy

Wstęp

Typ generyczny Stack jak sama nazwa wskazuje jest typem obiektu, który umożliwia przechowywanie danych w postaci stosu. Stosem nazywa się taki sposób przechowywania danych, w którym dostęp do kolejnych jego elementów jest możliwy dopiero po zdjęciu elementów znajdujących się nad nim. Jest to kolejka typu LIFO ang. last in first out (ostatni wchodzi, ostatni wychodzi), czyli pierwszy element dodany do stosu jest ostatnim, który można zdjąć z niego.

Tworzenie stosu Stack i dodawanie do niego elementów

Kolejnym typem generycznym, który jest dostępny w przestrzeni nazw:

using System.Collections.Generic;

typ kontenera Stack. Utwórzmy czym prędzej obiekt naszego stosu:

var stack = new Stack<int>();

Jak widać jest to klasa szablonowa, w której określa się, jakiego typu dane ma przyjmować dany obiekt. Oto jak do obiektu tej klasy wrzuca się elementy:

stack.Push(10);

Zdejmowanie elementu z stosu wraz z jego zwróceniem

Metoda Pop zdejmuje element z szczytu stosu i zwraca jego wartość:

var stack = new Stack<int>(); stack.Push(10); stack.Push(20); Console.WriteLine(stack.Pop().ToString()); // po tej operacji wartość 20 nie będzie już znajdowała się na stosie

Wynik działania:

20

Pobieranie elementu ze stosu bez jego zdejmowania

Metoda Peek zwraca element z szczytu stosu:

var stack = new Stack<int>(); stack.Push(10); stack.Push(20); Console.WriteLine(stack.Peek().ToString());

Wynik działania:

20

Usuwanie wszystkich elementów z stosu

Metoda Clear usuwa wszystkie dodane do stosu elementy:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Clear();

Brak indeksowania i właściwość Count

Stos nie byłby stosem, gdyby można było się do jego elementów dobrać za pomocą indeksowania, a więc nie można odwołać się do danego elementu stosu w sposób inny niż poprzez zdejmowanie kolejnych elementów tegoż stosu. Istnieje jednak właściwość klasy Stack, która podaje ile elementów znajduje się na stosie. Tą właściwością jest Count:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); Console.WriteLine(stack.Count.ToString());

Kopiowanie elementów stosu do tablicy

Metoda ToList zwraca tablicę Array zawierającą elementy stosu:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Push(15); var array = stack.ToArray(); foreach(int i in list) { Console.WriteLine(i.ToString()); }

Wynik działania:

10
20
15

Kopiowanie elementów stosu do listy

Metoda ToList zwraca listę List zawierającą elementy stosu:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Push(15); var list = stack.ToList(); foreach(int i in list) { Console.WriteLine(i.ToString()); }

Wynik działania:

10
20
15

Sumowanie elementów stosu

Metoda Sum dla typów prostych umożliwia znalezienie maksymalnej wartości zawartej w stosie:

var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Push(15); Console.WriteLine("Suma: " + stack.Sum().ToString());

Wynik działania:

Suma: 45

Dla prostej klasy Point2D:

public class Point2D{ public double x; public double y; public Point2D(double x, double y) { this.x = x; this.y = y; } };

Można wykonać sumowanie poszczególnych jej pól w sposób następujący:

var stack = new Stack<Point2D>(); stack.Push(new Point2D(20, 30)); stack.Push(new Point2D(100, 400)); double x_sum = stack.Sum(pkg => pkg.X); Console.WriteLine(x_sum); double y_sum = stack.Sum(pkg => pkg.Y); Console.WriteLine(y_sum);

Wynik działania powyższego kodu:

120
430

Maksymalna wartość liczbowa znajdująca się w stosie

Metoda Max dla typów prostych umożliwia znalezienie maksymalnej wartości zawartej w stosie:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Push(15); Console.WriteLine("Maksimum: " + stack.Max().ToString());

Wynik działania:

Maksimum: 20

Minimalna wartość liczbowa znajdująca się w stosie

Metoda Min dla typów prostych umożliwia znalezienie minimalnej wartości zawartej w stosie:

<code>var stack = new Stack<int>(); stack.Push(10); stack.Push(20); stack.Push(15); Console.WriteLine("Minimum: " + stack.Min().ToString());

Wynik działania:

Maksimum: 10
Propozycje książek
tytuł: C# 10. Programowanie. Tworzenie aplikacji Windows, internetowych i biurowych autor: Ian Griffiths

Tytuł:

C# 10. Programowanie. Tworzenie aplikacji Windows, internetowych i biurowych

Autor:

Ian Griffiths

tytuł: C# 10 i .NET 6 dla programistów aplikacji wieloplatformowych. Twórz aplikacje, witryny WWW oraz serwisy sieciowe za pomocą ASP.NET Core 6, Blazor i EF Core 6 w Visual Studio 2022 i Visual Studio Code. Wydanie VI autor: Mark J. Price

Tytuł:

C# 10 i .NET 6 dla programistów aplikacji wieloplatformowych. Twórz aplikacje, witryny WWW oraz serwisy sieciowe za pomocą ASP.NET Core 6, Blazor i EF Core 6 w Visual Studio 2022 i Visual Studio Code. Wydanie VI

Autor:

Mark J. Price

tytuł: Visual Studio 2022, C# i .NET. Programowanie kontrolek autor: Łukasz Sosna

Tytuł:

Visual Studio 2022, C# i .NET. Programowanie kontrolek

Autor:

Łukasz Sosna

tytuł: C# 10. Leksykon kieszonkowy autor: Joseph Albahari, Ben Albahari

Tytuł:

C# 10. Leksykon kieszonkowy

Autor:

Joseph Albahari, Ben Albahari

tytuł: Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Jak pisać świetne gry 2D w Unity. Niezależne programowanie w języku C# autor: Jared Halpern

Tytuł:

Jak pisać świetne gry 2D w Unity. Niezależne programowanie w języku C#

Autor:

Jared Halpern

tytuł: C# 9.0 w pigułce autor: Joseph Albahari

Tytuł:

C# 9.0 w pigułce

Autor:

Joseph Albahari

tytuł: C# 9.0. Leksykon kieszonkowy autor: Joseph Albahari, Ben Albahari

Tytuł:

C# 9.0. Leksykon kieszonkowy

Autor:

Joseph Albahari, Ben Albahari

tytuł: C# 8.0. Kompletny przewodnik dla praktyków. Wydanie VII autor: Mark Michaelis

Tytuł:

C# 8.0. Kompletny przewodnik dla praktyków. Wydanie VII

Autor:

Mark Michaelis

tytuł: C# 8.0 w pigułce autor: Joseph Albahari, Eric Johannsen

Tytuł:

C# 8.0 w pigułce

Autor:

Joseph Albahari, Eric Johannsen

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona