لینک لیست (Linked List) یک ساختار داده است که به وسیلهٔ پیوندها (یا اشارهگرها) اجزا دادهها را به یکدیگر متصل میکند. این ساختار به ازای هر عنصر دادهای (مانند عدد یا رشته) یک گره (Node) ایجاد میکند و هر گره دارای دو بخش اصلی است:
1. **محتویات (Data):** این بخش دادهی واقعی را که میخواهید در لینک لیست ذخیره کنید، نگه میدارد. این محتویات میتواند هر نوع دادهای باشد (عدد، رشته، ساختار، و غیره).
2. **پیوند به گره بعدی (Next Pointer):** این بخش یک اشارهگر به گره بعدی در لینک لیست است. این پیوند نشان میدهد که گره کنونی با کدام گره در ادامه متصل شده است. در آخرین گره از لیست، این پیوند به مقدار تهی (NULL یا nullptr در بعضی زبانها) تنظیم میشود تا نشان دهد که لیست به پایان رسیده است.
این ساختار اجازه میدهد تا دادهها به صورت پیاپی در حافظه ذخیره شوند و از این رو لینک لیست انعطافپذیری بیشتری نسبت به آرایهها دارد. با افزودن یک گره جدید به لینک لیست، میتوانیم به سرعت داده جدید را درج کرده و پیوندها را به درستی تنظیم کنیم.
مزیت اصلی لینک لیست در این است که درج و حذف دادهها در مواقع مختلف بسیار ساده و کارآمد است و نیازی به تغییر اندازه لیست نداریم. به عنوان مثال، در لیست پیوندی میتوانیم به راحتی داده جدیدی را در وسط یا ابتدای لیست درج کنیم بدون نیاز به تغییر حافظهی مخصوصیتها.
همچنین، لینک لیست در برخی موارد به عنوان پایه برای ساختارهای داده پیچیدهتر مانند درختها (مانند درختهای دودویی جستجوی متوازن) استفاده میشود.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
int main() {
// ایجاد سه گره برای لینک لیست
struct Node* firstNode = NULL;
struct Node* secondNode = NULL;
struct Node* thirdNode = NULL;
// تخصیص حافظه برای گرهها
firstNode = (struct Node*)malloc(sizeof(struct Node));
secondNode = (struct Node*)malloc(sizeof(struct Node));
thirdNode = (struct Node*)malloc(sizeof(struct Node));
// تخصیص داده به گرهها و متصل کردن آنها به یکدیگر
firstNode->data = 1;
firstNode->next = secondNode;
secondNode->data = 2;
secondNode->next = thirdNode;
thirdNode->data = 3;
thirdNode->next = NULL;
}
return 0;
}