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

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. 
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘++, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ созданиС ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° экран связных списков

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

Бвязный список — это рСкурсивная структура, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠ·Π΅Π» всСгда содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π». Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ объСдинСниС Π΄Π²ΡƒΡ… списков ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка элСмСнтов Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ. Π£ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½Ρ‹Ρ… списков Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ прСимущСство: Ссли ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, Ρ‚ΠΎ ΡΡ‚Π°Ρ€Ρ‹ΠΉ список Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ доступСн… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘++, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ созданиС ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° экран связных списков (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π―Π·Ρ‹ΠΊ C++ являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ языком программирования, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ практичСски Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ программирования.

Π‘++ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ языка Π‘ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. На Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ высокоэффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Ρ‚ΠΎΠΌ числС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ Ρ‚. ΠΏ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТных структур Π΄Π°Π½Π½Ρ‹Ρ… — тСкста, бизнСс ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Internet-страниц ΠΈ Ρ‚. ΠΏ. — ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных возмоТностСй примСнСния языка. И Π² Π½Π°ΡΡ‚оящСС врСмя Π‘++ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… распространСнных языков программирования Π² ΠΌΠΈΡ€Π΅.

ЦСль ΠΌΠΎΠ΅ΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ — Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘++ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ созданиС ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡ€Π°Π½ связных списков.

Π—ΠΠ”ΠΠΠ˜Π•.

ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ тСорСтичСскиС свСдСния

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ связного списка.

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

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

Π’ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΌ языкС Π‘ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массив, Π½ΠΎ ΠΎΡ‚сутствуСт встроСнная рСализация связного списка. Однако Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Lisp, сущСствуСт встроСнная рСализация Π΄Π°Π½Π½ΠΎΠΉ структуры. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ «Π΄Π°Ρ‚Π° роТдСния» связных списков — 1955 Π³ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ появились Π½Π° ΡΡ‚Ρ‹ΠΊΠ΅ логичСской Ρ‚Π΅ΠΎΡ€ΠΈΠΈ машин ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’ΠΎΠ³Π΄Π° ΠΆΠ΅ связныС списки Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ трансляции Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… языков Π² Π»ΠΈΠ½Π³Π²ΠΈΡΡ‚ичСских Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π’ 1958 Π³ΠΎΠ΄Ρƒ появился язык Lisp, ΠΈ ΡΠ²ΡΠ·Π½Ρ‹ΠΉ список стал ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… структур этого языка.

БвязныС списки стали ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Π’Π°ΠΊ, для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы TSS/360 компания IBM Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ связныС списки ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Π½Π° ΠΈΡ… ΠΎΡΠ½ΠΎΠ²Π΅ для исправлСния ошибок Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Если ΠΏΡ€ΠΈ сканировании ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° обнаруТивался ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ элСмСнт, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΠ» ΠΎΡ‚ΠΊΠ°Ρ‚ с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта Π½Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ связных списков.

Бписок состоит ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΡƒΠ·Π»Π°ΠΌΠΈ (node). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ·Π΅Π» списка называСтся «Π³ΠΎΠ»ΠΎΠ²Π½Ρ‹ΠΌ» (head), Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ — «Ρ…востовым» (tail). На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ связный список.

Π”Π²ΠΎΠΉΠ½ΠΎΠΉ связный список.

Рисунок 2. Π”Π²ΠΎΠΉΠ½ΠΎΠΉ связный список ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт состоит ΠΈΠ· 3-Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π». Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° Π΄Π²Π° ΡƒΠ·Π»Π°, ΠΈ Π² ΡΡ‚ΠΎΠΌ случаС список называСтся многосвязным.

Помимо ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΡ…ΡΡ Ρ€Π°Π½Π΅Π΅ стандартных массивов ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Ρ‰Π΅ динамичСскиС массивы. Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ массива являСтся фиксированной Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, Π° Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ массив ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ элСмСнты. Если элСмСнт добавляСтся Π² ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½Ρƒ динамичСского массива, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ пСрСраспрСдСлСниС элСмСнтов, находящихся справа ΠΎΡ‚ Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС элСмСнты массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ располоТСны Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ строго ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вставка элСмСнта Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ массив Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов, Ссли элСмСнт добавляСтся Π½Π΅ Π² ΠΊΠΎΠ½Π΅Ρ† массива. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ связного списка Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚рСбуСтся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»ΠΎΠ², нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ списка вставляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт. НСдостаток связных списков — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ (sequential access) ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ для массивов врСмя доступа постоянно ΠΈ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° — random access. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ трСбуСтся быстрый поиск элСмСнта ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ, Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС списки Π½Π΅ ΠΏΠΎΠ΄Ρ…одят, ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ массивами.

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

Листинг 1. Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ связный список.

record node.

{.

node next;

int numElements;

array elements;

}.

Бвязный список — это рСкурсивная структура, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠ·Π΅Π» всСгда содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π». Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ объСдинСниС Π΄Π²ΡƒΡ… списков ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка элСмСнтов Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ. Π£ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½Ρ‹Ρ… списков Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ прСимущСство: Ссли ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, Ρ‚ΠΎ ΡΡ‚Π°Ρ€Ρ‹ΠΉ список Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ доступСн ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅ Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π». Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ называСтся persistent data structure (постоянноС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…). Π£ Π΄Π²ΡƒΡΠ²ΡΠ·Π½Ρ‹Ρ… списков Π΅ΡΡ‚ΡŒ свои прСимущСства, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½Ρ‹Ρ… списков.

Если послСдний элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка, Ρ‚ΠΎ Ρ‚акая структура называСтся цикличСским Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΌ (ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹ΠΌ (circular)) списком. ΠšΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Π΅ списки ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для списка процСссов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… примСняСтся «ΠΊΠ°Ρ€ΡƒΡΠ΅Π»ΡŒΠ½Ρ‹ΠΉ» (round-robin) Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка достаточно ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ†, ΠΈ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠšΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ список ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… списка ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ.

ΠšΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ связный список.

Рисунок 3. ΠšΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ связный список Π‘Π»ΠΎΠΊ-схСма Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘++, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ созданиС ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° экран связных списков.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация язык ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ связный список Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° stdafx.h.

#pragma once.

#include «targetver.h» .

#include.

#include.

#include.

#include.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° code.cpp.

// code. cpp: Defines the entry point for the console application.

//Π’ΠΠ Π˜ΠΠΠ’ 16.

#include «stdafx.h» .

using namespace std;

struct sp {.

int key;

sp* next;

};

struct sp1 {.

sp1* next;

sp* unten;

sp1* links;

};

int _tmain (int argc, _TCHAR* argv[]).

{.

int n, i;

int *mass = new int[] ;

n=1;

i=0;

cout<<" Geben Sie die Informationen ein und klicken Enter" <

while (n≠0).

{.

cin>>n;

mass[i]=n;

i++;

}.

i—;

sp1 *s; //Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка.

sp *p;

sp1 *w;

p=new sp;

p->key=mass[0];

p->next=NULL;

s=new sp1; //Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка.

s->links=NULL;

s->next=NULL;

s->unten=p;

w=s;

int j;sp *q; sp1 *w1;

for (j=1;j.

{

q=new sp;

q->next=NULL;

q->key=mass[j];

w1=new sp1;

p->next=q;

p=p->next;

w1->next=NULL;

w1->unten=p;

w1->links=w;

w->next=w1;

w=w->next;

}

cout<

w=s;

cout<<" Verwenden Sie die Tasten, um nach links, rechts und unten «<

int f=0;

while ((f≠1)&&(w≠NULL)){

getch ();

n=getch ();

switch (n){

case 80:{q=w->unten;f=1;cout<<" unten «;break;}// Π’Π½ΠΈΠ·

case 77:{w=w->next;cout< «;break;} // Π’ΠΏΡ€Π°Π²ΠΎ

case 75:{w=w->links;cout<<" <- «;break;}} // Π’Π»Π΅Π²ΠΎ

}

if (w≠NULL){

while (q≠NULL)

{cout<" «;

getch ();

n=getch ();

switch (n){

case 77:{q=q->next;cout< «;break;} // Π’ΠΏΡ€Π°Π²ΠΎ

}

}}

system («PAUSE»);

return 0;

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

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