Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Концепции ООП.docx
Скачиваний:
33
Добавлен:
29.03.2016
Размер:
151.79 Кб
Скачать

12. Структуры данных. Список.

Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. Назначение структур: повышении эффективности и производительности программ. Структуры относятся к типам значений, и поэтому ими можно оперировать непосредственно, а не по ссылке. Следовательно, для работы со структурой вообще не требуется переменная ссылочного типа, а это означает в ряде случаев существенную экономию оперативной памяти.

Список – это последовательность элементов a1, а2,…,аn (n больше 0) одного типа. Количество элементов n называется длиной списка. Если n = 0, то это пустой список. Элементы списка линейно упорядочены в соответствии с их позицией в списке.

Строение списка

а1, аi-1, ai, аi+1, аn.

Список может быть реализован с помощью массива, или ссылок. Связать последовательность элементов определенного типа в список можно так, чтобы каждый элемент содержал ссылку на следующий элемент последовательности. Такой список называется

однонаправленным. Если каждый элемент списка содержит две ссылки

(одну

на следующий элемент в списке, а вторую на предыдущий), то такой список называется

двунаправленным. Если же последний элемент связать ссылкой с первым, то получится кольцевой список.

Связный список (последовательность элементов одного типа)

5

*

4

*

8

*

Плюсы: последовательный доступ, добавление и удаление элементов.

Минусы: память, произвольный доступ, поиск.

Классический список

Устройство

головахвост

100120222

5, 7, 12

Посмотреть хранящиеся значения можно только у head.

4 операции:

  • Получить (изменить Head)

  • Добавить Head

  • Получить Tail

  • Проверка на пустоту

class List<T>

{

class ListItem<T>

{

public T Data {get; set;}

public ListItem<T> Next {get; set;}

}

}

private ListItem<T> first;

private ListItem<T> current;

void AddFirst(T item);

T Current {get; set;}

bool HasValues {get;}

bool MoveNext();

void Reset();

public void AddFirst(T item)

{ if( first==null)

{ first=new.ListItem<T>()

{ Data=item};

}

else

{ current=new ListItem<T>() {Data=item};

current.Next=first;

first=current;

}

Список:

Плюсы: добавление и удаление элементов за constвремя

Минусы: на каждый элемент тратится дополнительное место на хранение ссылок; неизвестно положение элементов в памяти; необходим полный перебор для поиска, невозможен произвольный доступ по индексу; невозможно движение в обратном направлении.

13. Структуры данных. Двунаправленный список.

Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. Назначение структур: повышении эффективности и производительности программ. Структуры относятся к типам значений, и поэтому ими можно оперировать непосредственно, а не по ссылке. Следовательно, для работы со структурой вообще не требуется переменная ссылочного типа, а это означает в ряде случаев существенную экономию оперативной памяти.

Список – это последовательность элементов a1, а2,…,аn (n больше 0) одного типа. Количество элементов n называется длиной списка. Если n = 0, то это пустой список. Элементы списка линейно упорядочены в соответствии с их позицией в списке.

Если каждый элемент списка содержит две ссылки (одну на следующий элемент в списке, а вторую на предыдущий), то такой список называется

двунаправленным.

Двунаправленный список

Prev

Data

Next

Prev

Data

Next

class ListItem<T>

{

public ListItem<T> Previous {get; set}

public T Data {get; set;}

public ListItem<T> Next {get; set;}

}

private ListItem<T> first; (current, last)

Операции

Проверка на пустоту, добавление в начало или конец,

Добавление в начало списка

current = new ListItem<T>();

current.Data = value;

current.Next = first;

first Previous = current;

first = current;