Содержание
Алгоритм добавления ПЕРЕД заданным элементом:
• проверка возможности добавления
• если добавление возможно — поиск заданного элемента
• если заданный элемент найден в ячейке с номером i, то для вставки нового элемента в эту ячейку i надо ее освободить, сдвинув все элементы с i до последнего вправо на одну ячейку, опять же начиная с последней ячейки
• в освободившуюся ячейку i заносится новый элемент
• увеличивается счетчик числа элементов
Алгоритм удаления заданного элемента:
• проверка возможности удаления (есть ли в списке элементы)
• если список не пустой — поиск удаляемого элемента
• если удаляемый элемент найден в ячейке с номером i, то он извлекается из этой ячейки и обрабатывается необходимым образом
• для сохранения естественного порядка элементов надо сдвинуть все элементы с (i+1) до последнего ВЛЕВО на одну ячейку, используя обычный цикл с шагом (+1)
• уменьшить счетчик числа элементов
Как видно из приведенных алгоритмов, добавление и удаление требуют выполнения сдвиговых операций. Особенно существенным это становится при частом добавлении или удалении элементов в начале массива-списка. Если элементы списка являются большими блоками данных и число элементов достаточно велико (сотни тысяч и миллионы), выполнение сдвиговых операций может привести к замедлению работы программы. Поэтому на практике необходимо выполнить оценку трудоемкости данной реализации, исходя из имеющихся вычислительных ресурсов. Возможное улучшение — использование не массива записей, а массива указателей на записи.
Листинги всех подпрограмм
//—————————————————————————
{ Модуль Unit1 (Демо-модуль)}
//—————————————————————————
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, Process, InfObj, SubTaskManager, ComCtrls,
Buttons;
type
TForm1 = class(TForm)
lbl1: TLabel;
btn1: TButton;
lbl2: TLabel;
btn2: TButton;
btn3: TButton;
btn4: TButton;
lbl4: TLabel;
btn5: TButton;
btn6: TButton;
mm1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
lbl3: TLabel;
btn7: TBitBtn;
lst1: TListBox;
lst2: TListBox;
dlgOpen1: TOpenDialog;
dlgSave1: TSaveDialog;
lbl5: TLabel;
lbl6: TLabel;
edt4: TEdit;
lbl7: TLabel;
lbl8: TLabel;
lbl9: TLabel;
lbl10: TLabel;
lbl11: TLabel;
procedure FormCreate(Sender: TObject);
procedure btn6Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure edt2KeyPress(Sender: TObject; var Key: Char);
procedure edt3KeyPress(Sender: TObject; var Key: Char);
procedure btn5Click(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
Выдержка из текста
1. Постановка задачи
1.1. Цель курсовой работы
Создать набор собственных взаимосвязанных классов, реализующий динамический стек массивов-списков в объектной реализации. Контейнер предназначен для хранения и обработки данных информационной задачи “Процессы и потоки” и представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами –
один динамически с использованием адресных связей, другой – статически на базе массива.
Объекты задачи “Процессы и потоки”:
• Информационные объекты: потоки выполнения процессов в ОС (свойства: НомерПотока, СостояниеПотока);
• Потоки объединяются в рамках объекта Процесс (свойство: НомерПроцесса);
• Процессы объединяются в рамках объекта-контейнера ПодсистемаУправленияЗадачами (свойство – тип ОС).
1.2. Требования к реализации:
• полная объектная реализация с определением классов для всех элементов; реализуемой структуры: информационные объекты, объекты- массивы-списки, объект-контейнер;
• соблюдение принципа инкапсуляции – использование в классах только закрытых свойств и реализация необходимого набора методов доступа;
• реализация в классах всех необходимых методов: конструкторы, методы доступа к свойствам, методы добавления и удаления на каждом из двух уровней;
• возможность сохранения всей структуры во внешнем файле с обратной загрузкой;
• наличие модуля, демонстрирующего все возможности созданной библиотеки классов и обладающего удобным оконным пользовательским интерфейсом;
• язык и среда разработки: Delphi.
Список использованной литературы
Список используемой литературы
1. Бабушкина И.А., Окулов С.М. Практикум по объектно-ориентированному программированию. – М: Бином, 2012.
2. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2001.
3. Иванова Г.С. и др. Объектно-ориентированное программирование. – М.: МГТУ им. Баумана, 2007.
4. Козин А.Н., Таренко Л.Б. Структуры и алгоритмы обработки данных. Учебное пособие. – Изд. Академии управления «ТИСБИ», 2010
5. Кьоу Дж., Джеанини М. Объектно-ориентированное программирование. Учебный курс. – СПб.: Питер, 2005.
6. Пышкин Е.В. Основные концепции и механизмы объектно-ориентированного программирования. – СПб.: БХВ-Петербург, 2005.