ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° односвязных ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… списков Π² памяти ОБ Windows

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ этапом написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стала рСализация структуры списка, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π½ΠΈΠΌ. Π‘ΠΌ. ΠΏΡƒΠ½ΠΊΡ‚ 2.1 Главная Π·Π°Π΄Π°Ρ‡Π° — синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… со ΡΠΏΠΈΡΠΊΠΎΠΌ. Π‘ΠΌ. ΠΏΡƒΠ½ΠΊΡ‚ 2.2 Для этого я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ для списка. Π­Ρ‚ΠΎ нСсСт Π² ΡΠ΅Π±Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ смысл: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° односвязных ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… списков Π² памяти ОБ Windows (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ образования ΠΈ Π½Π°ΡƒΠΊΠΈ Π£ΠΊΡ€Π°ΠΈΠ½Ρ‹ Π₯Π°Ρ€ΡŒΠΊΠΎΠ²ΡΠΊΠΈΠΉ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ унивСрситСт ΠΈΠΌ. Π’. Н. ΠšΠ°Ρ€Π°Π·ΠΈΠ½Π° Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… Π½Π°ΡƒΠΊ ΠšΠ°Ρ„Π΅Π΄Ρ€Π° искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠšΡƒΡ€ΡΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Π’Π΅ΠΌΠ°:

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° односвязных ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… списков Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠžΠ‘ Windows

Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ: студСнтка Π³Ρ€. КБ-31

Π•.Π’. ΠšΡƒΠ½ΠΈΠ½Π° Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ: ст. ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ О. М. Π“ΠΎΡ€Π±Π°Π½ΡŒ Π₯Π°Ρ€ΡŒΠΊΠΎΠ² 2012

Π‘ΠžΠ”Π•Π Π–ΠΠΠ˜Π• Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. АналитичСский ΠΎΠ±Π·ΠΎΡ€

1.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

1.2 ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ

2. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

2.1 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ списка

2.2 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»ΠΎΠΌ памяти Π² ΠžΠ‘ Windows ΠΈ ΠΈΡ… Ρ€ΠΎΠ»ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

2.3 БрСдства создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

2.4 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

2.5 Набор тСстов для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²8

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ источники ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ КП ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘. Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π’Π•Π”Π•ΠΠ˜Π•

На ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ задания, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ряд Ρ†Π΅Π»Π΅ΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π½ΠΈΠΆΠ΅.

Π¦Π΅Π»ΠΈ:

— ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ понятиями, ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° (ΠΏΡƒΠ» памяти), связный список, синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²;

— ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅ΡΡ‚ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ написания ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ возмоТности пСрСкрытия Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Π—Π°Π΄Π°Ρ‡ΠΈ:

— Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ях ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ связных списков ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»ΠΎΠΌ памяти Π² ΠžΠ‘ Windows;

— Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ структуру списка ΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ;

— Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 5-ью ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ список ΠΈ ΡƒΠ΄Π°Π»ΡΠ΅Ρ‚ ΠΊΡƒΡ‡Ρƒ послС Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ добавляСт элСмСнты Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΡƒΠ΄Π°Π»ΡΠ΅Ρ‚ ΠΈΡ… ΡΠΎΠΎΡ‚вСтствСнно, Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ измСняСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты, пятый Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС списка Π½Π° ΡΠΊΡ€Π°Π½;

— ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ возмоТности пСрСкрытия Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠΌ;

— Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ряд тСстов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бвязный список — структура Π΄Π°Π½Π½Ρ‹Ρ…, состоящая ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΠΊΠ°ΠΊ собствСнно Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ Π΄Π²Π΅ ссылки Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» списка. Cormen, Leiserson, Rivest, and Stein. Introduction to Algorithms, 2nd edition. The MIT Press, 2001 ΠšΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ односвязный список содСрТит, ΠΊΡ€ΠΎΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ссылку Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, ΠΏΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ послСднСго элСмСнты ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ (образуя, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΊΠΎΠ»ΡŒΡ†Π°). ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ прСимущСством ΠΏΠ΅Ρ€Π΅Π΄ массивом являСтся структурная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: порядок элСмСнтов связного списка ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠΌ располоТСния элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° ΠΏΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΎΠ±Ρ…ΠΎΠ΄Π° списка всСгда явно задаётся Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ связями. http://ru.wikipedia.org/wiki/Бвязный_список, А Π²ΠΎΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΊΡƒΠ΄Π° Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ связано с ΠΏΠΎΠΈΡΠΊΠΎΠΌ, нСльзя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠΊ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠ°ΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡƒΠ» памяти (ΠΊΡƒΡ‡Π°) — распрСдСляСмая процСссом ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΈΠΌ Π΄Π»Ρ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² памяти, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ страницы. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΡƒΡ‡Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, описанных Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ΠΠ½Π°Π»ΠΈΡ‚ичСский ΠΎΠ±Π·ΠΎΡ€». ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹

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

ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «ΠΠ½Π°Π»ΠΈΡ‚ичСский ΠΎΠ±Π·ΠΎΡ€» ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ постановка Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ достиТСния Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² ΠΎΠ±Ρ‰Π΅ΠΌ). Π Π°Π·Π΄Π΅Π» «Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹» ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ описанныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎ Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅. Π’ «Π’Ρ‹Π²ΠΎΠ΄Π°Ρ…» сформулированы основныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ†Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посрСдством Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠšΠŸ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ. Π’Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ содСрТит список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ 2 прилоТСния: Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° задания ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ариями.

1. ΠΠΠΠ›Π˜Π’Π˜Π§Π•Π‘ΠšΠ˜Π™ ΠžΠ‘Π—ΠžΠ 

1.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ задания Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, разработанная для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠžΠ‘ Windows, которая Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»Π° Π±Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ односвязного ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ списка. Π—Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ 5 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²:

— Π³Π»Π°Π²Π½Ρ‹ΠΉ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ структуру списка ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ послС Π΅Π³ΠΎ использования ΠΏΠ°ΠΌΡΡ‚ΡŒ;

— ΠΏΠΎΡ‚ΠΎΠΊ, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ элСмСнты Π² ΡΠΏΠΈΡΠΎΠΊ;

— ΠΏΠΎΡ‚ΠΎΠΊ, ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ элСмСнты ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°;

— ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты;

— ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ списка (выводящий список Π½Π° ΡΠΊΡ€Π°Π½).

1.2 ΠžΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ этапом написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стала рСализация структуры списка, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π½ΠΈΠΌ. Π‘ΠΌ. ΠΏΡƒΠ½ΠΊΡ‚ 2.1 Главная Π·Π°Π΄Π°Ρ‡Π° — синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… со ΡΠΏΠΈΡΠΊΠΎΠΌ. Π‘ΠΌ. ΠΏΡƒΠ½ΠΊΡ‚ 2.2 Для этого я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ для списка. Π­Ρ‚ΠΎ нСсСт Π² ΡΠ΅Π±Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ смысл: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ ΡΠΏΠΈΡΠΊΡƒ (Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ ΠΊ ΠΊΡƒΡ‡Π΅), Ρ‚ΠΎ ΠΎΠ½ ΠΊΠ°ΠΊ критичСский Ρ€Π°Π·Π΄Π΅Π» блокируСтся, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΠΏΠΈΡΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ приостановлСн Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π³ΠΎ освобоТдСния. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ мною Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ обСспСчСния многопоточности. Π‘ΠΌ. ΠΏΡƒΠ½ΠΊΡ‚ 2.3

2. Π’Π«ΠŸΠžΠ›ΠΠ•ΠΠ˜Π• ΠŸΠ ΠžΠ•ΠšΠ’Π

2.1 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ списка К ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ списка ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

— InitialList — инициализация списка;

— AddElem — Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° Π² ΠΊΠΎΠ½Π΅Ρ† списка;

— EraseElem — ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°; Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ мною список ΠΈΠΌΠ΅Π΅Ρ‚ всСго 2 поля: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число (нСпосрСдствСнно Π΄Π°Π½Π½Ρ‹Π΅), Ρ‚ΠΎ ΠΏΠΎΠΈΡΠΊ элСмСнта для Π΅Π³ΠΎ удалСния производится ΠΏΠΎ ΡΡ‚ΠΎΠΌΡƒ самому числу, ΠΏΡ€ΠΈ ΡΡŒΡ‚ΠΎΠΌ считаСтся, Ρ‡Ρ‚ΠΎ элСмСнты Π² ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ (для Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ);

— ChangeElem — ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°; поиск элСмСнты Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ поиску ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ;

— Print — Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ всСх ΡƒΠ·Π»ΠΎΠ² списка. Код Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ см. Π² ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π‘

2.2 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»ΠΎΠΌ памяти Π² ΠžΠ‘ Windows ΠΈ ΠΈΡ… Ρ€ΠΎΠ»ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π’ ΠΏΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ — обСспСчСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ возмоТности пСрСкрытия Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ прСдлагаСтся посрСдством создания ΠΏΠΎΠ΄ список ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ, Π° Π²ΡΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»ΠΎΠΌ памяти. Π’ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

— HeapCreate. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΡƒΡ‡Ρƒ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fdwOptions ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ способ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΊΡƒΡ‡Π΅ΠΉ. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ 0, НЕАР_NO_SERIALIZE, НЕАР_GENERATE_EXCEPTIONS, HEAP_CREATE_ENABLE_EXECUTE ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ этих Ρ„Π»Π°Π³ΠΎΠ². Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ HeapCreate — dwInitiallSize — опрСдСляСт количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΡƒΡ‡Π΅. ΠŸΡ€ΠΈ нСобходимости функция округляСт это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠ΅ΠΉ большСй Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ страниц. И ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, dwMaximumSize, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΊΡƒΡ‡Π° (ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм адрСсного пространства, Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΊΡƒΡ‡Ρƒ). Если ΠΎΠ½ Π±ΠΎΠ»ΡŒΡˆΠ΅ 0, Π²Ρ‹ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡ‚Π΅ ΠΊΡƒΡ‡Ρƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π½Ρ ΡΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ. А Π΅ΡΠ»ΠΈ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π²Π΅Π½ 0, систСма Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π³ΠΈΠΎΠ½ ΠΈ, Ссли Π½Π°Π΄ΠΎ, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ объСма. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ создании ΠΊΡƒΡ‡ΠΈ HeapCreate Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²ΡƒΡŽ ΠΊΡƒΡ‡Ρƒ. Π’ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ я ΡΠΎΠ·Π΄Π°Π²Π°Π»Π° ΠΊΡƒΡ‡Ρƒ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° структуры ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ списка.

— HeapAlloc. ВыдСляСт Π±Π»ΠΎΠΊ памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»Π° эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта списка. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hHeap ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΊΡƒΡ‡ΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dwBytes опрСдСляСт число выдСляСмых Π² ΠΊΡƒΡ‡Π΅ Π±Π°ΠΉΡ‚ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fdwFlags позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ΠΈ, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ выдСлСния памяти. Π’ Π½Π°ΡΡ‚оящСС врСмя поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ Ρ„Π»Π°Π³Π°: HEAP_ZERO_MEMORY, HEAP_GENERATE_EXCEPTIONS ΠΈ HEAP_NO_SERIALIZE.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Для выдСлСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² памяти (ΠΎΡ‚ 1 Мб) рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ VirtualAlloc, Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ с ΠΊΡƒΡ‡Π°ΠΌΠΈ.

— HeapFree. Π‘Π»ΡƒΠΆΠΈΡ‚ для освобоТдСния Π±Π»ΠΎΠΊΠ° памяти. Π’ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнта. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hHeap ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΡƒΡ‡Ρƒ, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ pvMem сообщаСт адрСс Π±Π»ΠΎΠΊΠ°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fdwFlags ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° значСния: 0 ΠΈΠ»ΠΈ HEAP_NO_SERIALIZE.

— HeapDestroy. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ ΠΊΡƒΡ‡Ρƒ вмСстС со Π²ΡΠ΅ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΉ хранятся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ² большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° закончится Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всСго 1 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hHeap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΡƒΡ‡Ρƒ.

— Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — HeapLock ΠΈ HeapUnlock — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π½ΠΎ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° HeapLock ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π» эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, становится Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ. Если Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ обращаСтся ΠΊ ΡΡ‚ΠΎΠΉ ΠΊΡƒΡ‡Π΅, указывая Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΊΡƒΡ‡ΠΈ, систСма приостанавливаСт Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΊΡƒΡ‡Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ HeapUnlock. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ HeapAlloc, HeapSize, HeapFree ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ — всС ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ HeapLock ΠΈ HeapUnlock, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ ΠΊΡƒΡ‡Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ явно Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Π½Ρ‹. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ для ΠΏΡƒΠ½ΠΊΡ‚Π° 2.2 взята ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€Π° «Windows для профСссионалов»

2.3 БрСдства создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

uintptr_t _beginthread (

void (*start_address)(void *),

unsigned stack_size,

void *arglist

);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая являСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° для самого ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Π°ΠΌΠ° функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ:

void myThread (void* pParams)

{

.. .

}

Имя ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ это Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка. ΠŸΠΎΡ‡Ρ‚ΠΈ Π² Π»ΡŽΠ±ΠΎΠΌ случаС Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ 0. Π’ΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ процСсса. Π‘ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ всС Π΅Ρ‰Ρ‘ Π»Π΅Π³Ρ‡Π΅, это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ NULL. Или ΠΆΠ΅ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ (void*)(pParam) Π² ΡΠ»ΡƒΡ‡Π°Π΅ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ трСбуСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ для ΠΏΡƒΠ½ΠΊΡ‚Π° 2.3 взята с ΡΠ°ΠΉΡ‚Π° http://forum.xakep.ru/

2.4 ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создаСт список ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ. ПослС Ρ‡Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ 4 ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘ΠΌ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, А ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ пытаСтся ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠΏΠΈΡΠΎΠΊ элСмСнты ΠΎΡ‚ 1 Π΄ΠΎ 9, Π²Ρ‚ΠΎΡ€ΠΎΠΉ — ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ — ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ элСмСнты ΠΏΡƒΡ‚Π΅ΠΌ прибавлСния ΠΊ Π½ΠΈΠΌ 1000, Π° Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ — вывСсти Π½Π° ΡΠΊΡ€Π°Π½ содСрТимоС списка (10 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ). ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅ списка см. Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ 2.1 Π’ силу особСнностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ запускС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, поэтому ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий нСпрСдсказуСма.

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

Π˜Ρ‚Π°ΠΊ Π²ΠΎΡ‚ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² 3 запусков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ говорят ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ности Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Рисунок 1. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π ΠΈΡΡƒΠ½ΠΊΠ° 1, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊ 1 Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² ΡΠΏΠΈΡΠΎΠΊ ΡƒΠ·Π΅Π» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1. ПослС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ 3 ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π΅Π³ΠΎ Π½Π° ΡƒΠ·Π΅Π» 1001. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹ списка Π½Π΅ ΡƒΠ²Π΅Π½Ρ‡Π°Π»ΠΈΡΡŒ успСхом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ элСмСнты 2−9 Π² ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ этапС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΠ» ΠΏΠΎΡ‚ΠΎΠΊ 4 ΠΈ 10 Ρ€Π°Π· Π²Ρ‹Π²Π΅Π» содСрТимоС списка Π½Π° ΡΠΊΡ€Π°Π½. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 10 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ° 2 ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅Ρ‚ (ΡƒΠ·Π΅Π» 1 Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π° 1001, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹). Π”Π°Π»Π΅Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ снова ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ 1 ΠΈ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π² ΡΠΏΠΈΡΠΎΠΊ. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ списка Π½Π° ΡΠΊΡ€Π°Π½ соотвСтствуСт оТиданиям. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠ΄Π°Π»ΠΈΠ» ΠΊΡƒΡ‡Ρƒ.

Рисунок 2. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

На Π ΠΈΡΡƒΠ½ΠΊΠ΅ 2 Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΏΠΎΡ‚ΠΎΠΊ 1 ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» доступ ΠΊ ΠΊΡƒΡ‡Π΅ со ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π½Π΅Π³ΠΎ 10 элСмСнтов. Π”Π°Π»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊ 4 2 Ρ€Π°Π·Π° распСчатал список. ПослС этого всС элСмСнты Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ 2, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ 10 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ° 3 ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнты ΠΈ 8 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ° 4 вывСсти ΠΈΡ… Π½Π° ΡΠΊΡ€Π°Π½ Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡΡŒ, Ρ‚Π°ΠΊ список Π±Ρ‹Π» пуст. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠ΄Π°Π»ΠΈΠ» ΠΊΡƒΡ‡Ρƒ.

Π Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ 3-Π΅ΠΌ запускС ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совпала с 1-Ρ‹ΠΌ случаСм, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Π ΠΈΡΡƒΠ½ΠΊΠ΅ 3.

Рисунок 3. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊ связной список

Π’Π«Π’ΠžΠ”Π« Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ряд Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ². Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, всС Ρ†Π΅Π»ΠΈ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ достигнуты ΠΏΡƒΡ‚Π΅ΠΌ пошагового выполнСния поставлСнных Π² ΡΠΎΠΎΡ‚вСтствии с Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡. Π‘ΠΌ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π― ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ознакомилась с Ρ‚Π°ΠΊΠΈΠΌΠΈ понятиями ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π°, связныС списки, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ²Π»Π°Π΄Π΅Π»Π° Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ написания ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… синхронизации ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ составлСния ряда тСстов ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная мною Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΏΡ€ΠΎΡˆΠ»Π° всС заявлСнныС тСсты ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ности Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ особСнно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡƒΡ‚Π΅ΠΌ использования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ оказался для мСня Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ. Но Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ Π² Π΅Π³ΠΎ особСнностях, я Π½Π°ΡˆΠ»Π° Π΅Π³ΠΎ вСсьма ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

Π˜Π‘ΠŸΠžΠ›Π¬Π—ΠžΠ’ΠΠΠΠ«Π• ИБВОЧНИКИ ИНЀОРМАЦИИ

1. Cormen, Leiserson, Rivest, and Stein. Introduction to Algorithms, 2nd edition. The MIT Press, 2001

2. http://ru.wikipedia.org/wiki/Бвязный_список

3. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹

4. Π”ΠΆΠ΅Ρ„Ρ„Ρ€ΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€ «Windows для профСссионалов»

5. http://forum.xakep.ru/

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π•, А Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠšΠŸ

1. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΠ²ΠΎΠΉΡΡ‚Π²Π°ΠΌΠΈ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списочных структур.

2. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»ΠΎΠΌ памяти Π² ΠžΠ‘ Windows

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΡΠΎΠΎΡ‚вСтствии с ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ.

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ряд тСстов для дСмонстрации ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

5. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

ДСмонстрационная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

— Π³Π»Π°Π²Π½Ρ‹ΠΉ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ структуру списка ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ послС Π΅Π³ΠΎ использования ΠΏΠ°ΠΌΡΡ‚ΡŒ;

— ΠΏΠΎΡ‚ΠΎΠΊ, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ элСмСнты Π² ΡΠΏΠΈΡΠΎΠΊ;

— ΠΏΠΎΡ‚ΠΎΠΊ, ΡƒΠ΄Π°Π»ΡΡŽΡ‰ΠΈΠΉ элСмСнты ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°;

— ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты;

— ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ списка (выводящий список Π½Π° ΡΠΊΡ€Π°Π½).

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π• Π‘ Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

//—————————————————————————————————————;

//HEADER.H

//—————————————————————————————————————;

typedef struct node //ΡƒΠ·Π΅Π» списка, состоящий ΠΈΠ· Ρ†Π΅Π»ΠΎΠ³ΠΎ числа ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Сля Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт

{

int number;

struct node *next;

}Node, *pnode;

typedef struct list //структура односвязного ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ списка

{

int nodes; //ΠΊΠΎΠ»-Π²ΠΎ ΡƒΠ·Π»ΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅

node *end; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅

node *beg; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅

}List, *pList;

typedef struct params //структура для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΡƒ

{

List *pq; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠΏΠΈΡΠΎΠΊ

HANDLE hp; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΡƒΡ‡Ρƒ

}Params;

HANDLE InitialList (List *pq, HANDLE hp); //инициализация списка

bool AddElem (List *pq, HANDLE hp, int n); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с number =

n Π² ΠΊΠΎΠ½Π΅Ρ† списка

bool EraseElem (List *pq, HANDLE hp, int n); //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с number =

n

bool ChangeElem (List *pq, HANDLE hp, int o, int n); //ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с

number=o Π½Π° ΡƒΠ·Π΅Π» с number=n

bool Print (const List *pq, HANDLE hp); //Π²Ρ‹Π²ΠΎΠ΄ всСх ΡƒΠ·Π»ΠΎΠ² списка Π½Π°

экран

void ThreadAdd (void *p); //ΠΏΠΎΡ‚ΠΎΠΊ добавлСния ΡƒΠ·Π»ΠΎΠ²

void ThreadErase (void *p); //ΠΏΠΎΡ‚ΠΎΠΊ удалСния ΡƒΠ·Π»ΠΎΠ²

void ThreadChange (void *p); //ΠΏΠΎΡ‚ΠΎΠΊ измСнСния ΡƒΠ·Π»ΠΎΠ²

void ThreadPrint (void *p); //ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° всСх ΡƒΠ·Π»ΠΎΠ² списка Π½Π° ΡΠΊΡ€Π°Π½

//—————————————————————————————————————;

//LFUN.CPP — содСрТит Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΠΏΠΈΡΠΊΠΎΠΌ

//—————————————————————————————————————;

#include

#include

#include

#include

#include

#include

#include

#include

#include «header.h»

using namespace std;

HANDLE InitialList (List *pq, HANDLE hp) //инициализация списка

{

hp = HeapCreate (0, 0×1000, 0×10 000); //созданиС ΠΊΡƒΡ‡ΠΈ для списка

pq->beg = NULL; //инициализация ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° списка

pq->end = NULL;

pq->nodes = 0; //инициализация счСтчика ΡƒΠ·Π»ΠΎΠ²

return hp;

}

bool AddElem (List *pq, HANDLE hp, int n) //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с number =

n Π² ΠΊΠΎΠ½Π΅Ρ† списка

{

int fl = HeapLock (hp); //Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступа ΠΊ ΠΊΡƒΡ‡Π΅ списка Π΄Ρ€ΡƒΠ³ΠΈΡ…

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

if (fl == 0) //Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ

{

cout << «adding failed» << endl;

return false;

}

Node *p_new;

p_new = (pnode)HeapAlloc (hp, HEAP_ZERO_MEMORY, 10);

//Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π² ΠΊΡƒΡ‡Π΅ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π»

if (p_new == NULL) //Ссли Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ

return false;

p_new->number = n; //инициализация элСмСнтов ΡƒΠ·Π»Π°

p_new->next = pq->beg; //Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ производится Π² ΠΊΠΎΠ½Π΅Ρ†, Ρ‚ΠΎ

ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄. ΡƒΠ·Π΅Π»

// Ρ€Π°Π²Π΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ

if (pq->nodes == 0) //Ссли список Π΅Ρ‰Π΅ пуст

{

pq->beg = pq->end = p_new;

p_new->next = pq->beg;

}

else //Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

{

pq->end->next = p_new;

pq->end = p_new;

}

pq->nodes++; //ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика ΡƒΠ·Π»ΠΎΠ²

cout << n << «added» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

bool EraseElem (List *pq, HANDLE hp, int n) //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с number = n

{

int fl = HeapLock (hp); //Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступа ΠΊ ΠΊΡƒΡ‡Π΅ списка Π΄Ρ€ΡƒΠ³ΠΈΡ…

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

if (fl == 0) //Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ

{

cout << «erase failed» << endl;

return false;

}

Node *curr;

Node *lcurr;

if (pq->nodes == 0) //Ссли список пуст

{

cout << «list is empty, erase failed» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

curr = pq->beg; //Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

lcurr = pq->end;

if (curr->number == n) //Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт — искомый

{

if (pq->nodes == 1) //ΠΏΡ€ΠΈ этом СдинствСнный

{

pq->beg = NULL; //рСгСнСрация ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²

спискС

pq->end = NULL;

pq->nodes = 0;

HeapFree (hp, 0, curr); //освобоТдСниС Π±Π»ΠΎΠΊΠ° памяти

cout << n << «erased» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

lcurr->next = curr->next; //ΠΏΡ€ΠΈ этом Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ

pq->beg = curr->next;

HeapFree (hp, 0, curr); //освобоТдСниС Π±Π»ΠΎΠΊΠ° памяти

pq->nodes—; //Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

cout << n << «erased» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

if (pq->nodes == 1) //Ссли элСмСнт СдинствСнный Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ ΠΈΡΠΊΠΎΠΌΡ‹ΠΌ Π½Π΅

являСтся

{

cout << «there is no such node in list, erase failed» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

lcurr = curr;

curr = curr->next;

while (curr ≠ pq->beg) //поиск элСмСнта

{

if (curr->number ≠ n) //Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся искомым — двигаСмся

дальшС

{

lcurr = curr;

curr = curr->next;

}

else //Ссли Ρ‚Π΅ΠΊΡƒΡˆΠΈΠΉ Ρ€Π°Π²Π΅Π½ искомому

{

if (curr == pq->end)

pq->beg = lcurr;

lcurr->next = curr->next;

HeapFree (hp, 0, curr); //освобоТдСниС Π±Π»ΠΎΠΊΠ° памяти

pq->nodes—; //Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

cout << n << «erased» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

}

cout << «there is no such node in list, erase failed» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

bool ChangeElem (List *pq, HANDLE hp, int o, int n) //ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° с

number=o Π½Π° ΡƒΠ·Π΅Π» с number=n

{

int fl = HeapLock (hp); //Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступа ΠΊ ΠΊΡƒΡ‡Π΅ списка Π΄Ρ€ΡƒΠ³ΠΈΡ…

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

if (fl == 0) //Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ

{

cout << «change failed» << endl;

return false;

}

Node *curr;

if (pq->nodes == 0) //Ссли список пуст

{

cout << «list is empty, change failed» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

curr = pq->beg;

int it_count = pq->nodes;

while (it_count > 0) //поиск элСмСнта

{

if (curr->number ≠ o) //Ссли Π½Π΅ Π½Π°ΡˆΠ»ΠΈ — Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ дальшС ΠΏΠΎ ΡΠΏΠΈΡΠΊΡƒ

{

curr = curr->next;

}

else //Ссли нашли

{

curr->number = n; //ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния элСмСнта

cout << o << «changed to «<< n << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

it_count—;

}

cout << «there is no such node in list, change failed» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

bool Print (const List *pq, HANDLE hp)

{

int fl = HeapLock (hp); //Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступа ΠΊ ΠΊΡƒΡ‡Π΅ списка Π΄Ρ€ΡƒΠ³ΠΈΡ…

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

if (fl == 0) //Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ

{

cout << «print failed» << endl;

return false;

}

Node *curr;

if (pq->nodes == 0) //Ссли список пуст

{

cout << «list is empty, there is nothing to print» << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return false;

}

curr = pq->beg;

cout << curr->number;

curr = curr->next;

while (curr ≠ pq->beg) //Π²Ρ‹Π²ΠΎΠ΄ всСх элСмСнтов списка Π½Π° ΡΠΊΡ€Π°Π½

{

cout << ' ' << curr->number;

curr = curr->next;

}

cout << endl;

HeapUnlock (hp); //ΠΎΡ‚ΠΌΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

return true;

}

//—————————————————————————————————————;

//MAIN.CPP — Ρ‚Π΅Π»Π° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚оростСпСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

//—————————————————————————————————————;

#include //ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

#include

#include

#include

#include

#include

#include «header.h»

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int c = 0; //счСтчик Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

void ThreadAdd (void *p) //ΠΏΠΎΡ‚ΠΎΠΊ добавлСния ΡƒΠ·Π»ΠΎΠ²

{

int counter = 1;

Params *pp = new Params ();

pp = (Params*) p;

while (counter < 10) //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… список

элСмСнтов ΠΎΡ‚ 0 Π΄ΠΎ 9

{

AddElem (pp->pq, pp->hp, counter);

counter++;

}

c++; //ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ процСссов

_endthread ();

}

void ThreadErase (void *p) //ΠΏΠΎΡ‚ΠΎΠΊ удалСния элСмСнтов

{

int counter = 1;

Params *pp = new Params ();

pp = (Params*) p;

while (counter < 10) //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… списка

со Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΎΡ‚ 0 Π΄ΠΎ 9

{

EraseElem (pp->pq, pp->hp, counter);

counter++;

}

c++; //ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ процСссов

_endthread ();

}

void ThreadChange (void *p) //ΠΏΠΎΡ‚ΠΎΠΊ измСнСния элСмСнтов

{

int counter = 1;

Params *pp = new Params ();

pp = (Params*) p;

while (counter < 10) //ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… списка со

значСниями ΠΎΡ‚ 0 Π΄ΠΎ 9 ΠΏΡƒΡ‚Π΅ΠΌ прибавлСния ΠΊ Π½ΠΈΠΌ 1000

{

ChangeElem (pp->pq, pp->hp, counter, counter+1000);

counter++;

}

c++; //ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ процСссов

_endthread ();

}

void ThreadPrint (void *p) //ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° списка Π½Π° ΡΠΊΡ€Π°Π½

{

int counter = 0;

Params *pp = new Params ();

pp = (Params*) p;

while (counter < 10) //10 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ вывСсти ΡƒΠ·Π»Ρ‹ списка Π½Π° ΡΠΊΡ€Π°Π½

{

Print (pp->pq, pp->hp);

counter++;

}

c++; //ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ процСссов

_endthread ();

}

int main ()

{

HANDLE hp = NULL;

List q;

hp = InitialList (&q, hp); //инициализация списка

Params *p = new Params ();

p->pq = &q;

p->hp = hp;

_beginthread (ThreadAdd, 2, (void*)(p)); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ второстСпСнных

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

_beginthread (ThreadErase, 2, (void*)(p));

_beginthread (ThreadChange, 2, (void*)(p));

_beginthread (ThreadPrint, 2, (void*)(p));

while (1) //ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ второстСпСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

{

if (c == 4)

{

Print (&q, hp); //ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠ΅ распСчатываниС списка

HeapDestroy (hp); //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΡƒΡ‡ΠΈ

cout << «heap destroyed» << endl;

break;

}

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ