Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Упорядоченный список
Else Else Do { Console.WriteLine("{0}", p.inf); p = p.next; } while (p != null); } Метод FindNode() Листинг 8.6. Метод FindNode() public MyNode FindNode(int val) // Поиск узла { MyNode p = head; bool ok = false; while ((p != null) && !ok) { ok = p.inf == val; if (!ok) p = p.next; } return p; } Метод Delete(). Удаление элемента из списка должно состоять из двух действий. Первое – исключение элемента из списка, то есть изменение ссылок. Листинг 8.7. Метод Delete() public void Delete(int index) // Удалить по индексу { if (index != 0) { MyNode p = head; for (int i = 0; i < index - 1; i++) p = p.next; if (p.next != null) p.next = p.next.next; } head = head.next; count--; } Это показано на рис. 8.2. Рис. 8.2. Удаление элемента из списка Метод Insert() Листинг 8.8. Метод Insert() public void Insert(int index,int val) // Вставить по индексу { if (index != 0) { MyNode p = head; for (int i = 0; i < index; i++) p = p.next; MyNode q = new MyNode(val, p.next); p.next = q; } { MyNode q = new MyNode(val, head); head = q; } count++; } Результат показан на рис. 8.3.
Рис. 8.3. Включение в список после заданного элемента. Если требуется включение перед элементом, а не после него, то кажется, что однонаправленность списка препятствует этому, поскольку нет доступа к предыдущему элементу. Однако простой прием позволяет решить эту проблему. Прием заключается в следующем: новый элемент в действительности вставляется после p, но затем происходит обмен значениями между новым элементом и p. С учетом того, что значение нового элемента – val, это выполняется операторами
MyNode q = new MyNode(p.inf, p.next); p.inf = val; p.next = q;
и показано на рис. 8.4. Рис. 8.4. Включение в список перед заданным элементом. Код метода Main() программы с демонстрацией методов класса MyList приведен ниже: Листинг 8.9. Код метода Main() static void Main(string[] args) { Console.WriteLine("Init"); MyList list = new MyList(); for (int i = 1; i <= 10; i++) list.Add(i); list.Printer(); Console.ReadKey();
Console.WriteLine(); Console.WriteLine("FindNode(5)={0}", list.FindNode(5).inf); Console.ReadKey();
Console.WriteLine(); list.Delete(9); Console.WriteLine("Delete(9)"); list.Printer(); Console.ReadKey();
Console.WriteLine(); Console.WriteLine("Insert(5,55)"); list.Insert(5, 55); list.Printer(); Console.ReadKey(); } Для создания отсортированного списка метод добавления элемента AddSort() должен сначала найти элемент, за которым будет вставлен новый элемент: Листинг 8.10. Метод AddSort() public void AddSort(int inf) { if (head != null) { MyNode q = head; if (inf < q.inf) { // вставить перед головой MyNode p = new MyNode(inf, q); head = p; }
Дата добавления: 2014-03-11; просмотров: 291; Нарушение авторских прав Мы поможем в написании ваших работ! |