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 مراجعه کنید و از اسلایدهای محمد سعید صفایی بهره‌مند شوید.

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

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

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

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

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

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

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

عمق بازگشت به تعداد دفعاتی اطلاق می‌شود که یک تابع بازگشتی خود را فراخوانی می‌کند. هرچه عمق بازگشتی بیشتر باشد، خطر بروز stack overflow بیشتر خواهد بود.

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

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

ماتریس یک نوع آرایه دو بعدی است که برای انجام عملیات‌های ریاضی و جبر خطی به کار می‌رود.

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

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

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

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

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

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

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

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

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

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

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

روش تخصیص و مدیریت آدرس‌های IP که محدودیت‌های سیستم کلاس‌های سنتی را حذف می‌کند.

پهنای باند مشترک که توسط چندین کاربر یا دستگاه به اشتراک گذاشته می‌شود.

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

دستگاهی که برای متصل کردن چندین شبکه محلی LAN به یکدیگر استفاده می‌شود و در لایه داده‌لینک (Layer 2) عمل می‌کند.

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

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

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

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

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

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

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

عبور از آرایه به معنای مراجعه به تمام عناصر آرایه به صورت پشت سر هم است تا بتوان عملیاتی بر روی آن‌ها انجام داد.

یک بیت کوچک‌ترین واحد ذخیره‌سازی داده است که تنها می‌تواند یکی از دو مقدار 0 یا 1 را نگهداری کند.

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

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

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

نوع داده به دسته‌بندی داده‌ها اطلاق می‌شود که می‌تواند مشخص کند یک متغیر چه نوع داده‌ای را می‌تواند ذخیره کند مانند عدد صحیح، اعشاری یا رشته.

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

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