Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 125

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

 float mileage; /*показания счСтчика: ΠΎΡ‚ 0 Π΄ΠΎ 500,000+ */

 struct car *next; /*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² спискС*/

};

/*typedef обСспСчиваСт компилятор an alternate???*/

typedef struct car ELEMENT; /*для Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ */

typedef ELEMENT *car_temp_ptr; /*опрСдСляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ*/

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, всС поля записи ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ автомобиля. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ сокращСнный список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠœΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для описания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° автомобиля.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с использованиСм динамичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² распрСдСлСния памяти. Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Π° malloc() β€” прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ динамичСского распрСдСлСния памяти, опрСдСляя ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ объСм памяти для структуры Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ запись для автомобиля, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

сar_temp_ptr new_car_entry;

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

Π’ Π³Π»Π°Π²Π΅ 3, ΠΌΡ‹ описали, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ полям Π²Π½ΡƒΡ‚Ρ€ΠΈ записи. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΡƒΡŽ запись с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ использовали ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ –>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ спСцифичСскому полю Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры.

/* инициализация Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ для структуры car */

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; /* опрСдСляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ */

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ поля записи, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

printf("\nyear: %4d ", new_car_entry–>year); / *year mfg */

printf("\nmake: %s ", new_car_entry–>make); /*car Π΄Π΅Π»Π°Π΅Ρ‚ */

printf("\nmodel: %s ", new_car_entry–>model); /*model*/

printf("\nVIN: являСтся ", new_car_entry–>VIN); /*VIN */

printf("\nMileage: %6.of ", new_car_entry –> mileage); /*odometer reading*/

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ всС эти части вмСстС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ. ΠœΡ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просим вас ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄.

#include <stdio.h> /*стандартныС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅/Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ*/

#include <stdlib.h> /*Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ распрСдСлСниС памяти */

void main(void) {

 /*ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры */

 struct car;

 int year; /*Π³ΠΎΠ΄ выпуска */

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

 char model[12]; /*ΠΊΡƒΠΏΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹ΠΉ, SUV, ΠΏΠΈΠΊΠ°ΠΏ */

 char VIN[10]; /*комбинация Ρ†ΠΈΡ„Ρ€ ΠΈ Π±ΡƒΠΊΠ²*/

 float mileage; /*показания ΠΎΠ΄ΠΎΠΌΠ΅Ρ‚Ρ€Π°: ΠΎΡ‚ 0 Π΄ΠΎ 500 000+ */

 struct car *next; /*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² спискС */

 typedef struct car ELEMENT;

 typedef ELEMENT *car_temp_ptr;

 car_temp_ptr new_car_entry; /*Π²Π²ΠΎΠ΄ записи для автомобиля*/

 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 to 500,000+*/

 new_car_entry–>next - NULL; /*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² спискС*/

 printf("\nyear: %4d", new_car_entry–>year); /*Π³ΠΎΠ΄ выпуска */

 printf("\nmake: %s", new_car_entry–>make) ; /*ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ */

 printf("\nmodel: %s", new_car_entry–>model); /*модСль */

 printf("\nVIN: %s ", new_car_entry –>VIN); /*Π½ΠΎΠΌΠ΅Ρ€ */

 printf("\nMileage: %6. Из ", new_car_entry->mileage); /*показания ΠΎΠ΄ΠΎΠΌΠ΅Ρ‚Ρ€Π°*/

}

Когда эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, Π½Π° экранС вашСго ПК появится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

year: 1981

make: Chevy

model: Camaro

VIN: 12Z367

Mileage: 37456

Пока, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, использованиС динамичСского распрСдСлСния памяти Π½Π΅ каТСтся Π²Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ смоТСтС ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ силу динамичСского распрСдСлСния памяти, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ скомпонуСм записи ΠΈ создадим список, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ измСнСния Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ смоТСм Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты Π² список, ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ списка Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ· списка, ΠΈ Ρ‚.Π΄. Но Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ здСсь ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² лСс Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сразу Π² Π½Π΅ΠΌ Π½Π΅ Π·Π°Π±Π»ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ. Π›ΡƒΡ‡ΡˆΠ΅ сосрСдоточим своС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡ€ΠΎΠ³Π΅ Ρ‡Π΅Ρ€Π΅Π· этот лСс. НС Π±ΡƒΠ΄Π΅ΠΌ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ здСсь основныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² построСнии ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Бписок с указатСлями. Бписок с указатСлями являСтся ΠΌΠΎΡ‰Π½ΠΎΠΉ структурой Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создана, вставлСна Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· Π½Π΅Π΅ динамичСски Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Бписок связСй состоит ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², содСрТащих Π΄Π²Π΅ части: Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‡Π°ΡΡ‚ΡŒ поля связи. Π§Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… хранится информация ΠΎΠ± ΡƒΠ·Π»Π΅ (ΠΈΠ»ΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π΅) списка. НапримСр, Ссли ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ΅, Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… для ΡƒΠ·Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ структура (ΠΈΠ»ΠΈ запись) car, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ПолСм связи Π±Ρ‹Π» Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (адрСс памяти) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ запись Π² спискС. Начало списка Π½Π°Π·Π²Π°Π½ΠΎ Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ (head). ΠšΠΎΠ½Π΅Ρ† списка называСтся хвостом (tail) ΠΈ обозначаСтся символом нуля (?) Π² ΠΏΠΎΠ»Π΅ связи. Π­Ρ‚ΠΎ построСниС списка ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° рис. 8.5. Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ объявлСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… списков, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π΄ΠΈΠ»Π΅Ρ€Π°ΠΌ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° состояниСм ΠΏΠ°Ρ€ΠΊΠ° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ.

car_temp_ptr head_ptr; /*Π½Π°Ρ‡Π°Π»ΠΎ списка состояния Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ */

car_temp_ptr in_stock_list; / *Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ */

car_temp_ptr repair_list; /*Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π½Ρ‹Ρ… мастСрских - Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ */

car_temp_ptr paint_shop_list; /*Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² мастСрских покраски - Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ */

car_temp_ptr sold_list; /*ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ - Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ */

ΠœΠΈΡ€ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½. ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ»Π΅Ρ€Ρ‹ постоянно ΠΏΡ€ΠΎΠ΄Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΈΡ… ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² мастСрских для Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π°, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ производят ΠΏΠ΅Ρ€Π΅ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ. Если Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих дСйствий, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ постоянно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· списков. Π­Ρ‚ΠΈ дСйствия ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° рис. 8.5Π² ΠΈ 8.5Π³.

Рис. 8.5. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со списком a) список состоит ΠΈΠ· ΡƒΠ·Π»Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ указатСля, ΠΌΠ΅Π½Ρ‚Π° Π² список, Π³) ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта


Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² список, ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСсто для автомобиля Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ спискС. НапримСр, Ссли ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядок, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСсто Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² список, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 8.6. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Π²ΠΎΠ΄Π° Π½Π°ΠΉΠ΄Π΅Π½Π°, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ автомобиля Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π² спискС.

Рис. 8.6. Бписок с указатСлями для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΡ‡Π΅Ρ‚Π° Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ


Когда Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ ΠΏΡ€ΠΎΠ΄Π°Π½, ΠΎΠ½ большС Π½Π΅ доступСн для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ. Он Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ‚Π΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· списка «для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈΒ». Для этого связь ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ автомобиля Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ. ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΎΠ΄Π°Π½, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈΠ· списка «для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈΒ» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² список Β«ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Π΅Β». Если Π±Ρ‹ Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ списка Β«ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Π΅Β», ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для этого автомобиля. Π­Ρ‚ΠΎ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ free(argument).

Если Π²Ρ‹ ΠΈΡ‰ΠΈΡ‚Π΅ Π² спискС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΠΊΠ° ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½. ΠœΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π±Ρ‹ поиск, исслСдуя содСрТаниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π² спискС с указатСлями.

Рис. 8.7. ΠžΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС со списками с указатСлями


На рис. 8.7 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС со списком с указатСлями. Код для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

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

/*имя Ρ„Π°ΠΉΠ»Π°: linklist.с                                             */

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

/*Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹*/

*include <stdio.h> /*стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Π²ΠΎΠ΄Π° - Π²Ρ‹Π²ΠΎΠ΄Π° */

*include <stdlib.h> /*стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° динамичСского */

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

/*global variables - Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ОбъявлСниС этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… */