Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

/// ensure: добавить новый элемент (elem) слева от курсора;

/// put_right(elem): require: true;

/// ensure: добавить новый элемент (elem) справа от курсора;

/// remove: require: not empty;

/// ensure: удалить активный элемент;

/// особо обрабатывается удаление последнего и единственного элементов

/// операции с курсором:

/// start: require: true;

/// ensure: сделать активным первый элемент;

/// finish: require: true;

/// ensure:

сделать активным последний элемент;

/// go_prev: require: not (index = 1);

/// ensure: сделать активным предыдущий элемент;

/// go_next: require: not (index = count);

/// ensure: сделать активным последующий элемент;

/// go_i(i): require: (i in [1, count]);

/// ensure: сделать активным элемент с индексом i;

/// операции поиска:

/// search_prev(elem): require: not (index = 1);

/// ensure: сделать активным первый элемент elem слева от курсора;

/// Успех или неуспех поиска сохранять в булевской переменной search_res

/// search_next: require: not (index = count);

/// ensure: сделать активным первый элемент elem справа от курсора;

/// успех или неуспех поиска сохранять в булевской переменной search_res

/// </summary>

public class TwoWayList

{

public TwoWayList

{

first = cursor = last = null;

count = index = 0;

search_res = false;

}//конструктор

/// <summary>

/// first, cursor, last — ссылки на первый,

/// активный и последний элементы списка

/// Запросы count, index search_res также

/// реализуются атрибутами.

/// Запросы empty, item реализуются функциями

/// </summary>

protected TwoLinkable first, cursor, last;

protected int count, index;

protected bool search_res;

//доступ на чтение к закрытым свойствам;

public int Count

{

get

{

return(count);

}

}

public int Index

{

get

{

return(index);

}

}

public bool Search_res

{

get

{

return(search_res);

}

}

/// <summary>

/// require: true; возвращает true для непустого списка

/// </summary>

/// <returns></returns>

public bool empty

{

return(first == null);

}//empty

/// <summary>

/// require: not empty; возвращает активный

/// элемент типа G;

/// </summary>

/// <returns></returns>

public Figure item

{

return(cursor.Item);

}//item

/// <summary>

/// require: true;

/// ensure:

добавить новый элемент (elem) слева

/// от курсора;

/// </summary>

/// <param name="еlеm">Тип Figure играет роль родового типа G

/// хранимого элемента elem</param>

public void put_left(Figure elem)

{

TwoLinkable newitem = new TwoLinkable;

newitem.Item = elem;

newitem.Next = cursor;

if (empty) //список пуст

{

first = cursor = last = newitem;

index =1; count = 1;

}

else

{

if (index == 1)

first =newitem;

else

cursor.Prev.Next = newitem;

newitem.Prev = cursor.Prev; cursor.Prev = newitem;

count++; index++;

}

}//put_right

/// <summary>

/// require: true;

/// ensure: добавить новый элемент (elem) справа от курсора;

/// </summary>

/// <param name="еlеm">Тип Figure играет роль родового типа G

/// хранимого элемента elem</param>

public void put_right(Figure elem)

{

TwoLinkable newitem = new TwoLinkable;

newitem.Item = elem;

newitem.Prev = cursor;

if (empty) //список пуст

{

first = cursor = last = newitem;

index =1; count = 1;

}

else

{

if (index == count)

last =newitem;

else

cursor.Next.Prev = newitem;

newitem.Next = cursor.Next; cursor.Next = newitem;

count++;

}

}//put_right

public void remove

{

if (count == 1)

{

first = last = cursor = null;

index=0;

}

else if(index==l)

{

first = cursor.Next;

cursor.Prev = null;

cursor = cursor.Next;

}

else if(index == count)

{

last = cursor.Prev;

cursor.Next = null;

cursor = cursor.Prev;

index--;

}

else

{

cursor.Prev.Next = cursor.Next;

cursor.Next.Prev = cursor.Prev;

cursor = cursor.Next;

}

count--;

}//remove

/// операции с курсором:

/// <summary>

/// start: require: true;

/// ensure: сделать активным первый элемент;

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Прорвемся, опера! Книга 3

Киров Никита
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 3

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Птичка в академии, или Магистры тоже плачут

Цвик Катерина Александровна
1. Магистры тоже плачут
Фантастика:
юмористическое фэнтези
фэнтези
сказочная фантастика
5.00
рейтинг книги
Птичка в академии, или Магистры тоже плачут

Инквизитор тьмы 3

Шмаков Алексей Семенович
3. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор тьмы 3

Старая дева

Брэйн Даниэль
2. Ваш выход, маэстро!
Фантастика:
фэнтези
5.00
рейтинг книги
Старая дева

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой