1 / 20

Стек та черга у C#

Стек та черга у C#. Узагальнююче повторення. Підготовка до проведення практичних робіт “Використання стеку” та “Робота з чергою”. Які основні методи по роботі зі стеком?. Як працювати з елементами стека - як додати елемент у стек і як вилучити елемент з стека?

Download Presentation

Стек та черга у C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Стек та черга у C# Узагальнююче повторення. Підготовка до проведення практичних робіт “Використаннястеку” та “Робота з чергою”

  2. Які основні методи по роботі зі стеком? Як працювати з елементами стека - як додати елемент у стек і як вилучити елемент з стека? При цьому варто пам'ятати про те, що додається елемент завжди в вершину стека і вилучається також із вершини, тому для того, щоб додати / вилучити елемент, не потрібно вказувати його місце розташування (індекс).

  3. Створення стека Стек створюється за допомогою наступного конструктора: StackmyStack = newStack (); У дужках можна вказати початкову довжину стека: StackmyStack = newStack (10); Створили стек з довжиною рівною 10, якщо додамо в нього більше елементів, то довжина зміниться автоматично.

  4. Основні операції (методи)роботи із стеком: Push(елемент); - додає заданий елемент у стек Peek(); - повертає елемент, що знаходиться у вершині стека Pop (); - повертає елемент, що знаходиться у вершині стека, видаляючи при цьому його зі стека

  5. Додаванняелементів у стек Щобдодатиелемент у стек, потрібновикликати метод Push, передавши йому як параметр добавляемое значення. Приклад: Stack myStack = new Stack(); myStack.Push(“Каждый”); myStack.Push(“Охотник”); myStack.Push(“Желает”); myStack.Push(“Знать”); myStack.Push(“Где”); myStack.Push(“Сидит”); myStack.Push(“Фазан”); У стек можнадодатипорожнійелемент, передавши методу Push значенняNULL.

  6. Витягелементівз стека Для добуванняелементівзі стеку використовується метод Pop. Цей метод добуваєзі стеку один елемент: Console.WriteLine (myStack.Pop ()); При спробівитягтиелементз пустого стека виникаєвиключення. Тому потрібнопередбачитиобробниквиключень. Для контролю поточного розміру стека використовується метод Count myStack.Count ();

  7. Перевіркавмістуверхівки стека Метод Peekдозволяєподивитисявмістверхівки стека, не витягуючиелементз стека. Console.WriteLine (myStack.Peek ());

  8. Перегляд вмісту стека за допомогою ітератора Вміст стека можна подивитися за допомогою ітератора класу IEnumerator Приклад: IEnumeratormyEnumerator = myStack.GetEnumerator (); while (myEnumerator.MoveNext ()) { Console.WriteLine ("{0}", myEnumerator.Current); } Слід звернути увагу на те, що елементи виведуться не в порядку додавання а в зворотному. Перегляд стека за допомогою ітератора не змінює вмісту стека.

  9. Вилученняелементів Для вилученнявсіхелементівз стека призначений метод Clear. Видаленняокремихелементівможливотількипід час їхвидобуванняз стека методом Pop.

  10. Приклад роботи із стеком Stack myStack= new Stack(); myStack.Push("Каждый"); myStack.Push("Охотник"); myStack.Push("Желает"); myStack.Push("Знать"); myStack.Push("Где"); myStack.Push("Сидит"); myStack.Push("Фазан"); Console.WriteLine("Всього в стеку {0} елементiв", myStack.Count); IEnumeratormyEnumerator = myStack.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("{0}", myEnumerator.Current); } Console.WriteLine("Перший елемент: myStack.Peek ()"); Console.WriteLine("Витягуємо один елемент: {0}", myStack.Pop()); Console.WriteLine("Витягуємонаступнийелемент: {0}", myStack.Pop()); Console.WriteLine("У стецiзалишилося {0} елементiв", myStack.Count); IEnumerator myEnumerator1 = myStack.GetEnumerator(); while (myEnumerator1.MoveNext()) { Console.WriteLine("{0}", myEnumerator1.Current); } Console.ReadLine();

  11. Приклад роботи із стеком usingSystem.Collections; namespace ConsoleApplication1 { classProgram { staticvoidMain(string[] args) { Stackst = newStack(); st.Push("Перше слово"); st.Push("Друге слово"); st.Push("Третє слово"); Console.WriteLine(st.Pop()); // вивід головного елемента стека "Третє слово" та його видалення з стека // в голову стека стане друге слово Console.WriteLine(st.Peek()); // вивід наступного головного елемента стека - вивід елемента "Друге слово" при цьому слово залишається у стеку Console.WriteLine(st.Pop()); //вивід елемента "Друге слово" та його видалення з стека Console.WriteLine(st.Pop()); //вивід елемента "Перше слово" та його видалення з стека – стек стає порожнім Try { Console.WriteLine (st.Pop ()); // намагаємося вивести та видалити елемент зі стеку, коли стек вже порожній } catch (Exception e) { Console.WriteLine (e.Message); // виводимо повідомлення про помилку } } } }

  12. Основні операції з чергою Основні операції з чергою - додавання елемента і видалення елемента. Методи мови C#, що дозволяють здійснювати ці операції. Enqueue (елемент); - додає заданий елемент у чергу Peek (); - повертає елемент, що знаходиться першим у черзі Dequeue (); - повертає елемент, що знаходиться першим у черзі і видаляє його з черги

  13. Для розуміння того, що означає кожен із перелічених методів, можна скористатися наступною ілюстрацією. Нехай ми є продавцем і власником магазину. Тоді, якщо до нас в магазин хтось заходить і хоче щось купити, то ми його додаємо в чергу методом Enqueue. Якщо ми в даний момент нікого не обслуговуємо або тільки що закінчили обслуговувати покупця і збираємося обслуговувати наступного, то ми викликаємо метод Dequeue, отримуючи, таким чином, наступного покупця. Якщо ж нам потрібно подивитися, хто стоїть наступним у черзі, то ми скористаємося методом Peek, тому при цьому (подивившись наступного покупця) ми нікого не обслужили.

  14. Прикладроботи з чергою.Визначаємо клас «Покупець»: class Buyer { string fio { get; set; } public Buyer(string fio) { this.fio = fio; } public override string ToString() { return fio; } }

  15. У методі Main пишемо наступний код: Queue<Buyer> queue = newQueue<Buyer>(); Console.WriteLine("До нас приходять покупці: Покупець 1, Покупець 2, Покупець 3"); queue.Enqueue(newBuyer("Покупець 1")); queue.Enqueue(newBuyer("Покупець 2")); queue.Enqueue(newBuyer("Покупець 3")); Console.WriteLine("Починаємо обслуговування покупців"); Console.WriteLine("Обслуговуємо:" + queue.Dequeue()); Console.WriteLine("А наступним буде" + queue.Peek()); Console.WriteLine("Завершили обслуговування, починаємо обслуговувати" + queue.Dequeue()); Console.WriteLine("А наступним буде" + queue.Peek()); Console.WriteLine("Завершили обслуговування, починаємо обслуговувати" + queue.Dequeue());

  16. Застосування стандартної властивості Count для отримання кількості елементів: Queue<Buyer> queue = newQueue<Buyer>(); Console.WriteLine("До нас приходять покупці: Покупець 1, Покупець 2, Покупець 3"); queue.Enqueue(newBuyer("Покупець 1")); queue.Enqueue(newBuyer("Покупець 2")); queue.Enqueue(newBuyer("Покупець 3")); Console.WriteLine("Починаємо обслуговування покупців "); Console.WriteLine("Обслуговуємо: " + queue.Dequeue()); while (queue.Count > 0) //поки номер черги більший 0 { Console.WriteLine("А наступним буде " + queue.Peek()); Console.WriteLine("Завершили обслуговування, починаємо обслуговувати " + queue.Dequeue()); } Console.WriteLine("Ура! Всіх обслужили.");

  17. Queue<Buyer> queue = new Queue<Buyer>(); Console.WriteLine("Учнiздають залiк по черзi: Козак, Петренко, Чуб "); queue.Enqueue(new Buyer("Козак")); queue.Enqueue(new Buyer("Петренко")); queue.Enqueue(new Buyer("Чуб")); Console.WriteLine("Починаємоздавати залiк "); Console.WriteLine("Слухаємо: " + queue.Dequeue()); Console.WriteLine("Наступнимздає " + queue.Peek()); Console.WriteLine("Залiк здано, чергаздавати залiк " + queue.Dequeue()); Console.WriteLine("А наступним буде " + queue.Peek()); Console.WriteLine("вислухали, починаєздавати залiк "+queue.Dequeue());

More Related