<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی نظری</title>
        <link>https://virgool.io/feed/@m_80759511</link>
        <description>Computer science student</description>
        <language>fa</language>
        <pubDate>2026-06-19 23:38:31</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>مهدی نظری</title>
            <link>https://virgool.io/@m_80759511</link>
        </image>

                    <item>
                <title>‏انواع لیست پیوندی</title>
                <link>https://virgool.io/@m_80759511/%E2%80%8F%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D9%84%DB%8C%D8%B3%D8%AA-%D9%BE%DB%8C%D9%88%D9%86%D8%AF%DB%8C-ruije1nf1qu1</link>
                <description>‏ لیست ‏‏پیوندی‏‏ یک ساختار داده خطی است، که در آن عناصر در مکان های حافظه به هم مرتبط ذخیره نمی شوند بلکه عناصر در یک لیست پیوندی با استفاده از اشاره گرها به هم ‏‏مرتبط می شوند‏‏. به عبارت ساده، یک لیست پیوندی شامل گره هایی است که هر گره شامل یک فیلد داده و یک مرجع(پیوند) به گره بعدی در لیست است. ‏‏انواع لیست پیوندی‏ ‏لیست پیوندی یک طرفه:‏‏ ساده ترین نوع لیست پیوندی است که در آن هر گره حاوی برخی داده ها و یک اشاره گر به گره بعدی از همان نوع داده است. گره شامل اشاره گر به گره بعدی به این معنی است که گره آدرس گره بعدی را در دنباله ذخیره می کند. یک لیست پیوندی تنها به تراورزال داده ها به یک طریق اجازه می دهد. همانطور که در تصویر زیر مشاهده می کنید:ساختار لیست پیوندی یک طرفه در زبان c:class Node {public:int data	Node* next;};ایجاد و تراورزال لیست پیوندی یک طرفه:#include &lt;bits/stdc++.h&gt;                             using namespace std;class Node {public:	int data;	Node* next;};void printList(Node* n){           while (n != NULL) {		cout &lt;&lt; n-&gt;data &lt;&lt; &amp;quot &amp;quot		n = n-&gt;next;	}}	Node* head = NULL;	Node* second = NULL;	Node* third = NULL;	head = new Node();	second = new Node();	third = new Node();	head-&gt;data = 1;	head-&gt;next = second;	second-&gt;data = 2;	second-&gt;next = third;	third-&gt;data = 3;	third-&gt;next = NULL;	printList(head);	return 0;}‏لیست ‏‏پیوندی دو طرفه:‏‏ لیست پیوندی دو طرفه، نوع پیچیده تری از لیست پیوندی است که شامل اشاره گر به گره بعدی و همچنین گره قبلی در دنباله است، بنابراین شامل سه بخش داده، اشاره گر به گره بعدی، و اشاره گر به گره قبلی است. این ما را قادر به عبور از لیست در جهت عقب نیز می سازد. همانطور که در تصویر زیر مشاهده می کنید:‏ساختار لیست پیوندی دوطرفه در زبان c:struct Node {	int data;	struct Node* next;	struct Node* prev;};ایجاد و تراورزال لیست پیوندی دو طرفه در زبان c: #include &lt;bits/stdc++.h&gt;using namespace std;class Node {public:	int data;	Node* next;	Node* prev;};void push(Node** head_ref, int new_data){	Node* new_node = new Node();	new_node-&gt;data = new_data;	new_node-&gt;next = (*head_ref);	new_node-&gt;prev = NULL;	if ((*head_ref) != NULL)		(*head_ref)-&gt;prev = new_node;	(*head_ref) = new_node;}void printList(Node* node){	Node* last;	cout &lt;&lt; &amp;quot\nTraversal in forward&amp;quot		&lt;&lt; &amp;quot direction \n&amp;quot	while (node != NULL) {		cout &lt;&lt; &amp;quot &amp;quot &lt;&lt; node-&gt;data &lt;&lt; &amp;quot &amp;quot		last = node;		node = node-&gt;next;	}	cout &lt;&lt; &amp;quot\nTraversal in reverse&amp;quot		&lt;&lt; &amp;quot direction \n&amp;quot	while (last != NULL) {		cout &lt;&lt; &amp;quot &amp;quot &lt;&lt; last-&gt;data &lt;&lt; &amp;quot &amp;quot		last = last-&gt;prev;	}}int main(){	Node* head = NULL;	push(&amp;head, 6);	push(&amp;head, 7);	push(&amp;head, 1);	cout &lt;&lt; &amp;quotCreated DLL is: &amp;quot	printList(head);return 0;} ‏‏لیست پیوندی حلقوی(دایره ایی):‏‏ در لیست پیوندی حلقوی، گره آخر شامل اشاره گر به گره اول لیست است، در حالی که در تراورزال یک لیست پیوندی ، ما می توانیم در هر گره ای آغاز و با عبور از لیست در هر جهتی، رو به جلو و یا رو به عقب و تا زمانی که رسیدن به همان گره  شروع شده باشد. بدین ترتیب یک لیست پیوندی حلقوی هیچ آغاز و پایانی ندارد. همانطور که در تصویر زیر مشاهده می کنید:ساختار لیست پیوندی حلقوی در زبان C:class Node {public:	int data;	Node* next;};ایجاد و تراورزال لیست پیوندی حلقوی در زبان c:#include &lt;bits/stdc++.h&gt;using namespace std;class Node {public:	int data;	Node* next;};void push(Node** head_ref, int data){	Node* ptr1 = new Node();	Node* temp = *head_ref;	ptr1-&gt;data = data;	ptr1-&gt;next = *head_ref;	if (*head_ref != NULL) {		while (temp-&gt;next != *head_ref) {			temp = temp-&gt;next;		}		temp-&gt;next = ptr1;	}	else		ptr1-&gt;next = ptr1;         *head_ref = ptr1;}void printList(Node* head){	Node* temp = head;	if (head != NULL) {		do {			cout &lt;&lt; temp-&gt;data &lt;&lt; &amp;quot &amp;quot			temp = temp-&gt;next;		} while (temp != head);	}}// Driver Codeint main(){	Node* head = NULL;	push(&amp;head, 12);	push(&amp;head, 56);	push(&amp;head, 2);	push(&amp;head, 11);       cout &lt;&lt; &amp;quotContents of Circular&amp;quot	&lt;&lt; &amp;quot Linked List\n &amp;quot	printList(head);return 0;}گرداورندگان:علی قاسمی حسین قربانیسروش زندیمهدی نظری ابوالفضل ولی الهی یاشار مرتاضبا تشکر از استاد دکتر مریم حاجی اسمعیلی دکترای علوم کامپیوتر از دانشگاه کینگستون لندنDr. Maryam Hajiesmaeili phD of computer science from Kingstone university of London https://ir.linkedin.com/in/dr-maryam-hajiesmaeili-90930743 منابع: https://www.tutorialspoint.com/data_structures_algorithms/linked_list_program_in_c.htm        </description>
                <category>مهدی نظری</category>
                <author>مهدی نظری</author>
                <pubDate>Mon, 20 Jun 2022 19:49:48 +0430</pubDate>
            </item>
            </channel>
</rss>