Если вы ищите в списке определенный автомобиль, вы должны будете следовать по цепочке указателей, пока желательный автомобиль не будет найден. Мы выполнили бы поиск, исследуя содержание определенных полей каждой записи в списке с указателями.
Рис. 8.7.Общие функции, связанные со списками с указателями
На рис. 8.7 показаны общие функции, связанные со списком с указателями. Код для каждой из этих функций приведен ниже:
/*********************************************************************
/*имя файла: linklist.с */
/*********************************************************************
/*включенные файлы*/
*include /*стандартная библиотека ввода - вывода */
*include /*стандартная библиотека динамического */
/*распределения*/
/*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+*/
new_car_entry->next = NULL; /*указатель на следующий автомобиль в списке*/
in_stock_list = new_car_entry;
new_car_entry1 = (car_temp_ptr) malloc(sizeof(ELEMENT));
/*инициализирует новые поля для ввода автомобиля в список*/
new_car_entry1->year = 1974; /*год выпуска*/
strcpy(new_car_entry1->make,"Ford"); /*BWM, Hummer, Saturn */
strcpy(new_car_entry1->model,"Mustang11")/*купе, обратимый, SUV, пикап*/
strcpy(new_car_entry1->VIN, "3L265ST" ) ; /*комбинация цифр и букв */
new_car_entry1->mileage = 122456; /*показания одометра: от 0 до 500 000+ */
new_car_entry1->next = NULL; /*указатель на следующий автомобиль в списке */
new_car_entry2 = (car_temp_ptr)malloc(sizeof(ELEMENT));
/*инициализирует новые поля для ввода автомобиля в список*/
Читать дальше