Ikkala bog'langan ro'yxatlar va ularni Python 3-da qanday amalga oshirish kerak

Bog'langan ro'yxatlar ma'lumotlarni saqlashning chiziqli usulidir. U ma'lumotlarni o'z ichiga olgan tugunlardan va keyingi ma'lumotlarga qanday o'tish kerakligi to'g'risida ko'rsatmalardan iborat. Zanjirning a'zosi sifatida tugunlar haqida o'ylang. Har bir zanjir bir-biriga bog'liq bo'lib, ular mustahkam rishtalarni saqlab qolishadi. Agar, masalan, o'rtadagi havolada hamma narsa etishmayotgan bo'lsa. Bu endi to'liq zanjir emas! Bu bog'langan ro'yxatlarga qanday tarjima qilinadi? Agar ko'rsatgichlardan biri yo'q bo'lsa yoki noto'g'ri bo'lsa, qolgan ma'lumotlarni o'qib bo'lmaydi.

Yaroqli zanjir emas! Bu bog'langan ro'yxatni buzishi mumkin!

Shu bilan birga, ushbu maqolaning mavzusi bog'langan ro'yxatlarning yanada ko'p qirrali versiyasida - ikki tomonlama bog'langan ro'yxatda. Oddiy (yoki yakka) bog'langan ro'yxat bilan taqqoslaganda, ikki marta bog'langan ro'yxat oldingi deb nomlangan boshqa ko'rsatgichni o'z ichiga oladi. Siz taxmin qilganingizdek, bu tugun oldingi tugun qaerdaligini bilishga imkon beradi. Taqqoslash uchun, bitta bog'langan ro'yxat bitta ro'yxatga qaytish uchun butun ro'yxatni oldingisiga qaytarishi kerak edi.

Yagona bog'langan ro'yxatlar haqida ma'lumot olish uchun sinfdoshimning maqolasiga tashrif buyuring:

Yuqorida aytib o'tilganidek, tugunlar xotiradagi boshqa joylarga ishora qiladi. Bu nimani anglatadi? Qo'shni joylarda saqlanadigan qatorlardan farqli o'laroq, bog'langan ro'yxatlar shunchaki ko'rsatmalarga ega. Quyidagi diagrammada har bir xotira blokida (qizil) unga ishora qiluvchi ikkita ko'rsatkich mavjud. Keyingi ko'rsatgichga (qora) qarab, bu ma'lumotlarga kirishga imkon beradi. Agar u oldingi blokni topmoqchi bo'lsa, avvalgi ko'rsatgichga (oq) qaraydi.

Xo'sh, qanday qilib bir-biriga bog'langan ro'yxatni qanday amalga oshiradi? - Python 3-da shunday

Sizning tugunlar sinfingizga .prev qo'shishingiz kifoya. Endi siz amalga oshirishni boshlashga tayyormiz!

Afzalliklari - Python 3 kodi bilan!

Ikkala bog'langan ro'yxatning bir-biriga bog'langan ro'yxatlardan qanday afzalliklari bor? Xo'sh, bir-biriga bog'langan ro'yxat bilan siz tugunlaringiz orasida oldinga va orqaga harakat qilishingiz mumkin. Bu kiritish kabi ishlarni juda osonlashtiradi. Ikkala bog'langan ro'yxatlar bilan siz bog'langan ro'yxatingizni kerakli tugunga o'tkazib, oldingi tugunni chaqirishingiz mumkin.

Kamchiliklari

Bog'langan ro'yxatlar haqida juda ko'p narsalar mavjud bo'lsa-da, bu hammani oxirigacha hal qilish mumkin emas. Ko'pgina ma'lumotlar tuzilmalari va algoritmlarida bo'lgani kabi, bu sizning arsenalingizda vosita bo'lishi kerak. Birgalikda bog'langan ro'yxatdagi kamchiliklardan yana biri shundaki, ikkala bog'langan ro'yxatdagi har bir havola oldingi ko'rsatgichni kuzatib borishi kerakligi sababli ko'proq xotira sarfi. Bundan tashqari, aytilgan ko'rsatgichlarni kuzatib borish qiyin.

Haqiqatan ham men ularni amalga oshirish amaliyotidaman. Bu mening ushbu maqola yozilishidan keyingi ikkinchi muvaffaqiyatli amalga oshirilishim (2019 yil aprel). Har safar vaqt biroz osonlashadi, lekin men oldingi ko'rsatgich boshqa barcha funktsiyalarim bilan qanday aloqada bo'lganligini chizishim kerak.

Lekin bu nimaga ishlatilgan?

Eshitayotganingizni eshitdim. Avvalgi va keyingisini ko'rgan vaqtingiz haqida o'ylang. Ularni amalga oshirishning aniq va nozik usullari mavjud.

Manba: https://pbs.twimg.com/media/DxzXvUKXgAAvmxx.jpg

Biror holatda musiqa pleyeri kabi nima bo'ladi? Bu keyingi va oldingi juda aniq tugmachaga ega. Ikkala bog'langan ro'yxat ushbu ikki qo'shiq o'rtasida aylanish uchun ishlatilishi mumkin.

Yoki brauzer haqida nima deyish mumkin? Bular shuningdek, siz tashrif buyurgan veb-sahifalar o'rtasida oldinga va orqaga o'tishning aniq usullariga ega.

Endi so'zlarni qayta ishlash dasturi yoki o'zingiz xohlagan foto muharriri haqida o'ylang. Xatoga yo'l qo'yganingizda CTRL (Mac uchun CMD) + Z tugmachasini bosib, oxirgi harakatni bekor qilishingiz mumkin. Shunga o'xshab, CTRL (CMD for Mac) + Y bilan bekor qilgan narsalaringizni qayta tiklashingiz mumkin. Endi nima uchun bu tovush tanish? Ikkala bog'langan ro'yxat bilan ham amalga oshirilishi mumkin! Oldingi ko'rsatgich bajarilgan harakatlarga ishora qiladi, shuningdek, agar siz haddan tashqari ko'p pulni qaytarib qo'ysangiz, harakatlarni qayta tiklay olasiz.

Manba: https://gfycat.com/brilliantbeautifuldassieManba: https://www.solitairecardgames.com/how-to-play-solitaire

Kamroq aniq amalga oshirish, men o'yladim Solitaire o'yinida. Yon tomonda mening nuqtai nazarimni tushuntirishga yordam beradigan Jungle terminologiyalarining tasviri.

O'yin yorqin misoldir, unda siz avvalgi va keyingi kartalarni ko'rish yoki ko'rish imkoniyatiga ega bo'lishingiz kerak. Siz kartani chiqindi qoziqdan to stolgacha o'ynaganingizda, chiqindi qoziq oldingi karta bilan yangilanadi.

Ikkala bog'langan ro'yxatlar bo'yicha foydalanish to'g'risida yanada jonli muhokama qilish uchun men ushbu munozarani stackoverflow-da ko'rib chiqishni tavsiya qilaman:

Keyingi safar bog'langan ro'yxatni amalga oshirayotganda, nima uchun ikki marta bog'langan ro'yxatni sinab ko'rmaysiz? Bu bog'langan ro'yxat tepasida shunchalik ko'p kod emas va juda ko'p foyda bor!

Qo'shimcha manbalar

Mening Python 3 dasturimni amalga oshirishim bilan to'liq bog'lanishni ikkitomonlama bog'langan ro'yxatni mening Github repo-da topishingiz mumkin.

Ikkala bog'langan ro'yxatning uch o'lchamli zanjirini istasangiz, men uni Thingiverse-ga yuklaganman.

https://www.geeksforgeeks.org/doubly-linked-list/

https://www.tutorialspoint.com/data_structures_algorithms/doubly_linked_list_algorithm.htm

https://www.youtube.com/watch?v=JdQeNxWCguQ