Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Alg_Lab_7
- {
- public class Stack<T>
- {
- LinkedList<T> _items = new LinkedList<T>();
- public void Push(T value)
- {
- _items.AddLast(value);
- }
- public T Pop()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("The stack is empty");
- T result = _items.Last.Value;
- _items.RemoveLast();
- return result;
- }
- public T Peek()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("The stack is empty");
- return _items.Last.Value;
- }
- public int Count
- {
- get
- {
- return _items.Count;
- }
- }
- }
- public class Queue<T>
- {
- LinkedList<T> _items = new LinkedList<T>();
- public void Enqueue(T value)
- {
- _items.AddFirst(value);
- }
- public T Dequeue()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("The queue is empty");
- T last = _items.Last.Value;
- _items.RemoveLast();
- return last;
- }
- public T Peek()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("The queue is empty");
- return _items.Last.Value;
- }
- public int Count
- {
- get
- {
- return _items.Count;
- }
- }
- }
- public class Deque<T>
- {
- LinkedList<T> _items = new LinkedList<T>();
- public void EnqueueFirst(T value)
- {
- _items.AddFirst(value);
- }
- public void EnqueueLast(T value)
- {
- _items.AddLast(value);
- }
- public T DequeueFirst()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("DequeueFirst called when deque is empty");
- T temp = _items.First.Value;
- _items.RemoveFirst();
- return temp;
- }
- public T DequeueLast()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("DequeueLast called when deque is empty");
- T temp = _items.Last.Value;
- _items.RemoveLast();
- return temp;
- }
- public T PeekFirst()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("PeekFirst called when deque is empty");
- return _items.First.Value;
- }
- public T PeekLast()
- {
- if (_items.Count == 0)
- throw new InvalidOperationException("PeekLast called when deque is empty");
- return _items.Last.Value;
- }
- public int Count
- {
- get
- {
- return _items.Count;
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- int size;
- Random ran = new Random();
- Console.WriteLine("Stack\n");
- Console.WriteLine("Enter size Stack:");
- size = Convert.ToInt32(Console.ReadLine());
- Stack<int> MyStack = new Stack<int>();
- //a. заполнение стека случайными числами и вывод стека на экран;
- for (int i = 0; i < size; i++)
- MyStack.Push(ran.Next(1, 10));//добавляем элемент в вершину стека
- while (MyStack.Count > 0)
- Console.WriteLine("Pop -> {0}", MyStack.Pop());
- //b. добавление элемента на вершину стека и вывод стека на экран;
- MyStack.Push(size * size * size);
- Console.WriteLine("Pop -> {0}", MyStack.Pop());
- //c. удаление элемента с вершины стека и вывод удаленного элемента на экран;
- MyStack.Push(size * size * size);
- Console.WriteLine("Pop -> {0}", MyStack.Pop());
- //d. вывод верхнего элемента стека на экран;
- MyStack.Push(size * size * size);
- Console.WriteLine("Peek -> {0}", MyStack.Peek()); //выводим верхний элемента стека
- for (int i = 0; i < size; i++)
- MyStack.Push(ran.Next(1, 10));
- Console.WriteLine("Count -> {0}", MyStack.Count);
- Console.WriteLine("------------------------------\n");
- Console.WriteLine("Queue\n");
- Console.WriteLine("Enter size Queue:");
- size = Convert.ToInt32(Console.ReadLine());
- Queue<int> que = new Queue<int>();
- //a. заполнение очереди случайными числами и вывод очереди на экран;
- for (int i = 0; i < size; i++)
- que.Enqueue(ran.Next(1, 10));//добавляем элемент в конец очереди
- while (que.Count > 0)
- Console.WriteLine("Dequeue -> {0}", que.Dequeue());
- //b. добавление элемента в очередь и вывод очереди на экран;
- que.Enqueue(ran.Next(1, 10));
- Console.WriteLine("Peek -> {0}", que.Peek());
- //c. удаление элемента из очереди и вывод удаленного элемента на экран;
- que.Enqueue(ran.Next(1, 10));
- Console.WriteLine("Dequeue -> {0}", que.Dequeue());
- //d. вывод количества элементов в очереди на экран;
- for (int i = 0; i < size; i++)
- que.Enqueue(ran.Next(1, 10));
- Console.WriteLine("Count -> {0}", que.Count);
- Console.WriteLine("------------------------------\n");
- Console.WriteLine("Deque\n");
- Console.WriteLine("Enter size Deque:");
- size = Convert.ToInt32(Console.ReadLine());
- Deque<int> deq = new Deque<int>();
- //a. заполнение дека случайными числами и вывод дека на экран;
- //c.добавление элемента в конец дека и вывод дека на экран;
- for (int i = size / 2; i < size; i++)
- deq.EnqueueLast(ran.Next(1, 25));//добавляем элемент в конец очереди
- //b.добавление элемента в начало дека и вывод дека на экран;
- for (int i = 0; i < size / 2; i++)
- deq.EnqueueFirst(ran.Next(1, 25));//добавляем элемент в начало очереди
- while (deq.Count > 0)
- Console.WriteLine("DequeueFirst -> {0}", deq.DequeueFirst());
- //d. удаление элемента с начала дека и вывод удаленного элемента на экран;
- for (int i = 0; i < size; i++)
- deq.EnqueueFirst(ran.Next(1, 25));
- Console.WriteLine("DequeueFirst -> {0}", deq.DequeueFirst());
- //e. удаление элемента с конца дека и вывод удаленного элемента на экран;
- for (int i = 0; i < size; i++)
- deq.EnqueueFirst(ran.Next(1, 25));
- Console.WriteLine("DequeueLast -> {0}", deq.DequeueLast());
- //f. вывод элемента с начала дека на экран;
- for (int i = 0; i < size; i++)
- deq.EnqueueFirst(ran.Next(1, 25));
- Console.WriteLine("PeekFirst -> {0}", deq.PeekFirst());
- //g. вывод элемента с конца дека на экран;
- for (int i = 0; i < size; i++)
- deq.EnqueueFirst(ran.Next(1, 25));
- Console.WriteLine("PeekLast -> {0}", deq.PeekLast());
- //h. вывод количества элементов в деке на экран
- for (int i = 0; i < size; i++)
- deq.EnqueueFirst(ran.Next(1, 25));
- Console.WriteLine("Count -> {0}", deq.Count);
- Console.WriteLine("------------Task 2------------\n");
- //Взять из стека h-й и g-й элементы и добавить в начало дека.
- Console.WriteLine("Enter size Stack:");
- size = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Enter h element:");
- int h = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Enter g element:");
- int g = Convert.ToInt32(Console.ReadLine());
- Stack<int> MyStackTask2 = new Stack<int>();
- for (int i = 0; i < size; i++)
- {
- int tmp = ran.Next(200, 1000);
- MyStackTask2.Push(tmp);//добавляем элемент в вершину стека
- Console.WriteLine("Element" + (i + 1) + " -> {0}", tmp);
- }
- Deque<int> deqTask2 = new Deque<int>();
- for (int i = 0; i < size; i++)
- {
- MyStackTask2.Pop();
- if (MyStackTask2.Count == h || MyStackTask2.Count == g)
- {
- deqTask2.EnqueueFirst(MyStackTask2.Pop());
- i += 1;
- }
- }
- Console.WriteLine("Result:");
- while (deqTask2.Count > 0)
- Console.WriteLine("DequeueLast -> {0}", deqTask2.DequeueFirst());
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment