Saeid Safaei Loader Logo Saeid Safaei Loader Animated
لطفا شکیبا باشید
0

سعیدصفایی سعیدصفایی

سعید صفایی
آشنایی با مفهوم Doubly Linked List

Doubly Linked List

لیست پیوندی دو طرفه نوعی از لیست پیوندی است که هر عنصر به دو عنصر قبلی و بعدی خود اشاره دارد.

Saeid Safaei Doubly Linked List

لیست پیوندی دو طرفه (Doubly Linked List) یکی از انواع ساختارهای داده‌ای است که در آن هر گره (Node) نه تنها به گره بعدی خود اشاره می‌کند، بلکه به گره قبلی نیز اشاره دارد. این ویژگی به برنامه‌نویسان این امکان را می‌دهد که بتوانند به راحتی به هر دو طرف لیست (یعنی به گره قبلی و بعدی) دسترسی پیدا کنند، که این امر عملکردهای خاصی مانند حذف گره‌ها یا پیمایش در لیست به جلو و عقب را تسهیل می‌کند.

ساختار لیست پیوندی دو طرفه

در لیست پیوندی دو طرفه، هر گره دارای دو بخش است:

  • داده: بخشی که داده مورد نظر ذخیره می‌شود (این داده می‌تواند یک عدد، رشته یا هر نوع داده‌ای باشد).
  • اشاره‌گرها: هر گره دارای دو اشاره‌گر است:
    • اشاره‌گر به گره بعدی: این اشاره‌گر به گره بعدی در لیست پیوندی اشاره می‌کند.
    • اشاره‌گر به گره قبلی: این اشاره‌گر به گره قبلی در لیست پیوندی اشاره می‌کند.

به این ترتیب، برخلاف لیست پیوندی تک‌طرفه که فقط به گره بعدی اشاره دارد، لیست پیوندی دو طرفه این امکان را می‌دهد که به راحتی از هر دو طرف لیست داده‌ها را دسترسی پیدا کرد.

مثال پیاده‌سازی لیست پیوندی دو طرفه در Python

در اینجا یک مثال ساده از نحوه پیاده‌سازی لیست پیوندی دو طرفه در زبان Python آورده شده است. در این پیاده‌سازی، هر گره دارای دو اشاره‌گر به گره قبلی و گره بعدی است:

 class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None class DoublyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:

self.head = new_node
else:

temp = self.head

while temp.next:


temp = temp.next

temp.next = new_node

new_node.prev = temp # اتصال به گره قبلی
def display(self):
temp = self.head
while temp:

print(temp.data, end=" <-> ")

temp = temp.next
print("None")
def display_reverse(self):
temp = self.head
if not temp:

return
while temp.next:

temp = temp.next # رسیدن به آخرین گره
while temp:

print(temp.data, end=" <-> ")

temp = temp.prev
print("None") # استفاده از لیست پیوندی دو طرفه dll = DoublyLinkedList() dll.append(10) dll.append(20) dll.append(30) dll.display()
# نمایش لیست از جلو به عقب: 10 <-> 20 <-> 30 <-> None dll.display_reverse() # نمایش لیست از عقب به جلو: 30 <-> 20 <-> 10 <-> None

در این مثال، ابتدا گره‌ها به لیست پیوندی دو طرفه اضافه می‌شوند و سپس با استفاده از دو متد display() و display_reverse() لیست از جلو و عقب نمایش داده می‌شود. در هنگام افزودن هر گره جدید، اشاره‌گر گره قبلی به‌روز می‌شود تا پیوند دو طرفه حفظ شود.

مزایای لیست پیوندی دو طرفه

  • دسترسی دو طرفه: به راحتی می‌توان به هر دو طرف لیست دسترسی داشت، چه به جلو و چه به عقب. این ویژگی برای انجام عملیات‌هایی مانند حذف یا جستجوی سریع در لیست مفید است.
  • دستگاه‌های متقابل: امکان پیمایش از ابتدا به انتها و بالعکس در لیست فراهم می‌شود.
  • عملیات‌های سریعتر: حذف گره از هر نقطه در لیست به سادگی امکان‌پذیر است زیرا به گره قبلی دسترسی داریم.

معایب لیست پیوندی دو طرفه

  • مصرف حافظه بیشتر: لیست پیوندی دو طرفه نسبت به لیست پیوندی تک‌طرفه حافظه بیشتری مصرف می‌کند زیرا هر گره نیاز به دو اشاره‌گر دارد (یک اشاره‌گر به گره بعدی و دیگری به گره قبلی).
  • پیچیدگی در پیاده‌سازی: پیاده‌سازی لیست پیوندی دو طرفه پیچیده‌تر از پیاده‌سازی لیست پیوندی تک‌طرفه است و نیاز به مدیریت دقیق اشاره‌گرها دارد.

کاربردهای لیست پیوندی دو طرفه

لیست پیوندی دو طرفه در بسیاری از زمینه‌ها کاربرد دارد، از جمله:

  • پیاده‌سازی صف‌های دو طرفه (Deque) که نیاز به افزودن یا حذف داده‌ها از هر دو طرف دارند.
  • پیاده‌سازی ساختارهای داده‌ای پیچیده مانند گراف‌ها یا درخت‌ها که نیاز به دسترسی به گره‌های قبلی و بعدی دارند.
  • در سیستم‌هایی که نیاز به انجام عملیات‌هایی مانند پیمایش یا جستجو در دو جهت مختلف دارند.

در نهایت، لیست پیوندی دو طرفه یک ساختار داده‌ای مفید و کاربردی است که می‌تواند در برنامه‌هایی که نیاز به دسترسی به هر دو طرف داده‌ها دارند، مورد استفاده قرار گیرد. برای آشنایی بیشتر با مفاهیم لیست پیوندی دو طرفه و دیگر ساختارهای داده‌ای، می‌توانید به سایت saeidsafaei.ir مراجعه کنید و از اسلایدهای محمد سعید صفایی بهره‌مند شوید.

اسلاید آموزشی

آرایه ها و تمرینات مکمل فلوچارت

آرایه ها و تمرینات مکمل فلوچارت
مبانی کامپیوتر و برنامه سازی

در این مبحث، به شناخت، انواع و طرز استفاده از آرایه‌ها پرداخته می‌شود و چندین مثال عملی با استفاده از فلوچارت و آرایه‌ها رسم خواهیم کرد. همچنین، با توجه به اهمیت فلوچارت در طراحی الگوریتم‌ها، در بخش دوم اسلایدها، چندین تمرین مهم با رسم فلوچارت در اختیار شما قرار خواهد گرفت تا مهارت‌های عملی شما در این زمینه تقویت شود.

مقالات آموزشی برای آشنایی با اصطلاحات دنیای کامپیوتر

رمزنگاری دیجیتال به استفاده از الگوریتم‌ها برای امن‌سازی داده‌ها و جلوگیری از دسترسی غیرمجاز اطلاق می‌شود.

محاسبات ژنومی به استفاده از تکنیک‌های محاسباتی برای تجزیه و تحلیل داده‌های ژنتیکی و ژنومیک اطلاق می‌شود.

مقداری ثابت که به عنوان مرجع برای محاسبه هزینه لینک در پروتکل‌های OSPF استفاده می‌شود.

لایه‌ای که به‌طور مستقیم با برنامه‌های کاربردی کار می‌کند و خدمات شبکه‌ای برای آن‌ها فراهم می‌کند.

توزیع کلید کوانتومی (QKD) به استفاده از اصول فیزیک کوانتومی برای تولید و توزیع کلیدهای رمزنگاری به‌صورت ایمن اشاره دارد.

ابعاد آرایه به تعداد محورهایی گفته می‌شود که داده‌ها در آن‌ها سازمان‌دهی شده‌اند. آرایه‌ها می‌توانند یک‌بعدی، دوبعدی، یا چندبعدی باشند.

نوعی حافظه سریع است که برای ذخیره‌سازی موقت داده‌ها و دستورالعمل‌هایی که به طور مکرر مورد استفاده قرار می‌گیرند، استفاده می‌شود.

واحد محاسباتی و منطقی است که مسئول انجام محاسبات ریاضی و منطقی در پردازنده می‌باشد.

الگوریتم مرتب‌سازی حبابی ساده‌ترین الگوریتم مرتب‌سازی است که عناصر مجاور را مقایسه کرده و در صورت لزوم جابه‌جا می‌کند.

معامله‌گری الگوریتمی به استفاده از الگوریتم‌ها برای انجام معاملات مالی با استفاده از داده‌های تاریخی و پیش‌بینی روندها اطلاق می‌شود.

یک گیگابایت معادل ۱۰^۹ بایت یا 1,073,741,824 بایت است و معمولاً برای اندازه‌گیری ظرفیت ذخیره‌سازی استفاده می‌شود.

یادگیری ماشین کوانتومی به استفاده از اصول کوانتومی در الگوریتم‌های یادگیری ماشین برای بهبود عملکرد پردازش داده‌ها اطلاق می‌شود.

حافظه اولیه، که معمولاً شامل RAM و حافظه کش است، برای ذخیره‌سازی داده‌های در حال پردازش استفاده می‌شود.

کابلی که شامل چندین سیم مسی عایق‌دار است و به صورت جفت به هم تابیده شده‌اند تا نویز الکتریکی کاهش یابد.

تبدیل عدد از مبنای هشت به مبنای ده که شامل محاسبه وزن هر رقم و جمع آن‌ها است.

واقعیت مجازی (VR) تجربه‌ای است که در آن کاربر به طور کامل در یک محیط دیجیتال غوطه‌ور می‌شود.

پروتکلی که هر روتر اطلاعات دقیق درباره توپولوژی شبکه را جمع‌آوری کرده و بر اساس آن مسیرهای بهینه را محاسبه می‌کند.

کابلی که از دو سیم مسی تشکیل شده و در شبکه‌ها برای انتقال داده استفاده می‌شود.

رشته باریک و شفاف از شیشه یا پلاستیک که قادر است اطلاعات را از طریق نور با سرعت بالا منتقل کند.

روش تقسیم‌بندی ثابت زیربخش‌های شبکه که در آن تمامی زیربخش‌ها از اندازه یکسان برخوردارند.

دروازه‌های منطقی دستگاه‌های الکترونیکی هستند که از آن‌ها برای انجام عملیات منطقی مانند AND, OR, NOT استفاده می‌شود.

سوییچ‌هایی که در لایه 2 مدل OSI کار می‌کنند و برای هدایت بسته‌ها از آدرس‌های MAC استفاده می‌کنند.

شیوه‌ای برای سازمان‌دهی و ذخیره‌سازی داده‌ها به گونه‌ای که دسترسی به آن‌ها سریع‌تر و مؤثرتر باشد. انواع مختلفی از ساختار داده مانند آرایه‌ها، لیست‌های پیوندی و درخت‌ها وجود دارد که هر یک برای مسائل خاصی مناسب هستند.

بهینه‌سازی یادگیری عمیق به تکنیک‌هایی اطلاق می‌شود که برای بهبود عملکرد مدل‌های یادگیری عمیق به کار می‌روند.

محاسبات الهام گرفته از مغز انسان به استفاده از اصول و فرآیندهای مغز برای طراحی سیستم‌های محاسباتی جدید اطلاق می‌شود.

اضافه‌بارگذاری تابع به معنای تعریف چندین تابع با نام یکسان اما با پارامترهای مختلف است. این ویژگی به توابع این امکان را می‌دهد که با انواع مختلف ورودی کار کنند.

رسانه‌های فیزیکی از جمله کابل‌ها و فیبر نوری که ارتباطات داده‌ای را در شبکه‌های کامپیوتری انتقال می‌دهند.

آدرس IP روتری که دستگاه‌ها برای ارسال داده‌ها به خارج از شبکه محلی خود از آن استفاده می‌کنند.

سیستم‌های خودمختار به سیستم‌هایی اطلاق می‌شود که قادر به انجام وظایف پیچیده به‌طور خودکار و بدون نیاز به نظارت انسان هستند.

نوعی VLAN که به دستگاه‌ها اجازه می‌دهد در یک VLAN مشترک باشند اما نتوانند به یکدیگر دسترسی داشته باشند.

روش دسترسی به رسانه که در آن زمان‌بندی برای تقسیم دسترسی به رسانه بین دستگاه‌ها استفاده می‌شود، هر دستگاه یک بازه زمانی برای ارسال داده دارد.

لایه‌ای که ارتباطات بین دستگاه‌ها را مدیریت می‌کند و تضمین می‌کند که داده‌ها به درستی به مقصد برسند.

علم اعصاب شناختی به مطالعه نحوه عملکرد مغز و سیستم‌های عصبی در پردازش اطلاعات و تصمیم‌گیری اطلاق می‌شود.

عدد به مجموعه‌ای از ارقام گفته می‌شود که با توجه به موقعیت آن‌ها در سیستم عددی، مقدار مشخصی دارند.

روشی برای هدایت بسته‌ها در شبکه‌های IP که از برچسب‌های خاص برای مسیریابی استفاده می‌کند.

بکشید مشاهده بستن پخش
Saeid Safaei Scroll Top
0%