- •Лабораторная работа 1
- •Лабораторная работа 2 Переменные и константы. Базовые типы. Арифметические операции
- •Операции
- •Ввод и вывод данных
- •Лабораторная работа 3 Циклический и ветвящийся поток управления
- •Алгоритмы разветвляющейся структуры
- •Операторы выбора
- •Операторы циклов
- •Операторы перехода
- •Задание
- •Лабораторная работа 4 Функции. Вызов функций с формальными параметрами, передаваемыми по значению
- •Задание
- •Лабораторная работа 5 Одномерные массивы
- •Задание
- •Лабораторная работа 6 Многомерные массивы
- •Задание
- •Лабораторная работа 7 Функции для работы с символами
- •Лабораторная работа 8 Строки, литералы. Передача строк в функции
- •Строки и литералы
- •Библиотечные функции для работы со строками
- •Выделение памяти под строки
- •Передача строк в качестве параметров функций
- •Задание
- •Лабораторная работа 9 Указатели и динамические массивы
- •Задание
- •Варианты
- •Лабораторная работа 10 Динамические структуры данных
- •Структуры и указатели
- •Задание
- •Лабораторная работа 11 Объектно-ориентированное программирование. Создание классов и объектов
- •Задание
- •Лабораторная работа 12 Знакомство со средой быстрой разработки приложений. Использование компонент библиотеки vcl
- •Лабораторная работа 13 Вывод в форму результатов работы программы
- •Лабораторная работа 14 Изучение обработчиков событий компонентов библиотеки vcl
- •Лабораторная работа 15 Использование таймера для создания различных эффектов
- •Лабораторная работа 16 Рисование в канве. Построение графиков функций
- •Лабораторная работа 17 Изучение принципа работы текстового редактора
- •Список рекомендуемой литературы
- •Оглавление
Лабораторная работа 10 Динамические структуры данных
Цель работы – получить практические навыки работы с динамическими структурами данных.
Теория
Структуры
Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.
Пример
struct Date //определение структуры
{
int day;
int month;
int year;
};
Date birthday; //переменная типа Date
Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование.
Доступ к элементам структур обеспечивается с помощью уточненных имен:
имя_структуры.имя_элемента
Пример
//присваивание значений полям переменной birthday
birthday.day=11;
birthday.month=3;
birthday.year=1993;
Date Data;
//присваивание значения переменной birthday переменной Data
Data=birthday;
Из элементов структурного типа можно организовывать массивы также как из элементов стандартных типов.
Пример
Date mas[15]; //массив структур
//ввод значений массива
for (int i=0;i<15;i++)
{
cout<<”\nEnter day:”;cin>>mas[i].day;
cout<<”\nEnter month:”;cin>>mas[i].month;
cout<<”\nEnter year:”;cin>>mas[i].year;
}
Структуры и указатели
Указатели на структуры описываются точно так же, как и указатели на другие типы данных. Это необходимо для создания связных списков и других динамических структур данных, элементами которых являются структуры данных.
Фактически указатели на структуры так часто используются в Си++, что существует специальный символ для ссылки на элемент структуры, адресованной указателем.
Пример
#include <iostream.h>
#include <string.h>
typedef struct worker
{
char name[15];
char sonname[15];
char duty[15];
int sum;
};
main()
{
worker *p;
strcpy(p->name, "Василий);
strcpy(p->sonname, "Иванов");
strcpy(p->duty, "разнорабочий");
p->sum=10;
cout <<"имя фамилия должность зарплата\n";
cout<<p->name<<“ ”<<p->surname<<“ ”<<p->duty<<“ ”<<p->sum);
}
В этом варианте p объявляется как указатель типа worker, а не как переменная типа worker. Теперь, когда вы ссылаетесь на элементы p, используйте конструкцию: имя_указателя -> элемент_структуры Символ -> означает, что "элемент структуры направлен в ..."; это сокращенный вариант от точно такой же по смыслу конструкции (*имя_указателя).элемент_структуры, принятый в Си++.
Линейный однонаправленный список
Описание простейшего элемента такого списка выглядит следующим образом:
struct имя_типа
{
информационное поле;
адресное поле;
};
Информационное поле (данные) – это поле любого, ранее объявленного или стандартного, типа; адресное поле – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка.
Информационных полей может быть несколько.
информа-ционное поле |
адресное поле |
|
|
|
|
|
|
|
информа-ционное поле |
NULL |
Рис. 10
Пример
1. struct Node
{
int key;//информационное поле
Node*next;//адресное поле
};
2. struct point
{
char*name;//информационное поле
int age;//информационное поле
point*next;//адресное поле
};
Каждый элемент списка содержит ключ, который идентифицирует этот элемент. Ключ обычно бывает либо целым числом (1.), либо строкой (2.).