VB, MS Access, VC++, Delphi, Builder C++ принципы(технология), алгоритмы программирования
Категория реферата: Рефераты по информатике, программированию
Теги реферата: презентация дипломной работы, отчет по производственной практике
Добавил(а) на сайт: Памфил.
Предыдущая страница реферата | 18 19 20 21 22 23 24 25 26 27 28 | Следующая страница реферата
При помощи ссылок в Visual Basic можно легко создавать связные структуры, такие как списки, деревья и сети, но ссылки требуют дополнительных
ресурсов. Счетчики ссылок и проблемы с распределением памяти замедляют
работу структур данных, построенных с использованием ссылок.
Другой стратегией, которая часто обеспечивает лучшую производительность, является применение псевдоуказателей (fake pointers). При этом программа
создает массив структур данных. Вместо использования ссылок для связывания
структур, программа использует индексы массива. Нахождение элемента в
массиве осуществляется в Visual Basic быстрее, чем выборка его по ссылке на
объект. Это дает лучшую производительность при применении псевдоуказателей
по сравнению с соответствующими методами ссылок на объекты.
С другой стороны, применение псевдоуказателей не столь интуитивно, как
применение ссылок. Это может усложнить разработку и отладку сложных
алгоритмов, таких как алгоритмы сетей или сбалансированных деревьев.
@Рис. 2.11. Двоичное дерево
========43
@Рис. 2.12. Связные структуры
Программа FakeList управляет связным списком, используя псевдоуказатели.
Она создает массив простых структур данных для хранения ячеек списка.
Программа аналогична программе LnkList1, но использует псевдоуказатели.
Следующий код демонстрирует, как программа FakeList создает массив
клеточных структур:
' Структура данных ячейки.
Type FakeCell
Value As String
NextCell As Integer
End Type
' Массив ячеек связного списка.
Global Cells(0 To 100) As FakeCell
' Сигнальная метка списка.
Global Sentinel As Integer
Поскольку псевдоуказатели — это не ссылки, а просто целые числа, программа
не может использовать значение Nothing для маркировки конца списка.
Программа FakeList использует постоянную END_OF_LIST, значение которой
равно -32.767 для обозначения пустого указателя.
Для облегчения обнаружения неиспользуемых ячеек, программа FakeList также
использует специальный «мусорный» список, содержащий неиспользуемые ячейки.
Следующий код демонстрирует инициализацию пустого связного списка. В нем
сигнальная метка NextCell принимает значение END_OF_LIST. Затем она
помещает неиспользуемые ячейки в «мусорный» список.
========44
' Связный список неиспользуемых ячеек.
Global TopGarbage As Integer
Public Sub InitializeList()
Dim i As Integer
Sentinel = 0
Cells(Sentinel).NextCell = END_OF_LIST
' Поместить все остальные ячейки в «мусорный» список.
For i = 1 To UBound (Cells) - 1
Cells(i).NextCell = i + 1
Next i
Cells(UBound(Cells)).NextCell = END_OF_LIST
TopGarbage = 1
End Sub
При добавлении элемента к связному списку, программа использует первую доступную ячейку из «мусорного» списка, инициализирует поле ячейки Value и вставляет ячейку в список. Следующий код показывает, как программа добавляет элемент после выбранного:
Private Sub CmdAddAfter_Click()
Dim ptr As Integer
Dim position As Integer
Dim new_cell As Integer
' Найти место вставки. ptr = Sentinel position = Selectedlndex
Do While position > 0 position = position - 1 ptr = Cells(ptr).NextCell
Loop
' Выбрать новую ячейку из «мусорного» списка. new_cell = TopGarbage
TopGarbage = Cells(TopGarbage).NextCell
' Вставить элемент.
Cells (new_cell).Value = NewItem.Text
Cells(new_cell).NextCell = Cells(ptr).NextCell
Cells(ptr).NextCell = new_cell
NumItems = NumItems + 1
DisplayList
SelectItem SelectedIndex + 1 ' Выбрать новый элемент.
NewItem.Text = ""
NewItem.SetFocus
CmdClearList.Enabled = True
End Sub
После удаления ячейки из списка, программа FakeList помещает удаленную ячейку в «мусорный» список, чтобы ее затем можно было легко использовать:
Private Sub CmdRemoveAfter_Click()
Dim ptr As Integer
Dim target As Integer
Dim position As Integer
If SelectedIndex < 0 Then Exit Sub
' Найти элемент. ptr = Sentinel position = SelectedIndex
Do While position > 0 position = position - 1 ptr = Cells(ptr).NextCell
Loop
' Пропустить следующий элемент. target = Cells(ptr).NextCell
Cells(ptr).NextCell = Cells(target).NextCell
NumItems = NumItems - 1
' Добавить удаленную ячейку в «мусорный» список.
Cells(target).NextCell = TopGarbage
Рекомендуем скачать другие рефераты по теме: доклад по химии, конспект зима.
Предыдущая страница реферата | 18 19 20 21 22 23 24 25 26 27 28 | Следующая страница реферата