Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Упорядоченный список

Читайте также:
  1. I. Список рекомендуемых источников и литературы
  2. IX. СПИСОК СИМВОЛОВ
  3. Библиографический список
  4. Библиографический список
  5. Библиографический список
  6. Библиографический список
  7. Библиографический список
  8. Библиографический список
  9. Библиографический список
  10. Библиографический список

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; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.004 сек.