Информатика и технология программирования


Структуры данных с элементами произвольных типов - часть 2


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

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

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


//------------------------------------------------------bk57-02.cpp


struct list
{
struct list *next; // системная часть элемента


void *pdata; // указатель на прикладную часть


};
//----- Включение элемента в конец списка


list *insert (list *p h, void *pd)
{
list *p =new list)); // создать "системную" часть


p-&#62next = NULL; // нового элемента списка


p-&#62pdata = pd; // привязать "прикладную"


if (ph == NULL) // часть к "системной"


return p;
for (list *q=ph; q-&#62next!=NULL; q=q-&#62next);
q-&#62next=p;
return ph;
}
//----- Исключение первого элемента ---------------------


void *exclude( list **ph)
{
list *p = *ph;
if (p==NULL) return NULL;
*ph = p-&#62next;
void *pd = p-&#62pdata;
delete p; // уничтожить системную часть


return pd;
}
//----- Работа с конкретным списком


void main()
{ int *pval, A[ 10] ={3,4,8,32,67,5,7,4,78,45};
list *PH=NULL; // пустой список


for (i=0; i&#60 10; i++)
{
pval=new int; *pval=A[i]; // создать переменную


PH=insert(PH, (void*) pval); // включение в список


} // с преобразованием типа


for (i=0; i&#60 10; i++)
{
pval = (int*)exclude( &#38PH); // исключение элемента


delete pval; // уничтожение элемента


}
}

Во втором случае используется подмена : функция, работающая с элементами списка типа list получает элементы типа list1 с совпадающей " системной" частью :




Начало  Назад  Вперед



Книжный магазин