Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Логическое и машинное представление структур (записей)




Структуры

Операции над множествами

Пусть S1, S2, S3: set of byte. Над этими множествами определены следующие специфические операции.

1). Объединение множеств: S2+S3. Результатом является множество, содержащее элементы обоих исходных множеств.

2). Пересечение множеств: S2*S3. Результатом является множество, содержащее общие элементы обоих исходных множеств.

3). Проверка на вхождение элемента в множество: a in S1. Результатом этой операции является значение логического типа - true, если элемент a входит в множество S1, false - в противном случае.

 

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

Struct rec{

long num; { личный номер студента }

char name[21]; { Ф.И.О. }

char fac[8], group[8]; { факультет, группа }

unsigned short math,comp,lang;{оценки по математике, выч.тех-}

{нике, ин. языку }

}

 

 

Структуры в C# практически ничем не отличаются от структур в любом другом языке. Отличия наблюдаются лишь на более низком уровне. В основном это касается того, что для структур в C# не существует базового класса. Но в то же время структуры являются производными от типа ValueType.

Зачем же нужны структуры? В принципе и без них можно легко обходиться, но использование структур делает код более понятным и наглядным. Структура - это набор зависимых друг от друга переменных. Зависимость здесь исключительно логическая и определяется условиями задачи. Чтобы стало понятно, рассмотрим простой пример. Допустим, мы пишем программу, печатающую справки для студентов. Все справки имеют один и тот же вид и текст, кроме следующих полей: ФИО, форма обучения, курс, факультет. Это зависимые данные и их можно представить в виде структуры, например так:

struct STUDENT { public string fio; public string FormOfEducation; public int course; public string faculty; }

 

В памяти эта структура может быть представлена в одном из двух видов:

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

 

 

Рис. 5.1. Представление в памяти переменной типа struct в виде последовательности полей

 

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

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

 

Рис. 5.2. Представление в памяти переменной типа record в виде связного списка

 

В соответствии с общим подходом языка C дескриптор записи (в этом языке записи называются структурами) не сохраняется до выполнения программы. Поля структуры просто располагаются в смежных слотах памяти, обращения к отдельным полям заменяются на их адреса еще на этапе компиляции.

Полем записи может быть в свою очередь интегрированная структура данных - вектор, массив или другая запись. В некоторых языках программирования (COBOL, PL/1) при описании вложенных записей указывается уровень вложенности, в других (PASCAL, C) - уровень вложенности определяется автоматически.

Полем записи может быть другая запись, но ни в коем случае не такая же. Это связано прежде всего с тем, что компилятор должен выделить для размещения записи память. Предположим, описана запись вида:

Struct rec{

short f1;

char f2[2];

rec f3; }

Как компилятор будет выделять память для такой записи? Для поля f1 будет выделено 2 байта, для поля f2 - 2 байта, а поле f3 - запись, которая в свою очередь состоит из f1 (2 байта), f2 (2 байта) и f3, которое... и т.д. Недаром компилятор C, встретив подобное описание, выдает сообщение о нехватке памяти.

Однако полем записи вполне может быть указатель на другую такую же запись: размер памяти, занимаемой указателем, известен и проблем с выделением памяти не возникает. Этот прием широко используется в программировании для установления связей между однотипными записями.

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 435; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.