Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Динамические структуры данных: дек

Тип Реферат
Предмет Информатика и программирование
Просмотров
1124
Размер файла
267 б
Поделиться

Ознакомительный фрагмент работы:

Динамические структуры данных: дек

Министерство образования и науки РФ

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«Омский государственный технический университет»

Кафедра прикладной математики и информационных систем

Курсовая работа по дисциплине: «Высокоуровневые методы»

Омск 2008


Содержание

Введение

Постановка задачи

Динамические структуры данных: дек

Описание алгоритма

Приложение 1. Текст программы

Приложение 2. Форма


Введение

Объектно-ориентированное программирование – это естественное продолжение структурного программирования. Объектно-ориентированное программирование требует сложных программных действий, но делает создание программы достаточно легким. В результате создаются совершенные коды, которые легко распространять и просто поддерживать. Однажды созданный для приложения объект можно использовать в других приложениях. Повторное использование объектов намного сокращает время разработки и увеличивает производительность труда. Объектно-ориентированное программирование основано на использовании классов. Использование классов – это основное отличие языка С++ от языка С, на котором он основан.

Класс наряду с понятием «Объект», является важным понятием объектно-ориентированного подхода в программировании. Под классом подразумевается некая сущность, которая задает некоторое общее поведение для объектов. Таким образом, любой объект может принадлежать или не принадлежать определенному классу, то есть обладать или не обладать поведением, которое данный класс подразумевает. Класс определяет для объекта правила, с помощью которых с объектом могут работать другие объекты, обычно это делается с помощью определения методов класса.

Кроме того, классы могут находиться друг с другом в различных отношениях, таких как наследование или агрегация.

Класс - это собрание связной информации, которая включает в себя и данные, и функции. Класс – это дальнейшее развитие структур: в них тоже объединяется данные разных типов. Это такой же шаблон, под который, как и под структуру, память выделяется только тогда, когда мы создаем «переменную типа этого шаблона».

Класс определяется как список своих членов. К членам класса относятся его поля (свойства) и функции (методы).

Каждому члену класса можно установить его область доступа (access control level). Область доступа члена класса определяет участки кода, из которых к этому члену будет возможно обращаться. В большинстве объектно-ориентированных языков программирования поддерживаются следующие области доступа:

· private (закрытый, внутренний член класса) — обращения к члену допускаются только из кода методов класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену;

· protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из кода методов класса, в котором этот член определён, или из любых его классов-наследников;

· public (открытый член класса) — обращения к члену допускаются из любого кода.

В каждом классе определены характеристики тех объектов, которые использует данный класс. В классе также задаются программы, называемые методами, которые обрабатывают характеристики объектов, принадлежащих данному классу. Поведение объекта в реальном мире определяется его характеристиками. Изменяя значение характеристик, мы получим разное поведение объектов. Когда мы создаем экземпляр класса и определяем значение его конкретных характеристик, мы получаем конкретный объект. В составе класса существует специальный метод, который формирует экземпляр класса. Этот метод носит название конструктора. В противоположность конструктору, существует программа-деструктор, которая уничтожает экземпляр класса в памяти.


Постановка задачи

Создать класс «Дек».

Реализовать методы:

1. Добавление элемента в начало дека.

2. Удаление элемента из начала дека.

3. Добавление элемента в конец дека.

4. Удаление элемента из конца дека.

5. Проверка дека на наличие в нем элементов.


Динамические структуры данных: дек

В языках программирования существует такой способ выделения памяти под данные, который называется динамическим. В этом случае память под величины отводится во время выполнения программы. Такие величины называются динамическими. Раздел оперативной памяти, распределяемый статически, называется статической памятью; динамически распределяемый раздел памяти называется динамической памятью (динамически распределяемой памятью).

Использование динамических величин предоставляет программисту ряд дополнительных возможностей. Во-первых, подключение динамической памяти позволяет увеличить объем обрабатываемых данных. Во-вторых, если потребность в каких-то данных отпала до окончания программы, то занятую ими память можно освободить для другой информации. В-третьих, использование динамической памяти позволяет создавать структуры данных переменного размера.

Работа с динамическими величинами связана с использованием еще одного типа данных — ссылочного типа. Величины, имеющие ссылочный тип, называются указателями.

Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Сам указатель располагается в статической памяти.

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

Часто требуется, чтобы структуры данных меняли свои размеры в ходе решения задачи. К таким структурам относятся списки (однаправленные, двунаправленные, кольцевые однаправленные и кольцевые двунаправленные), стеки, деки, очереди, деревья и другие. Описание динамических структур с помощью массивов, записей и файлов приводит к неэкономному использованию памяти ЭВМ и увеличивает время решения задач.

Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом.

Динамическая структура называется деком (англ. deque – аббревиатура от double-ended queue, двухсторонняя очередь) или двунаправленным списком, если каждый узел её содержит два указателя: один указывает на предшествующий узел, другой - на последующий. Такие списки могут быть линейными и циклическими, а члены в них добавляются и удаляются с 2 сторон.


Рис. 1. Дек

Мы будем различать деки с ограниченным выходом или ограниченным входом; в таких деках соответственно исключение или включение допускается только на одном конце.


Рис. 2. Дек с ограниченным входом

Рис. 3. Дек с ограниченным выходом

Дек с ограниченным входом может быть использован как простая очередь или как стек.

В деке все исключения и добавления происходят на обоих его концах.

Дек достаточно просто можно организовать в виде двусвязанного ациклического списка. При этом первый и последний элементы списка соответствуют входам (выходам) дека.

Описание алгоритма

Создаваемый класс в данной программе называется Deq.

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

Для создания класса «Дек» необходимо сначала создать структуру элемента с указателем на следующий элемент. В данной программе такой структурой является Node.

При создании класса надо создать указатели на первый и последний элементы дека. Данные указатели прописываются в private, т. е. обращаться к этим указателям возможно только из методов класса Deq.

В общедоступной области доступа прописываются методы класса, прописанные в постановке задачи.

Указателям изначально присваиваются пустые значения (NULL).

Добавление элемента в начало дека

Для добавления элемента в начало дека используется метод класса add. Его параметрами является добавляемый элемент b.

Необходимо создать новый элемент структуры Node (el). Элементу el присваивается значение введенного с клавиатуры числа. Для добавления элемента в начало дека, необходимо, чтобы ячейка была пуста. Поэтому, проверяется условие наличия в ячейке элемента. Если ячейка не пуста, то указатель на первый элемент переходит на следующую ячейку, в которую и будет записан элемент. Количество ячеек возрастает на 1.


Удаление элемента из начала дека

Для удаления элемента из начала дека используется метод класса delete.

Удаление элемента происходит по тому же алгоритму, но ячейка не проверяется на наличие элемента в нем. Элементу el присваивается указатель first и указатель переходит в следующую ячейку. Затем элемент el удаляется и количество ячеек понижается на единицу.

Добавление элемента в конец дека

Для добавления элемента в начало дека используется метод класса add_end. Его параметрами является добавляемый элемент b.

Необходимо создать новый элемент структуры Node (el). Элементу elприсваивается значение введенного с клавиатуры числа. Для добавления элемента в конец дека, необходимо, чтобы ячейка была пуста. Указатель на последний элемент переходит на следующую ячейку, в которую и будет записан элемент. Далее указателю на последний элемент переходит на следующую ячейку, которой присваивается значение NULL. Количество ячеек возрастает на 1.

Удаление элемента из конца дека

Для удаления элемента из начала дека используется метод класса delete_end.

Для удаления элемента из конца дека надо создать новый элемент структуры Node (el). Элементу el присваивается указатель на первый элемент. Пока el не примет значения NULL, элемент будет принимать значения следующего элемента. Затем el удаляется и ссылке на последний элемент присваивается значение el. Количество ячеек уменьшается.

Проверка дека на наличие в нем элемента

Для проверки дека используется метод класса prov. Этот метод имеет тип Boolean.

Для проверки на наличие элементов в деке, создается новый элемент структуры Node и ему присваивается указатель на первый элемент дека. Если ячейка не пуста, то возвращается значение true, в противном случае, false.

Функция вывода дека в StringGrid

Данная функция необходима для отображения вставки и удаления элементов в таблицу StringGrid. Функция увеличивает количество ячеек таблицы, если обнаруживает, что ячейка не пуста.


Приложение 1

Текст программы

#include <vcl.h>

#pragma hdrstop

#include <iostream>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

int s, count=0;

struct Node

{

int key;

Node *next;

};

class deq

{

private:

Node *first;

Node *last;

public:

deq()

{first=NULL;

last=NULL;}

void deq::add(int b)

{

Node *el=new Node;

el->key=b;

if (first==NULL)

{

el->next=first;

first=el;

last=first;

}

else

{

el->next=first;

first=el;

}

count++;

}

void deq::del()

{

Node *el=new Node;

el=first;

first=el->next;

delete el;

count--;

}

void deq::add_end(int b)

{

Node *el=new Node;

el->key=b;

last->next=el;

last=el;

last->next=NULL;

count++;

}

void deq::del_end()

{

Node *el=new Node;

el=first;

while (el->next->next!=NULL)

el=el->next;

delete el->next;

last=el;

last->next=NULL;

count--;

}

bool deq::prov()

{ Node *el=new Node;

el=first;

if (first==NULL)

return true;

else

return false;

}

void Draw ()

{

for (int i=0; i<10; i++)

Form1->StringGrid1->Cells[0][i]="";

Node* temp=first;

for (int i=0; i<count; i++)

{

Form1->StringGrid1->Cells[0][i]=temp->key;

if (temp->next!=NULL)

temp=temp->next;

}

}

};

deq a;

int i=0;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

a.add(StrToInt(Edit2->Text));

a.Draw();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

a.add_end(StrToInt(Edit2->Text));

a.Draw();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if(a.prov())

ShowMessage("Дек пуст. Нечего удалять") ;

else

a.del();

a.Draw();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

if(a.prov())

ShowMessage("Дек пуст!");

else

ShowMessage("Дек не пуст!");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Edit3->Text=StrToInt(count);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

if(a.prov())

ShowMessage("Дек пуст. Нечего удалять") ;

else {

a.del_end();

a.Draw();}

}

//---------------------------------------------------------------------------


Приложение 2

Форма

Главная форма содержит:

· Label (Введите добавляемый элемент)

· GroupBox1 (Добавление элементов)

o Button1 (Добавление элемента в начало дека)

o Button2 (Добавление элемента в конец дека)

· GroupBox2 (Удаление элементов)

o Button3 (Удаление первого элемента)

o Button6 (Удаление последнего элемента)

· GroupBox3 (Другие функции)

o Button4 (Проверка на наличие элементов)

o Button5 (Узнать размер дека)

o Edit3 (Используется для вывода количества элементов в деке)

· StringGrid (Отображение дека)

· Edit2 (Значение, введенное с клавиатуры в Edit2, добавляется в дек)

Рис. 4. Главная форма


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
154960
рейтинг
icon
3207
работ сдано
icon
1385
отзывов
avatar
Математика
Физика
История
icon
151373
рейтинг
icon
6001
работ сдано
icon
2716
отзывов
avatar
Химия
Экономика
Биология
icon
105824
рейтинг
icon
2100
работ сдано
icon
1312
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
60 103 оценки star star star star star
среднее 4.9 из 5
ПНИПУ
Большое спасибо за проделанную работу. Работа была выполненная качественно, а также раньше...
star star star star star
Финансовый университет
Очень хорошая работа, быстро выполнена, оригинальность 87% - проверена через сайт Универа,...
star star star star star
ВТУ им. Щепкина
Екатерина, спасибо Вам за помощь! По отзыву преподавателя работа выполнена очень хорошо.
star star star star star

Последние размещённые задания

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

2 минуты назад

Посик информации о взаимодействии нотариата и адвокатуры

Поиск информации, Правоохранительные и судебные органы

Срок сдачи к 20 апр.

4 минуты назад

Все прописано в прикреплённом файле

Отчет по практике, Маркетинг, финансы, афхд

Срок сдачи к 22 апр.

4 минуты назад

Эссе 3000 символов. мне не нужна gptишная работа

Эссе, Педагогика

Срок сдачи к 23 апр.

5 минут назад

Перевод и отчет по практике

Отчет по практике, переводоведение

Срок сдачи к 20 апр.

5 минут назад

Решение задачи по математической статистики

Решение задач, теория вероятностей и математическая статистика

Срок сдачи к 27 апр.

9 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени: 20 апреля 2025 г. 11:19

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Press the down arrow key to interact with the calendar and select a date. Press the question mark key to get the keyboard shortcuts for changing dates.

Файлы (при наличии)

    это быстро и бесплатно