// определение первого отрицательного элемента в списке static void FirstNeg(ref UnidirectionalList beg, ref UnidirectionalList begNeg) { UnidirectionalList p = beg; while (p != null) { if (p.data < 0) { begNeg = MakePoint(p.data); beg = DelElement(beg, p.data); break; } p = p.next;//переход к следующему элементу } }
//формирование списка из n элементов путем добавления элементов в конец списка с помощью ДСЧ public static UnidirectionalList MakeListToEndRandom(int size) //добавление в конец { int info = rnd.Next(MININT_VALUE, MAXINT_VALUE); UnidirectionalList beg = MakePoint(info); UnidirectionalList r = beg; for (int i = 1; i < size; i++) { info = rnd.Next(MININT_VALUE, MAXINT_VALUE); UnidirectionalList p = MakePoint(info); r.next = p; r = p; } return(beg); }
//формирование списка из n элементов путем добавления элементов в конец списка с клавиатуры public static UnidirectionalList MakeListToEndHand(int size) //добавление в конец { int info = AskData.ReadIntNumber("Введите 1 элемент: ", MININT_VALUE, MAXINT_VALUE); UnidirectionalList beg = MakePoint(info); UnidirectionalList r = beg; for (int i = 2; i <= size; i++) { Console.Write("Введите {0} элемент:", i); info = AskData.ReadIntNumber("", MININT_VALUE, MAXINT_VALUE); UnidirectionalList p = MakePoint(info); r.next = p; r = p; } return(beg); }
public static UnidirectionalList MakeList(ref int size) //для формирования списка двумя способами { int checkMakeUnidirectionalList = 0; UnidirectionalList beg = null; PrintForm(); checkMakeUnidirectionalList = AskData.ReadIntNumber("", 1, 3); switch (checkMakeUnidirectionalList) { case 1: beg = MakeListToEndHand(size); Console.WriteLine("Однонаправленный список сформирован"); break; case 2: beg = MakeListToEndRandom(size); Console.WriteLine("Однонаправленный список сформирован"); break; case 3: size = 0; Console.WriteLine("Однонаправленный список не сформирован!"); break; } return(beg); }
// печать элементов списка public static void ShowList(UnidirectionalList beg) { //проверка наличия элементов в списке if (beg == null) { Console.WriteLine("Список пуст!"); return; } UnidirectionalList p = beg; while (p != null) { Console.Write(p); p = p.next;//переход к следующему элементу } Console.WriteLine(); }
static UnidirectionalList DelElement(UnidirectionalList beg, int key) { if (beg.data == key)//удаляем первый элемент { beg = beg.next; return(beg); } UnidirectionalList p = beg; //ищем элемент для удаления и встаем на предыдущий for (int i = 1; p.next.data != key && p != null; i++) { p = p.next; } //исключаем элемент из списка p.next = p.next.next; return(beg); }
// формирование списков: с отриццательными значениями, с положительными значениями public static UnidirectionalList FormPosAndNegList(UnidirectionalList beg, ref UnidirectionalList begPos, ref UnidirectionalList begNeg) { //проверка наличия элементов в списке if (beg == null) { Console.WriteLine("Список пуст!"); return(beg); } FirstPos(ref beg, ref begPos); FirstNeg(ref beg, ref begNeg); UnidirectionalList pos = begPos; UnidirectionalList neg = begNeg; UnidirectionalList p = beg; while (p != null) { if (p.data > 0) { UnidirectionalList elemPos = MakePoint(p.data); pos.next = elemPos; pos = elemPos; beg = DelElement(beg, p.data); } if (p.data < 0) { UnidirectionalList elemNeg = MakePoint(p.data); neg.next = elemNeg; neg = elemNeg; beg = DelElement(beg, p.data); } p = p.next;//переход к следующему элементу } return(beg); }
static void Run()//работа с однонаправленными списками { int checkRun1 = 0, left = 1, right = 3; int size = 0; UnidirectionalList beg = null; do { PrintMenu(); checkRun1 = AskData.ReadIntNumber("Введите номер пункта, который хотите выполнить", left, right); switch (checkRun1) { case 1: //создать список { size = AskData.ReadIntNumber("Введите количество элементов списка:", MIN_SIZE, MAX_SIZE); beg = UnidirectionalList.MakeList(ref size); UnidirectionalList.ShowList(beg); break; } case 2: //pos и neg списки { UnidirectionalList begPos = null; UnidirectionalList begNeg = null; beg = UnidirectionalList.FormPosAndNegList(beg, ref begPos, ref begNeg); Console.WriteLine("Главный список:"); UnidirectionalList.ShowList(beg); Console.WriteLine("Список, состоящий из положительных элементов:"); UnidirectionalList.ShowList(begPos); Console.WriteLine("Список, состоящий из отрицательных элементов:"); UnidirectionalList.ShowList(begNeg); break; } } } while (checkRun1 != right); }
//создание элемента списка static UnidirectionalList MakePoint(int d) { UnidirectionalList p = new UnidirectionalList(d); return(p); }
public UnidirectionalList(int d)//конструктор с параметрами { data = d; next = null; }
public UnidirectionalList next; //адресное поле public UnidirectionalList() //конструктор без параметров { data = 0; next = null; }