Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Lab_2
- {
- class Program
- {
- public unsafe struct ListNode
- {
- public double Data; //інформаційне поле
- public ListNode* Next; //адресне поле
- public ListNode* Prev;
- }
- public unsafe struct SingleLinkedList
- {
- public ListNode* Head; //покажчик на перший елемент списку
- public ListNode* Tail; //покажчик на останній элемент списку (за необхідностю)
- public int Count; //Лічильник елементів списку
- // Додавання елемента на початок списку
- public static void AddFirst(SingleLinkedList* list, ListNode* Cur)
- {
- if (list->Head != null)
- Cur->Next = list->Head;
- else
- list->Head->Prev = list->Head;
- list->Tail = Cur;
- list->Head = Cur;
- list->Count++;
- }
- // Додавання елемента в кінець списку
- public static unsafe void AddLast(SingleLinkedList* list, ListNode* Cur)
- {
- if (list->Tail != null)
- list->Tail->Next = Cur;
- else
- list->Head = Cur;
- Cur->Prev = Cur;
- list->Tail = Cur;
- list->Count++;
- }
- }
- static unsafe void Main(string[] args)
- {
- Console.WriteLine("------------------------------\nEnd of list sign - 0\n------------------------------");
- SingleLinkedList* list = stackalloc SingleLinkedList[sizeof(SingleLinkedList)];
- while (true)
- {
- Console.Write("Enter a number to list: ");
- int n = int.Parse(Console.ReadLine());
- if (n == 0)
- break;
- ListNode* Current = stackalloc ListNode[sizeof(ListNode)];
- Current->Data = n;
- SingleLinkedList.AddLast(list, Current);
- }
- Console.WriteLine($"-----------------------------\nNumber of elements - {list->Count}\n-----------------------------");
- ListNode* Cur = list->Head;
- Console.WriteLine("Output of list items\n-----------------------------");
- while (Cur != null)
- {
- Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
- Cur = Cur->Next; //Перехід до наступного елемента
- }
- //Вставка переданого елменту після і перед кожним обраним елементом
- Console.WriteLine("Елемент для вставки: ");
- int toInsert = int.Parse(Console.ReadLine());
- Console.WriteLine("Елемент, після і перед яким вставляти: ");
- int val = int.Parse(Console.ReadLine());
- Cur = list->Head;
- while (Cur != null)
- {
- //Якщо поточний елемент співпадає з переданим елементом користувача, після і перед якого треба вставити новий елемент
- if (Cur->Data == val)
- {
- //Вставляємо елемент перед поточним
- ListNode* ItemBeforeData = stackalloc ListNode[sizeof(ListNode)];
- ItemBeforeData->Data = toInsert;
- ItemBeforeData->Prev = Cur->Prev;
- ItemBeforeData->Next = Cur;
- if (Cur->Prev != null)
- {
- Cur->Prev->Next = ItemBeforeData;
- }
- else
- {
- list->Head = ItemBeforeData;
- }
- //Вставляємо елемент після поточного
- ListNode* ItemAfterData = stackalloc ListNode[sizeof(ListNode)];
- ItemAfterData->Data = toInsert;
- ItemAfterData->Prev = Cur;
- ItemAfterData->Next = Cur->Next;
- if (Cur->Next != null)
- {
- Cur->Next->Prev = ItemAfterData;
- }
- Cur->Next = ItemAfterData;
- }
- Cur = Cur->Next;
- }
- // Видаленя елемента після кожного відємного елемента
- //Виведення елементів списку
- Cur = list->Head;
- while (Cur != null) //Поки не кінець списку
- {
- Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
- Cur = Cur->Next; //Перехід до наступного елемента
- }
- //Console.WriteLine("Пiсля видалення елементiв:");
- //Li* Curr1 = Head;
- //if (Curr1 != null) //перевірка на коректність
- //{
- // if (Curr1 == Head && Curr1->Data % 3 == 0)
- // {//виключення першого элемента
- // Head = Head->Next;
- // Head->Prev = null;
- // }
- // else
- // {//виключення останнього елемента
- // if (Curr1->Next == null && Curr1->Data % 3 == 0)
- // {
- // Curr1->Prev->Next = null;
- // Last = Curr1->Prev->Next;
- // }
- // else
- // {//виключення не першого та не останнього елемента
- // while (Curr1 != null)
- // {
- // if (Curr1->Data % 3 == 0)
- // {
- // Curr1->Prev->Next = Curr1->Next;
- // Curr1->Next->Prev = Curr1->Prev;
- // }
- // Curr1 = Curr1->Next;
- // }
- // }
- // }
- //}
- // добавить в конец
- Console.WriteLine("-----------------------------\nResult list\n-----------------------------");
- ListNode* Cur1 = list->Head;
- while (Cur1 != null)
- {
- Console.WriteLine(Cur1->Data);
- Cur1 = Cur1->Next;
- }
- Console.WriteLine("-----------------------------");
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment