Guest User

Untitled

a guest
May 14th, 2021
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.08 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Lab_2
  4. {
  5.     class Program
  6.     {
  7.         public unsafe struct ListNode
  8.         {
  9.             public double Data; //інформаційне поле
  10.             public ListNode* Next; //адресне поле
  11.             public ListNode* Prev;
  12.         }
  13.        
  14.         public unsafe struct SingleLinkedList
  15.         {
  16.             public ListNode* Head; //покажчик на перший елемент списку
  17.             public ListNode* Tail; //покажчик на останній элемент списку (за необхідностю)
  18.             public int Count; //Лічильник елементів списку
  19.  
  20.             // Додавання елемента на початок списку
  21.             public static void AddFirst(SingleLinkedList* list, ListNode* Cur)
  22.             {
  23.                 if (list->Head != null)
  24.                     Cur->Next = list->Head;
  25.                 else
  26.                     list->Head->Prev = list->Head;
  27.                     list->Tail = Cur;
  28.                 list->Head = Cur;
  29.                 list->Count++;
  30.             }
  31.             // Додавання елемента в кінець списку
  32.             public static unsafe void AddLast(SingleLinkedList* list, ListNode* Cur)
  33.             {
  34.                 if (list->Tail != null)
  35.                     list->Tail->Next = Cur;
  36.                 else
  37.                     list->Head = Cur;
  38.                 Cur->Prev = Cur;
  39.                 list->Tail = Cur;
  40.                 list->Count++;
  41.             }          
  42.         }
  43.  
  44.         static unsafe void Main(string[] args)
  45.         {
  46.             Console.WriteLine("------------------------------\nEnd of list sign - 0\n------------------------------");
  47.             SingleLinkedList* list = stackalloc SingleLinkedList[sizeof(SingleLinkedList)];
  48.             while (true)
  49.             {
  50.                 Console.Write("Enter a number to list: ");
  51.                 int n = int.Parse(Console.ReadLine());
  52.                 if (n == 0)
  53.                     break;
  54.                 ListNode* Current = stackalloc ListNode[sizeof(ListNode)];
  55.                 Current->Data = n;
  56.                 SingleLinkedList.AddLast(list, Current);
  57.             }
  58.             Console.WriteLine($"-----------------------------\nNumber of elements - {list->Count}\n-----------------------------");
  59.  
  60.             ListNode* Cur = list->Head;
  61.             Console.WriteLine("Output of list items\n-----------------------------");
  62.             while (Cur != null)
  63.             {
  64.                 Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
  65.                 Cur = Cur->Next; //Перехід до наступного елемента
  66.             }
  67.             //Вставка переданого елменту після і перед кожним обраним елементом
  68.             Console.WriteLine("Елемент для вставки: ");
  69.             int toInsert = int.Parse(Console.ReadLine());
  70.             Console.WriteLine("Елемент, після і перед яким вставляти: ");
  71.             int val = int.Parse(Console.ReadLine());
  72.             Cur = list->Head;
  73.             while (Cur != null)
  74.             {
  75.                 //Якщо поточний елемент співпадає з переданим елементом користувача, після і перед якого треба вставити новий елемент
  76.                 if (Cur->Data == val)
  77.                 {
  78.                     //Вставляємо елемент перед поточним
  79.                     ListNode* ItemBeforeData = stackalloc ListNode[sizeof(ListNode)];
  80.                     ItemBeforeData->Data = toInsert;
  81.                     ItemBeforeData->Prev = Cur->Prev;
  82.                     ItemBeforeData->Next = Cur;
  83.                     if (Cur->Prev != null)
  84.                     {
  85.                         Cur->Prev->Next = ItemBeforeData;
  86.                     }
  87.                     else
  88.                     {
  89.                         list->Head = ItemBeforeData;
  90.                     }
  91.                     //Вставляємо елемент після поточного
  92.                     ListNode* ItemAfterData = stackalloc ListNode[sizeof(ListNode)];
  93.                     ItemAfterData->Data = toInsert;
  94.                     ItemAfterData->Prev = Cur;
  95.                     ItemAfterData->Next = Cur->Next;
  96.                     if (Cur->Next != null)
  97.                     {
  98.                         Cur->Next->Prev = ItemAfterData;
  99.                     }
  100.                     Cur->Next = ItemAfterData;
  101.                 }
  102.                 Cur = Cur->Next;
  103.             }
  104.  
  105.  
  106.             // Видаленя елемента після кожного відємного елемента
  107.  
  108.             //Виведення елементів списку
  109.             Cur = list->Head;
  110.             while (Cur != null) //Поки не кінець списку
  111.             {
  112.                 Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
  113.                 Cur = Cur->Next; //Перехід до наступного елемента
  114.             }
  115.             //Console.WriteLine("Пiсля видалення елементiв:");
  116.             //Li* Curr1 = Head;
  117.             //if (Curr1 != null) //перевірка на коректність
  118.             //{
  119.             //    if (Curr1 == Head && Curr1->Data % 3 == 0)
  120.             //    {//виключення першого элемента
  121.             //        Head = Head->Next;
  122.             //        Head->Prev = null;
  123.             //    }
  124.             //    else
  125.             //    {//виключення останнього елемента
  126.             //        if (Curr1->Next == null && Curr1->Data % 3 == 0)
  127.             //        {
  128.             //            Curr1->Prev->Next = null;
  129.             //            Last = Curr1->Prev->Next;
  130.             //        }
  131.             //        else
  132.             //        {//виключення не першого та не останнього елемента
  133.             //            while (Curr1 != null)
  134.             //            {
  135.             //                if (Curr1->Data % 3 == 0)
  136.             //                {
  137.             //                    Curr1->Prev->Next = Curr1->Next;
  138.             //                    Curr1->Next->Prev = Curr1->Prev;
  139.             //                }
  140.             //                Curr1 = Curr1->Next;
  141.             //            }
  142.             //        }
  143.             //    }
  144.             //}
  145.             // добавить в конец
  146.      
  147.             Console.WriteLine("-----------------------------\nResult list\n-----------------------------");
  148.             ListNode* Cur1 = list->Head;
  149.             while (Cur1 != null)
  150.             {
  151.                 Console.WriteLine(Cur1->Data);
  152.                 Cur1 = Cur1->Next;
  153.             }
  154.             Console.WriteLine("-----------------------------");
  155.             Console.ReadKey();
  156.         }
  157.     }
  158. }
  159.  
Advertisement
Add Comment
Please, Sign In to add comment