Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_информатика4.doc
Скачиваний:
59
Добавлен:
07.02.2015
Размер:
13.31 Mб
Скачать

Лабораторная работа 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.).