Xom9ik

Alg_Lab_7 (lll semester)

Nov 7th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.83 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Alg_Lab_7
  5. {
  6.     public class Stack<T>
  7.     {
  8.         LinkedList<T> _items = new LinkedList<T>();
  9.         public void Push(T value)
  10.         {
  11.             _items.AddLast(value);
  12.         }
  13.         public T Pop()
  14.         {
  15.             if (_items.Count == 0)
  16.                 throw new InvalidOperationException("The stack is empty");
  17.             T result = _items.Last.Value;
  18.             _items.RemoveLast();
  19.             return result;
  20.         }
  21.         public T Peek()
  22.         {
  23.             if (_items.Count == 0)
  24.                 throw new InvalidOperationException("The stack is empty");
  25.             return _items.Last.Value;
  26.         }
  27.         public int Count
  28.         {
  29.             get
  30.             {
  31.                 return _items.Count;
  32.             }
  33.         }
  34.     }
  35.  
  36.  
  37.     public class Queue<T>
  38.     {
  39.         LinkedList<T> _items = new LinkedList<T>();
  40.         public void Enqueue(T value)
  41.         {
  42.             _items.AddFirst(value);
  43.         }
  44.         public T Dequeue()
  45.         {
  46.             if (_items.Count == 0)
  47.                 throw new InvalidOperationException("The queue is empty");
  48.             T last = _items.Last.Value;
  49.             _items.RemoveLast();
  50.             return last;
  51.         }
  52.         public T Peek()
  53.         {
  54.             if (_items.Count == 0)
  55.                 throw new InvalidOperationException("The queue is empty");
  56.             return _items.Last.Value;
  57.         }
  58.         public int Count
  59.         {
  60.             get
  61.             {
  62.                 return _items.Count;
  63.             }
  64.         }
  65.     }
  66.  
  67.     public class Deque<T>
  68.     {
  69.         LinkedList<T> _items = new LinkedList<T>();
  70.         public void EnqueueFirst(T value)
  71.         {
  72.             _items.AddFirst(value);
  73.         }
  74.         public void EnqueueLast(T value)
  75.         {
  76.             _items.AddLast(value);
  77.         }
  78.         public T DequeueFirst()
  79.         {
  80.             if (_items.Count == 0)
  81.                 throw new InvalidOperationException("DequeueFirst called when deque is empty");
  82.             T temp = _items.First.Value;
  83.             _items.RemoveFirst();
  84.             return temp;
  85.         }
  86.         public T DequeueLast()
  87.         {
  88.             if (_items.Count == 0)
  89.                 throw new InvalidOperationException("DequeueLast called when deque is empty");
  90.             T temp = _items.Last.Value;
  91.             _items.RemoveLast();      
  92.             return temp;
  93.         }
  94.         public T PeekFirst()
  95.         {
  96.             if (_items.Count == 0)
  97.                 throw new InvalidOperationException("PeekFirst called when deque is empty");
  98.             return _items.First.Value;
  99.         }
  100.         public T PeekLast()
  101.         {
  102.             if (_items.Count == 0)
  103.                 throw new InvalidOperationException("PeekLast called when deque is empty");
  104.             return _items.Last.Value;
  105.         }
  106.         public int Count
  107.         {
  108.             get
  109.             {
  110.                 return _items.Count;
  111.             }
  112.         }
  113.     }
  114.  
  115.     class Program
  116.     {
  117.         static void Main(string[] args)
  118.         {
  119.             int size;
  120.             Random ran = new Random();
  121.  
  122.             Console.WriteLine("Stack\n");
  123.             Console.WriteLine("Enter size Stack:");
  124.             size = Convert.ToInt32(Console.ReadLine());
  125.             Stack<int> MyStack = new Stack<int>();
  126.             //a.    заполнение стека случайными числами и вывод стека на экран;
  127.             for (int i = 0; i < size; i++)
  128.                 MyStack.Push(ran.Next(1, 10));//добавляем элемент в вершину стека
  129.             while (MyStack.Count > 0)
  130.                 Console.WriteLine("Pop -> {0}", MyStack.Pop());
  131.             //b.    добавление элемента на вершину стека и вывод стека на экран;
  132.             MyStack.Push(size * size * size);
  133.             Console.WriteLine("Pop -> {0}", MyStack.Pop());
  134.             //c.    удаление элемента с вершины стека и вывод удаленного элемента на экран;
  135.             MyStack.Push(size * size * size);
  136.             Console.WriteLine("Pop -> {0}", MyStack.Pop());
  137.             //d.    вывод верхнего элемента стека на экран;
  138.             MyStack.Push(size * size * size);
  139.             Console.WriteLine("Peek -> {0}", MyStack.Peek()); //выводим верхний элемента стека
  140.             for (int i = 0; i < size; i++)
  141.                 MyStack.Push(ran.Next(1, 10));
  142.             Console.WriteLine("Count -> {0}", MyStack.Count);
  143.             Console.WriteLine("------------------------------\n");
  144.  
  145.             Console.WriteLine("Queue\n");
  146.             Console.WriteLine("Enter size Queue:");
  147.             size = Convert.ToInt32(Console.ReadLine());
  148.             Queue<int> que = new Queue<int>();
  149.             //a.    заполнение очереди случайными числами и вывод очереди на экран;
  150.             for (int i = 0; i < size; i++)
  151.                 que.Enqueue(ran.Next(1, 10));//добавляем элемент в конец очереди
  152.             while (que.Count > 0)
  153.                 Console.WriteLine("Dequeue -> {0}", que.Dequeue());
  154.             //b.    добавление элемента в очередь и вывод очереди на экран;
  155.             que.Enqueue(ran.Next(1, 10));
  156.             Console.WriteLine("Peek -> {0}", que.Peek());
  157.             //c.    удаление элемента из очереди и вывод удаленного элемента на экран;
  158.             que.Enqueue(ran.Next(1, 10));
  159.             Console.WriteLine("Dequeue -> {0}", que.Dequeue());
  160.             //d.    вывод количества элементов в очереди на экран;
  161.             for (int i = 0; i < size; i++)
  162.                 que.Enqueue(ran.Next(1, 10));
  163.             Console.WriteLine("Count -> {0}", que.Count);
  164.             Console.WriteLine("------------------------------\n");
  165.  
  166.             Console.WriteLine("Deque\n");
  167.             Console.WriteLine("Enter size Deque:");
  168.             size = Convert.ToInt32(Console.ReadLine());
  169.             Deque<int> deq = new Deque<int>();
  170.             //a.    заполнение дека случайными числами и вывод дека на экран;
  171.             //c.добавление элемента в конец дека и вывод дека на экран;
  172.             for (int i = size / 2; i < size; i++)
  173.                 deq.EnqueueLast(ran.Next(1, 25));//добавляем элемент в конец очереди
  174.             //b.добавление элемента в начало дека и вывод дека на экран;
  175.             for (int i = 0; i < size / 2; i++)
  176.                 deq.EnqueueFirst(ran.Next(1, 25));//добавляем элемент в начало очереди
  177.             while (deq.Count > 0)
  178.                 Console.WriteLine("DequeueFirst -> {0}", deq.DequeueFirst());
  179.             //d.    удаление элемента с начала дека и вывод удаленного элемента на экран;
  180.             for (int i = 0; i < size; i++)
  181.                 deq.EnqueueFirst(ran.Next(1, 25));
  182.             Console.WriteLine("DequeueFirst -> {0}", deq.DequeueFirst());
  183.             //e.    удаление элемента с конца дека и вывод удаленного элемента на экран;
  184.             for (int i = 0; i < size; i++)
  185.                 deq.EnqueueFirst(ran.Next(1, 25));
  186.             Console.WriteLine("DequeueLast -> {0}", deq.DequeueLast());
  187.             //f.    вывод элемента с начала дека на экран;
  188.             for (int i = 0; i < size; i++)
  189.                 deq.EnqueueFirst(ran.Next(1, 25));
  190.             Console.WriteLine("PeekFirst -> {0}", deq.PeekFirst());
  191.             //g.    вывод элемента с конца дека на экран;
  192.             for (int i = 0; i < size; i++)
  193.                 deq.EnqueueFirst(ran.Next(1, 25));
  194.             Console.WriteLine("PeekLast -> {0}", deq.PeekLast());
  195.             //h.    вывод количества элементов в деке на экран
  196.             for (int i = 0; i < size; i++)
  197.                 deq.EnqueueFirst(ran.Next(1, 25));
  198.             Console.WriteLine("Count -> {0}", deq.Count);
  199.             Console.WriteLine("------------Task 2------------\n");
  200.  
  201.             //Взять из стека h-й и g-й элементы и добавить в начало дека.
  202.             Console.WriteLine("Enter size Stack:");
  203.             size = Convert.ToInt32(Console.ReadLine());
  204.             Console.WriteLine("Enter h element:");
  205.             int h = Convert.ToInt32(Console.ReadLine());
  206.             Console.WriteLine("Enter g element:");
  207.             int g = Convert.ToInt32(Console.ReadLine());
  208.             Stack<int> MyStackTask2 = new Stack<int>();
  209.             for (int i = 0; i < size; i++)
  210.             {
  211.                 int tmp = ran.Next(200, 1000);
  212.                 MyStackTask2.Push(tmp);//добавляем элемент в вершину стека
  213.                 Console.WriteLine("Element" + (i + 1) + " -> {0}", tmp);
  214.             }
  215.  
  216.             Deque<int> deqTask2 = new Deque<int>();
  217.             for (int i = 0; i < size; i++)
  218.             {
  219.                 MyStackTask2.Pop();
  220.                 if (MyStackTask2.Count == h || MyStackTask2.Count == g)
  221.                 {
  222.                     deqTask2.EnqueueFirst(MyStackTask2.Pop());
  223.                     i += 1;
  224.                 }
  225.             }
  226.             Console.WriteLine("Result:");
  227.             while (deqTask2.Count > 0)
  228.                 Console.WriteLine("DequeueLast -> {0}", deqTask2.DequeueFirst());
  229.             Console.ReadLine();
  230.         }
  231.     }
  232. }
Advertisement
Add Comment
Please, Sign In to add comment