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

ИспользованиС динамичСских списков Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ³Ρ€Ρ‹ Β«ΠšΡ€Π΅ΡΡ‚ΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈΒ»

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

Π’ ΡΡ‚ΠΎΠΌ случаС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ down ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΎΠΊ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ списки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², цСлСсообразно Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ down Π½Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π° ΠΈΡ… Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… Π΄Π»ΠΈΠ½Π° ΠΈ Ρ‚. ΠΏ. Π‘Π°ΠΌΠΎ описаниС Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ адрСсуСмый ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ‚ΠΎΠΌΠΎΠΌ ΠΈΠ»ΠΈ ΡƒΠ·Π»ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚ΠΎΠΌ дСскрипторС… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ИспользованиС динамичСских списков Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ³Ρ€Ρ‹ Β«ΠšΡ€Π΅ΡΡ‚ΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈΒ» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅

«Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ программирования»

Π’Π΅ΠΌΠ°: «Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ динамичСских списков Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ³Ρ€Ρ‹ „ΠšΡ€Π΅ΡΡ‚ΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈ»

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

Достоинства динамичСской памяти:

— ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ;

— Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского измСнСния числа элСмСнтов Π² ΡΠ²ΡΠ·Π°Π½Π½Ρ‹Ρ… структурах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, списках (Π² ΡΡ‚атичСской памяти число элСмСнтов фиксировано для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ компиляции);

— ΡΡ‚атичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½ΠΈ Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ — ΠΈ ΠΏΠΎΡΠ»Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π±Π»ΠΎΠΊΠ° Π΄ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ — ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, сколько Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ;

— ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, размСщаСмая динамичСски, Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ VAR ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ («Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΊΠ°»). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСста Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠΎΠ΄ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

НСдостатки динамичСской памяти:

— ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ся процСссы выдСлСния ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ динамичСской памяти ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со ΡΡ‚атичСской;

— ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнных динамичСскими структурами.

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ участок динамичСской памяти доступСн Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ доступСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π°Π΄Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ этот участок. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, выдСляСмой Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π΅Π»Π΅ Π½Π΅Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).

Β· Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (Π½Π° ΡƒΡ‡Π°ΡΡ‚ΠΎΠΊ динамичСской памяти) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ автоматичСской памяти. Π’ ΡΡ‚ΠΎΠΌ случаС выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ нСдоступна ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π±Π»ΠΎΠΊΠ° Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ указатСля, ΠΈ Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π±Π»ΠΎΠΊΠ°.

Β· Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ статичСской памяти. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСлСнная ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π² Π±Π»ΠΎΠΊΠ΅, доступна Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π΅ Π² Π±Π»ΠΎΠΊ. ΠŸΠ°ΠΌΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ.

Β· Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ являСтся Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π±Π»ΠΎΠΊΡƒ. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ доступна Π²ΠΎ Π²ΡΠ΅Ρ… Π±Π»ΠΎΠΊΠ°Ρ…, Π³Π΄Π΅ «Π²ΠΈΠ΄Π΅Π½» ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. ΠŸΠ°ΠΌΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… состояний, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½;

содСрТит адрСс размСщСния;

содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ константы nil; Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ называСтся пустым, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ nil содСрТит 0 Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚ΠΎΠ².

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ

ь ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ указатСлями, ь ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌ Π°Π΄Ρ€Π΅Ρ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ указатСля, ь ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ нСльзя

ь ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ;

ь Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ Π½Π° ΡΠΊΡ€Π°Π½.

БрСдства выдСлСния ΠΈ освобоТдСния памяти

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

Рассмотрим ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ срСдства управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½ — ΠΎΠ½ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ указания Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ. Π Π°Π·ΠΌΠ΅Ρ€ опрСдСляСтся компилятором автоматичСски исходя ΠΈΠ· Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new. ΠšΡ€ΠΎΠΌΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния памяти происходит Π΅Ρ‰Π΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² конструктора ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли ΡƒΠΊΠ°Π·Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто употрСбляСмый:

new Type (parameters)

Π³Π΄Π΅ Type — Ρ‚ΠΈΠΏ создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ компилятор автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для Π½Π΅Π³ΠΎ объСм памяти;

parameters — Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ конструктору ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ отсутствия списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² скобки ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Ѐункция malloc, Π΄ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ языку C++ Π² Π½Π°ΡΠ»Π΅Π΄ΡΡ‚Π²ΠΎ ΠΎΡ‚ C, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ указания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ количСства Π±Π°ΠΉΡ‚ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΡ€ΠΎΠΌΠ΅ собствСнно выдСлСния памяти Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows — LocalAlloc ΠΈ GlobalAlloc — ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ, хотя ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ся Π² Ρ†Π΅Π»ΡΡ… совмСстимости. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ прилоТСниям рСкомСндуСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ HeapAlloc, Π° Ρ‚Π°ΠΊΠΆΠ΅ VirtualAlloc, которая, ΠΏΠΎΠΌΠΈΠΌΠΎ выдСлСния памяти, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ рСзСрвирования памяти ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти.

БоотвСтствСнно, срСдства освобоТдСния памяти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete освобоТдаСт занятый ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этим Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ дСструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли пСрСмСнная ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НичСго, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, содСрТащСго адрСс удаляСмого Π±Π»ΠΎΠΊΠ°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ.

Ѐункция free () освобоТдаСт Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc () Π±Π»ΠΎΠΊ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ адрСс Π±Π»ΠΎΠΊΠ°.

Π’ ΡΠ·Ρ‹ΠΊΠ΅ C++ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ срСдства создания динамичСских структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ для Π½ΠΈΡ… ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π² Π½ΠΈΡ… исчСзаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.

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

ДинамичСскиС структуры Π΄Π°Π½Π½Ρ‹Ρ… — это структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выдСляСтся ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ся ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

ДинамичСскиС структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ сущСствования Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ число ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΈΡ… ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами. ΠŸΡ€ΠΈ этом Π½Π΅ ΡƒΡ‡ΠΈΡ‚ываСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ содСрТимого самих элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. Вакая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ динамичСских структур, ΠΊΠ°ΠΊ нСпостоянство ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π° ΡΡ‚Π°ΠΏΠ΅ создания машинного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ для всСй структуры Π² Ρ†Π΅Π»ΠΎΠΌ участок памяти фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ структуры ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ адрСса. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ адрСсации динамичСских структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ динамичСским распрСдСлСниСм памяти, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты выдСляСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ «Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ» Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Π²ΠΎ врСмя компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π² ΡΡ‚ΠΎΠΌ случаС выдСляСт фиксированный объСм памяти для хранСния адрСса динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ элСмСнта, Π° Π½Π΅ ΡΠ°ΠΌΠΎΠ³ΠΎ элСмСнта.

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΡ… структурах Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях.

Β· Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ довольно большой Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массивы большой размСрности), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π² ΠΎΠ΄Π½ΠΈΡ… частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ….

Β· Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ΅Π½ массив, список ΠΈΠ»ΠΈ иная структура, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ измСняСтся Π² ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ прСдсказуСм.

Β· Когда Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ объСм сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ….

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

Достоинства связного прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… — Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ обСспСчСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ измСнчивости структур:

Β· Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры ограничиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ доступным объСмом машинной памяти;

Β· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ логичСской ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтов структуры трСбуСтся Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ коррСкция ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ;

Β· большая Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ структуры.

ВмСстС с Ρ‚Π΅ΠΌ, связноС прСдставлСниС Π½Π΅ Π»ΠΈΡˆΠ΅Π½ΠΎ ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠΎΠ², основными ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Β· Π½Π° ΠΏΠΎΠ»Ρ, содСрТащиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для связывания элСмСнтов Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, расходуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ;

Β· доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ связной структуры ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ эффСктивным ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

1. ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ (отвСсти мСсто Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ памяти);

2. Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ указатСля;

3. ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ (ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ занятоС структурой мСсто).

ДинамичСскиС структуры ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΈ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… извСстСн, особСнно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ сортировки.

Одним ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² динамичСской структуры являСтся — список.

БвязныС Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ списки

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

Π”Π»ΠΈΠ½Π° списка Ρ€Π°Π²Π½Π° числу элСмСнтов, содСрТащихся Π² ΡΠΏΠΈΡΠΊΠ΅, список Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ называСтся пустым списком. Бписки ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ элСмСнты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. Для связывания элСмСнтов Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ систСму ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ случаС, любой элСмСнт Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ являСтся пустым ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎ интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ† списка.

ГрафичСски связи Π² ΡΠΏΠΈΡΠΊΠ°Ρ… ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стрСлок. Если ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π° Π½ΠΈ Ρ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ρ‚ΠΎ Π² ΠΏΠΎΠ»Π΅ указатСля Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ элСмСнт. Вакая ссылка обозначаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ — nil.

МашинноС прСдставлСниС связных Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… списков

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структура односвязного списка. На Π½Π΅ΠΌ ΠΏΠΎΠ»Π΅ INF — ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π΄Π°Π½Π½Ρ‹Π΅, NEXT — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт списка. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ список Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ особый элСмСнт, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π°Ρ‡Π°Π»Π° списка ΠΈΠ»ΠΈ Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов. Π’ ΠΏΠΎΠ»Π΅ указатСля послСднСго элСмСнта списка находится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ nil, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎ ΠΊΠΎΠ½Ρ†Π΅ списка.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° односвязного списка

Однако, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° односвязного списка Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ продвиТСния Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡƒΡŽ сторону. Π’Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обСспСчиваСт двухсвязный список, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТит Π΄Π²Π° указатСля: Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнты списка. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ двухсвязного списка ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅, Π³Π΄Π΅ ΠΏΠΎΠ»Π΅ NEXT — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, ΠΏΠΎΠ»Π΅ PREV — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт. Π’ ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… элСмСнтах ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ nil,.

Для удобства ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списка Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ особый элСмСнт — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Ρ†Π° списка. НаличиС Π΄Π²ΡƒΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ элСмСнтС услоТняСт список ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌ памяти, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ эффСктивноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ списком.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° двухсвязного списка

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

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ списками нСсколько ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, выполняСмыС Π½Π°Π΄ списком. Однако, ΠΏΡ€ΠΈ просмотрС Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка слСдуСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ€ прСдостороТности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ».

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ двухсвязного списка

Π’ ΠΏΠ°ΠΌΡΡ‚ΠΈ список прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ дСскриптора ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ записСй, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ области памяти ΠΈ ΡΠ²ΡΠ·Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π—Π°ΠΏΠΈΡΡŒ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ поля ΠΈ ΠΏΠΎΠ»Ρ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡΠΎΡΠ΅Π΄Π½ΠΈΠ΅ элСмСнты списка, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ полями ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ части ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈ памяти с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, относящСйся ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ списка. ДСскриптор списка рСализуСтся Π² Π²ΠΈΠ΄Π΅ особой записи ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΏΠΈΡΠΊΠ΅, ΠΊΠ°ΠΊ адрСс Π½Π°Ρ‡Π°Π»Π° списка, ΠΊΠΎΠ΄ структуры, имя списка, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число элСмСнтов Π² ΡΠΏΠΈΡΠΊΠ΅, описаниС элСмСнта ΠΈ Ρ‚. Π΄., ΠΈ Ρ‚. ΠΏ. ДСскриптор ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ элСмСнты списка, ΠΈΠ»ΠΈ для Π½Π΅Π³ΠΎ выдСляСтся ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто.

РСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ связными Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ списками

НиТС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ простыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ списками. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС рисунками со ΡΡ…Π΅ΠΌΠ°ΠΌΠΈ измСнСния связСй ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

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

Вставка элСмСнта Π² список

Вставка элСмСнта Π² сСрСдину 1-связного списка

Вставка элСмСнта Π² сСрСдину 2-связного списка

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ вставку Π² ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½Ρƒ списка, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ для вставки Π² Π½Π°Ρ‡Π°Π»ΠΎ списка. ΠŸΡ€ΠΈ послСднСй Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅.

Вставка элСмСнта Π² Π½Π°Ρ‡Π°Π»ΠΎ 1-связного списка

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· списка

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· 1-связного списка

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ удалСния элСмСнта ΠΈΠ· Π΄Π²ΡƒΡ…связного списка окаТСтся Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ для односвязного, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ поиск ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ элСмСнта, ΠΎΠ½ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π°Π·Π°Π΄.

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° элСмСнтов списка

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

НСлинСйныС Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½Ρ‹Π΅ списки

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия

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

Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ список опрСдСляСтся ΠΊΠ°ΠΊ любая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠΎΠ² ΠΈ ΡΠΏΠΈΡΠΊΠΎΠ² (подсписков), Π³Π΄Π΅ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ‚ΠΎΠΌΠ° бСрСтся любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ отличаСтся ΠΎΡ‚ ΡΠΏΠΈΡΠΊΠ° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎ Π½Π΅Π΄Π΅Π»ΠΈΠΌ.

Бпособ прСдставлСния, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ списков, — графичСскиС схСмы, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ способу прСдставлСния, примСняСмому ΠΏΡ€ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… списков. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт списка обозначаСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ; стрСлки ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ элСмСнтами ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ списка ΠΈΠ»ΠΈ элСмСнтами подсписка.

БхСматичСскоС прСдставлСниС Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ списка

Π Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½Ρ‹Π΅ списки ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ трСмя характСристиками: порядком, Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ. ΠŸΡ€ΠΈ прСдставлСнии списков графичСскими схСмами порядок опрСдСляСтся Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ стрСлками. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ стрСлки ΠΈΡΡ‚ΠΎΠ»ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: элСмСнт ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ исходит стрСлка, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ элСмСнту, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚.

Π“Π»ΡƒΠ±ΠΈΠ½Π°. Π­Ρ‚ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, приписываСмый элСмСнтам Π²Π½ΡƒΡ‚Ρ€ΠΈ списка ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ любого подсписка Π² ΡΠΏΠΈΡΠΊΠ΅. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ элСмСнта прСдписываСтся Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ подсписков Π²Π½ΡƒΡ‚Ρ€ΠΈ списка. Π“Π»ΡƒΠ±ΠΈΠ½Π° списка являСтся ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ уровня срСди ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ всСх Π°Ρ‚ΠΎΠΌΠΎΠ² списка.

Π”Π»ΠΈΠ½Π°. Π­Ρ‚ΠΎ число элСмСнтов уровня 1 Π² ΡΠΏΠΈΡΠΊΠ΅. НапримСр, Π΄Π»ΠΈΠ½Π° списка Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ Ρ€Π°Π²Π½Π° 3.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ списковых структур Π² памяти

Π’ ΡΠΎΠΎΡ‚вСтствии со ΡΡ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½Ρ‹Ρ… списков типичная структура элСмСнта Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° элСмСнта Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ списка

Π’ ΡΡ‚ΠΎΠΌ случаС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ down ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΎΠΊ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ списки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², цСлСсообразно Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ down Π½Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π° ΠΈΡ… Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… Π΄Π»ΠΈΠ½Π° ΠΈ Ρ‚. ΠΏ. Π‘Π°ΠΌΠΎ описаниС Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ адрСсуСмый ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ‚ΠΎΠΌΠΎΠΌ ΠΈΠ»ΠΈ ΡƒΠ·Π»ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚ΠΎΠΌ дСскрипторС. Π£Π΄ΠΎΠ±Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ дСскриптора Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° списка. Π’ ΡΡ‚ΠΎΠΌ случаС Ρ€Π°Π·ΠΌΠ΅Ρ€ поля type ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ 1 Π±Π°ΠΉΡ‚Π° ΠΈ ΡΡ‚ΠΎ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Π΄ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚ΠΎΠΌ/подсписок, Π½ΠΎ ΠΈ Ρ‚ΠΈΠΏ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»Π΅ next Π² Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прСдставлСния Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π°Ρ‚ΠΎΠΌΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСдставлСния списка элСмСнтами ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°

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

Для дСмонстрации примСнСния списков, трСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘++. Π’ΠΈΠΏ — ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ, Π½Π΅ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ, Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ элСмСнтом. Π’ ΡΠΈΠ»Ρƒ особСнностСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹, список, Ρ‚Π°ΠΊΠΆΠ΅, являСтся Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½Ρ‹ΠΌ. Π’ΠΈΠΏ ΠΈΠ³Ρ€Ρ‹ выбираСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ — морской Π±ΠΎΠΉ.

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

ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘++. Π’ΠΈΠΏ списка — ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ, Π½Π΅ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ, Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ элСмСнта, Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Ρ‘Π½Π½Ρ‹ΠΉ.

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит Π²Ρ‹Π·ΠΎΠ² мСню. МСню цикличСскоС.

ΠŸΡƒΠ½ΠΊΡ‚Ρ‹ мСню:

1. New game (Π‘Ρ‚Π°Ρ€Ρ‚ ΠΈΠ³Ρ€Ρ‹)

2. Options (Настройки)

3. Information (Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅)

4. Exit (Π’Ρ‹Ρ…ΠΎΠ΄) Начало ΠΈΠ³Ρ€Ρ‹ происходит ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню. Π˜Π³Ρ€Π° прСдставляСт собой 2 поля Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10 Π½Π° 10. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ enter происходит «Π²Ρ‹ΡΡ‚Ρ€Π΅Π»» ΠΏΠΎ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ поля. ЦСль ΠΈΠ³Ρ€Ρ‹ — ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ всС корабля ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.

Π’ ΠΈΠ³Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 2 списка, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° списков, количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½ΠΎ количСству ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ Π½Π° ΠΏΠΎΠ»Π΅. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, Π³Π΄Π΅ находится ΠΊΠΎΡ€Π°Π±Π»ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, элСмСнт списка с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ этого поля удаляСтся ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.

ВСстированиС

Новая ΠΈΠ³Ρ€Π°. 2 поля 10×10. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ 2 списка Π˜Π³Ρ€ΠΎΠΊ сдСлал Ρ…ΠΎΠ΄ ΠΈ ΠΏΡ€ΠΎΠΌΠ°Ρ…нулся. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ…ΠΎΠ΄Π°ΠΌΠΈ. ПослС этого ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π΄Π²ΡƒΡ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π°Π±Π»ΡŒ, Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ промахиваСтся. Π‘Π½ΠΎΠ²Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°.

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ³Ρ€ΠΎΠΊ снова промахиваСтся, Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, ΠΈ ΠΎΠ½ ΡΠ½ΠΎΠ²Π° Π±ΡŒΡ‘Ρ‚ Π² Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ПослС этого ΠΎΠ½ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°.

ПослС этого ΠΈΠ³Ρ€Π° продолТаСтся.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ±Π΅Π΄ΠΈΠ» ΠΈΠ³Ρ€ΠΎΠΊ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

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

Бписок ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

: Π . Π›Π°Ρ„ΠΎΡ€Π΅ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² C++.

Π‘ΡŒΠ΅Ρ€Π½ Бтрауструп. Π―Π·Ρ‹ΠΊ программирования Π‘++

ПодбСльский Π’. Π―Π·Ρ‹ΠΊ Π‘++

Листинг списков

class shiplist

{

public:

struct ship //элСмСнт списка

{

int x, y;

ship* nextright;

ship* nextdown;

ship (int _x, int _y, ship *nr = NULL, ship *nd = NULL)// конструктор с ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ значСниями

{

x = _x;

y = _y;

nextright = nr;

nextdown = nd;

}

};

int shipCount;

ship* first; // ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт

ship* firstdown; //Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт

ship* lastright; //ПослСдний элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅ корабля

ship* lastdown;// ПослСдний элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ

shiplist () // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ списка

{

shipCount = 0;

first = firstdown = lastright = lastdown = NULL;

}

void addshipFirst (int _x, int _y) //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ корабля

{

ship* newship = new ship (_x, _y);

first = newship;

lastright = newship;

lastdown = newship;

shipCount++;

}

void addshipRight (int _x, int _y) //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ корабля Π²ΠΏΡ€Π°Π²ΠΎ (ячСйки)

{

ship* newship = new ship (_x, _y);

lastright->nextright = newship;

lastright = newship;

shipCount++;

}

void addshipDown (int _x, int _y) //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ корабля

{

ship* newship = new ship (_x, _y);

lastdown->nextdown = newship;

lastdown = newship;

lastright = newship;

shipCount++;

}

bool delShip (int _x, int _y) //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ячСйки

{

ship* prev = NULL,

*current = first,

*lastdown = first,

*prevup = NULL;

while (current) //ΠΏΠΎΠΊΠ° Π½Π΅ 0

{

while (current->nextdown) //ΠΏΠΎΠΊΠ° снизу Π½Π΅ Π½ΠΎΠ»ΡŒ

{

while (current->nextright) //ΠΏΠΎΠΊΠ° справа Π½Π΅ Π½ΠΎΠ»ΡŒ

{

if ((current->x == _x) && (current->y == _y)) //Ссли значСния совпали

{

if (current == first) //Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ

{

if (current->nextright) //Ссли справа Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ

{

current->nextright->nextdown = current->nextdown;

first = current->nextright;

lastdown = first;

delete current;

shipCount—;

current = first;

return true;

}

else

{

first = current->nextdown;

lastdown = first;

delete current;

shipCount—;

current = first;

return true;

}

else if ((prev == 0) && (prevup ≠ 0) && (current->nextright ≠ 0)) //Ссли слСва пусто ΠΈ ΡΠ²Π΅Ρ€Ρ…Ρƒ Π΅ΡΡ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠ° ΠΈ ΡΠΏΡ€Π°Π²Π° Π½Π΅ ΠΏΡƒΡΡ‚ΠΎ

{

prevup->nextdown = current->nextright;

current->nextright->nextdown = current->nextdown;

lastdown = current->nextright;

delete current;

shipCount—;

current = lastdown;

return true;

}

else if (prev) //Ссли ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π½Π΅ Ρ€Π°Π²Π΅Π½ 0

{

prev->nextright = current->nextright;

delete current;

shipCount—;

current = prev->nextright;

return true;

}

}

else //Ссли значСния Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π»ΠΈ ΠΈΠ΄Ρ‘ΠΌ дальшС

{

prev = current;

current = current->nextright;

}

}

if ((current->x == _x) && (current->y == _y)) //Ссли справа 0

{

if (prev) //Ссли слСва Π½Π΅ ΠΏΡƒΡΡ‚ΠΎ

{

prev->nextright = 0;

delete current;

shipCount—;

current = prev;

return true;

}

else if ((prev == 0) && (prevup ≠ 0) && (current->nextright == 0) && (current->nextdown ≠0)) //Ссли слСва пусто ΠΈ ΡΠ²Π΅Ρ€Ρ…Ρƒ Π΅ΡΡ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠ° ΠΈ ΡΠΏΡ€Π°Π²Π° пусто ΠΈ ΡΠ½ΠΈΠ·Ρƒ Π½Π΅ ΠΏΡƒΡΡ‚ΠΎ

{

prevup->nextdown = current->nextdown;

lastdown = current->nextdown;

delete current;

shipCount—;

current = lastdown;

return true;

}

prevup = lastdown;

current = lastdown->nextdown;

lastdown = current;

prev = 0;

}

delete current;

shipCount—;

return true;

}

return false;

}

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