Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Рис. 8.6. Список с указателями для текущего учета автомобилей

Когда автомобиль продан, он больше не доступен для продажи. Он должно быть затем быть удален из списка «для продажи». Для этого связь предшествующего автомобиля должна теперь указывать на последующий автомобиль. Автомобиль, который был продан, будет теперь действительно исключен из списка «для продажи» и может быть добавлен в список «проданные». Если бы у нас не было списка «проданные», мы могли бы освободить динамическую

память, выделенную для этого автомобиля. Это осуществляется с помощью команды
free(argument)
.

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

Рис. 8.7. Общие функции, связанные со списками с указателями

На рис. 8.7 показаны общие функции, связанные со списком с указателями. Код для каждой из этих функций приведен ниже:

/*********************************************************************

/*имя файла: linklist.с */

/*********************************************************************

/*включенные файлы*/

*include <stdio.h> /*стандартная библиотека ввода - вывода */

*include <stdlib.h> /*стандартная библиотека динамического */

/*распределения*/

/*global variables - глобальные переменные. Объявление этих переменных */

/*помещают в файл заголовка (header file). Они приведены здесь, */

/* чтобы иллюстрировать последовательность построения программы. */

/*определение структуры "автомобиль"*/

struct car {

 int year; /* год производства */

 char make[10]; /*BWM, Hummer, Saturn */

 char model[12]; /*купе, обратимый, SUV, пикап */

 char VTN[10]; /*комбинация цифр, букв */

 float mileage; /*показания спидометра: от 0 до 500,000+*/

 struct car *next; /*указатель на следующий автомобиль в списке */

};

/*определение указателя на автомобиль */

typedef struct car ELEMENT;

typedef ELEMENT *car_temp_ptr;

/*функции прототипов*/

void initialize_link_list(void);

void print_link_list(car_temp_ptr);

void insert_link_list(car_temp_ptr);

void delete_link_list(car_temp_ptr);

void search_link_list(car_temp_ptr);

/*переменные*/

/ " Создают списки, чтобы следить за состоянием
автомобильного сервиса*/

car_temp_ptr in_stock_list; /* автомобили в продаже */

car_temp_ptr repair_list; /* автомобили в ремонт - не подлежат продаже*/

car_temp_ptr paint_shop_list;/*автомобили в покраске - не подлежат продаже*/

car_temp_ptr sold_list; /*проданные автомобили -- не подлежат продаже*/

car_temp_ptr new_car_entry; /*новый автомобиль для введения в список*/

int TRUE=1, FALSE=0; /*логические флаги */

void main(void) {

 /*заполняет пустой список переменными NULL */

 in_stock_list = NULL; /* автомобили в продаже */

 repair_list = NULL; /* автомобили в ремонте - не подлежат продаже */

 paint_shop_list = NULL; /* автомобили в покраске - не подлежат продаже*/

 sold_list = NULL; /*проданные автомобили -- не подлежат продаже * /

 new_car_entry = NULL;

 initialize_link_list; /*составление списка для продажи */

 print_link_list(in_stock_list); /*print the list */

 insert_link_list(in_stock_list); /*вставить новый автомобиль в список*/

 print_link_list(in_stock_list); /*распечатать список */

 delete_link_list(in_stock_list); /*удалить автомобиль из списка */

 print_link_list(in_stock_list); /*распечатать список */

 search_link_list(in_stock_list); /*поиск определенного пункта в списке */

}

/********************************************************************/

/*void initialize_link_list (car_temp_ptr): инициализирует автомобиль */

/* для списка продаж используя список.Отметим, что этот список */

/* с указателями был объявлен как глобальная переменная. */

/*********************************************************************

void initialize_link_list(void) {

 car_temp_ptr new_car_entry1, new_car_entry2;

 /*создает вход в список автомобилей */

 new_car_entry = (car_temp_ptr)malloc(sizeof(ELEMENT));

 /*инициализирует новые поля для ввода автомобиля в список*/

 new_car_entry->year = 1981; /*год выпуска */

 strcpy(new_car_entry->make, "Chevy"); /*BWM, Hummer, Saturn */

 strcpy(new_car_entry->model, "Camaro"); /*купе, обратимый, SUV, пикап*/

 strcpy(new_car_entry->VIN, "12Z3 67"); /*комбинация цифр и букв */

 new_car_entry->mileage = 37456; /*показания одометра: от 0 до 500 000+*/

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