
آموزش لیست پیوندی با حل مثال و پیاده سازی
لیست پیوندی چیست؟ لیست پیوندی یک نوع ساختمان داده است که یک خاصیت خیلی مهم و مفید داره اونم خاصیت پویا یا Dynamic است که به ما اجازه نوشتن برنامه های دینامیک را می دهد. در این پست با آموزش لیست پیوندی یا همان لینک لیست (linked list) در خدمت شماییم.
آپدیت : برای کسب اطلاعات بیشتر بعد از مطالعه ی این پست به این پست ما سر بزنید : لیست پیوندی دو طرفه – doubly linked list
فهرست مطالب
لیست پیوندی چیست؟
حالا برویم سراغ ایجاد لیست پیوندی و ببینیم اصلا چی هست. ما خیلی از جاها در برنامه خود از آرایه استفاده کرده ایم اگه توجه کرده باشید می بینید که اول برنامه طول آرایه را اعلام می کنید و تا آخر برنامه طول آن آرایه همان است ممکن است شما خانه های بیشتری بخواهید یا خانه در آرایه اضافه آورده باشید یا حتی بخواهید یک خانه را حذف کنید یا شاید هم یک خانه اضافه کنید ، در این جا است که آرایه جواب گوی شما نیست این موقع است که اژدها (linked list) وارد می شود و به کمک تان می آید! 🙂
اجزای تشکیل دهنده لیست پیوندی
لینک لیست همانند آرایه از بخش های کوچک تری تشکیل شده که گره (Node) نام دارد که دارای دو بخش کلی است بخش اول بخش خصوصیات لینک لیست است مانند شماره دانشجویی، اسم دانش آموز، معدل و … که از نوع هایی مانند int و float و string (رشته) و غیره است و بخش دوم آدرس است که بخش اصلی لینک لیست است بخش آدرس قسمتی است که آدرس یک گره دیگر یا هیچ (NULL) درون آن است.
با بخش دوم است که لینک لیست معنا پیدا می کند فرض کنید شما یک گره دارید و یک گره دیگر می خواهید،برای این کار یک گره ایجاد می کنیم و آدرس آن را در گره اولیه می گذاریم حالا گره جدید به گره اولیه وصل است .در واقع بخش آدرس در لینک لیست امکان می دهد که گره اضافه کنیم یا حذف کنیم یا لیست را پیمایش کنیم و … .
انواع لینک لیست
۱-لینک لیست یک پیوندی: این نوع لینک لیست فقط دارای یک جایگاه برای آدرس است و هر گره آدرس خانه بعدی یا خانه پوچ را نگه می دارد:
این ضربدره هم که می بینید همان خانه پوچ است.
۲-لینک لیست دو پیوندی:این نوع لینک لیست دارای دو خانه حاوی آئرس است یکی به خانه بعد یکی به خانه قبل:
۳-لیست پیوندی حلقوی:لیست پیوندی حلقوی مانند لیست پیوندی یک پیوندی است با این تفاوت که خانه آخر به خانه اول اشاره می کند:
ما در این پست لیست پیوندی یک پیوندی را بررسی می کنیم و در روزهای آینده به سایر نوع ها می پردازیم.
ایجاد لیست پیوندی (linked list) در C++
در سی سی پلاس پلاس با دو روش می شود لینک لیست ایجاد کرد یکی با کلاس (class) یکی با ساختمان (struct) که تفاوت کمی دارند که ما لینک لیستمان را با کلاس درست می کنیم که بهتر است و اگر آن را بلد باشید با struct هم می توانید .
خوب ما برای لینک لیست احتیاج به گره داریم ما یک کلاس به اسم node یا هر اسم دیگر ایجاد می کنیم که دارای دو بخش است یکی بخش آدرس که در ایجا اسمش را next گداشتیم و برای این که بتواند به یک گره node اشاره کند باید اشاره گری از همان کلاس node باشد.بخش دیگر هم اطلاعات لیست است که می تواند شامل تعداد متعددی از انواع مختلفی باشد ولی چون این یک مثال آموزشی است ما فقط یک ویژگی به اسم Data با نوع int در نظر می گیریم.
1 2 3 4 5 6 | //node class class node{ int Data; node *next; friend class linkedlist; }; |
خوب خود لیست پیوندی هم احتیاج به یک کلاس دارد ، ما کلاسی با اسم دلخواه linkedlist برای آن ایجاد می کنیم.همین طور می بینید این کلاس احتیاج دارد که به اعضای کلاس node دسترسی داشته باشد و از آن جایی که کلاس node اعضایش Private تعریف شده است ما کلاس linkedlist را دوست node تعریف می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 | //linked list class class linkedlist{ public: linkedlist(){first=NULL;} void addelement();//add node to list void deleteelement(int);//delet node by value of data void showlist();//print all node in list void search_data(int);//search the linked list by value of data private: node *first;//stor first node of link node *last;//stor last node of link }; |
خوب ما پایه اصلی لیست پیوندی آماده کردیم باید حالا بریم سراغ تک تک توابع عضو و خاصیت های کلاس linkedlist .
ما برای داشتن لیست پیوندی به دو ویژگی نیاز داریم یکی ته لیست که ما اسمش را last گذاشتیم و دیگری سر لیست که اسمش را first گداشتیم که هر دو اشاره گری از نوع node اند.
تابع سازنده
تابع اول تابع سازنده خود کلاس لینک لیست است با اسم linkedlist() که همین طور می بینید وظیفه اش این است که خاصیت first لیست را وقتی که ایجاد می شود را null یا پوچ قرار می دهد.
1 | linkedlist(){first=NULL;} |
اضافه کردن عضو جدید به لیست پیوندی
تابع بعدی تابع addelement است و دو وظیفه دارد:
۱-اگر لیست پیوندی ایجاد نشده بود آن را با اضافه کردن مشخصات first , last به یک گره ایجاد می کند
۲-اگر هم لیست موجود بود یک گره به انتهای آن اضافه می کند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //add node to list and fill node void linkedlist::addelement() { int data1; if(first==NULL) { //create first node cout<<"Enter Data:"; cin>>data1; node *temp=new node; temp->next=NULL; first=temp; first->Data=data1; last=first; } else { //create other node cout<<"Enter Data:"; cin>>data1; node *temp=new node; temp->next=NULL; last->next=temp; last=temp; last->Data=data1; } } |
حذف عضو از لیست پیوندی
تابع deleteelement تابع حذف گره از لیست پیوندی است که بر اساس مقداری که دریافت می کند در گره های لیست جست وجو می کند تا به گره ای برسد که خاصیت data آن مقداری برابر آن چیزی که دریافت کرده است باشد آنگاه آن گره را حذف می کند البته بستگی دارد گره کجا باشد زیرا الگوریتم حذف آن متفاوت است اگر گره اولین گره باشد یک جور حذف می شود اگر گره آخر باشد جور دیگر اگر سایر گره ها باشد مدلی دیگر .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | //delete node void linkedlist::deleteelement(int data1) { node* temp; node* temp1; temp1=temp=first; int not_exit_in_list=0; if(first->Data==data1) { temp=first; first=first->next; delete temp; } else { while(temp!=last) { temp=temp1->next; if(temp->Data==data1) { if(temp==last) { temp1->next=NULL; delete temp; last=temp1; not_exit_in_list=1; break; } else { temp1->next=temp->next; delete temp; not_exit_in_list=1; break; } } temp1=temp1->next; } if(not_exit_in_list==0) { cout<<"There is not node with Data= "<<data1<<" in linked list."<<endl; } } } |
نمایش عناصر موجود در لیست
تابع showlist تابعی که از اول لیست شروع می کنه تا آخر لیست تمام گره ها را چاپ می کند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //show node of linked list void linkedlist::showlist() { if(first==NULL) { cout<<"list empty"<<endl; } else { node *temp; temp=first; while(temp!=NULL) { cout<<temp->Data<<endl; temp=temp->next; } } } |
کد پیاده سازی شده لیست پیوندی
اینم از یک کد کلی که ایجاد یک لینک لیست در سی پلاس پلاس را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | //open-mind.ir #include <iostream> #include <string> using namespace std; //node class class node{ int Data; node *next; friend class linkedlist; }; //linked list class class linkedlist{ public: linkedlist(){first=NULL;} void addelement();//add node to list void deleteelement(int);//delet node by value of data void showlist();//print all node in list void search_data(int);//search the linked list by value of data private: node *first;//stor first node of link node *last;//stor last node of link }; //add node to list and fill node void linkedlist::addelement() { int data1; if(first==NULL) { //create first node cout<<"Enter Data:"; cin>>data1; node *temp=new node; temp->next=NULL; first=temp; first->Data=data1; last=first; } else { //create other node cout<<"Enter Data:"; cin>>data1; node *temp=new node; temp->next=NULL; last->next=temp; last=temp; last->Data=data1; } } //delete node void linkedlist::deleteelement(int data1) { node* temp; node* temp1; temp1=temp=first; int not_exit_in_list=0; if(first->Data==data1) { temp=first; first=first->next; delete temp; } else { while(temp!=last) { temp=temp1->next; if(temp->Data==data1) { if(temp==last) { temp1->next=NULL; delete temp; last=temp1; not_exit_in_list=1; break; } else { temp1->next=temp->next; delete temp; not_exit_in_list=1; break; } } temp1=temp1->next; } if(not_exit_in_list==0) { cout<<"There is not node with Data= "<<data1<<" in linked list."<<endl; } } } //show node of linked list void linkedlist::showlist() { if(first==NULL) { cout<<"list empty"<<endl; } else { node *temp; temp=first; while(temp!=NULL) { cout<<temp->Data<<endl; temp=temp->next; } } } int main() { int x; int i; linkedlist a;//for example: create list. cout<<"Enter number of node:"; cin>>x; for(i=0;i<x;i++) { a.addelement();//for example: add one node to list. } cout<<endl<<"show list:"<<endl; a.showlist();//for example: show list. cout<<endl; cout<<"Enter a int number want to delet from list:"; cin>>x; a.deleteelement(x);//for example delete node with data=12 of list. cout<<endl; cout<<endl<<"show New list:"<<endl; a.showlist();//for example: show list. //open-mind.ir //farhad-dalirani return 0; } |
جستجو در لیست پیوندی
تابع جست و جو هم تقریبا مانند تابع حذف گره از لیست است .اگر مشکلی بود در نظرات بیان کنید تا در موردش بحث کنیم.
البته لیست پیوندی کمی مشکل است در اینجا فرشته نجاتی بنام وکتور نازل می شود که در این پست معرفی شده است (کلیک کنید) و سختی ها لینک لیست را برایمان حل می کند.
پیاده سازی لیست پیوندی در زبان جاوا
همچنین یک پیاده سازی در زبان جاوا در کد زیر ارائه شده است که امیدواریم مفید باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | public class LinkListImplementation { public static void main(String[] args) throws java.lang.Exception { LinkedListT a = new LinkedListT(); a.addAtBegin(5); a.addAtBegin(15); a.addAtEnd(20); a.addAtEnd(21); a.deleteAtBegin(); a.deleteAtEnd(); a.addAtIndex(10, 2); a.addAtEnd(15); a.display(); System.out.println("n Size of the list is: " + a.size); System.out.println(" Element at 2nd position : " + a.elementAt(2)); System.out.println(" Searching element 20, location : " + a.search(15)); } } class Node { public int data; public Node next; public Node(int data) { this.data = data; this.next = null; } } class LinkedListT { public Node head; public int size; public LinkedListT() { head = null; } public void addAtBegin(int data) { Node n = new Node(data); n.next = head; head = n; size++; } public int deleteAtBegin() { int tmp = head.data; head = head.next; size--; return tmp; } public void deleteAtEnd() { Node currNode = head; if (head.next == null) { head = null; } else { while (currNode.next.next != null) { currNode = currNode.next; } int temp = currNode.next.data; currNode.next = null; size--; } } public void addAtEnd(int data) { if (head == null) { addAtBegin(data); } else { Node n = new Node(data); Node currNode = head; while (currNode.next != null) { currNode = currNode.next; } currNode.next = n; size++; } } public int elementAt(int index){ if(index>size){ return -1; } Node n = head; while(index-1!=0){ n=n.next; index--; } return n.data; } public int getSize(){ return size; } public int search(int data){ Node n = head; int count = 1; while(n!=null){ if(n.data==data){ return count; }else{ n = n.next; count++; } } return -1; } public void addAtIndex(int data, int position){ if(position == 1){ addAtBegin(data); } int len = size; if (position>len+1 || position <1){ System.out.println("nINVALID POSITION"); } if(position==len+1){ addAtEnd(data); } if(position<=len && position >1){ Node n = new Node(data); Node currNode = head; //so index is already 1 while((position-2)>0){ System.out.println(currNode.data); currNode=currNode.next; position--; } n.next = currNode.next; currNode.next = n; size++; } } public void display() { System.out.println(""); Node currNode = head; while (currNode != null) { System.out.print("->" + currNode.data); currNode = currNode.next; } } } |
مطالعه بیشتر درباره لیست پیوندی
می توانید مطالب زیر را برای یادگیری بیشتر از لیست های پیوندی مطالعه کنید.
- لیست پیوندی دو طرفه با ++C
- معکوس کردن لیست پیوندی دو طرفه
- لیست پیوندی در پایتون – Linked List in Python
- ادغام لیست های پیوندی مرتب با صف اولویت دار
لطفاً نظرات خود را با ما به اشتراک بگذارید.
سلام. ضمن تشکر از مطلبی که قرار دادید – که برای من باعث رفع خیلی ابهام ها شد – چندتا سوال برام پیش اومد:
مثلا یکی اینکه چرا در تابعی که برای حذف یک node به کار میره؛ اگر فهمیدیم first همون چیزی هست که باید حدف بشه؛ چه لزومی داره که اول temp رو با first برابر کنیم و بعد temp رو حدف کنیم؛ چرا از همون اول خود first رو از حذف لیست حذف نکنیم؟؟
سلام
اگر مستقیماً و از اول first رو حذف می کردیم، اشاره گر اول لیست حذف می شد و ما دسترسی به لیست که داخل حافظه ست رو از دست می دادیم.
سلام ممنون ازتون
فقط کاش جست و جو رو هم میذاشتین و بهش اضافه میکردین
خیلی خیلی ممنونم یکی از بزرگترین مشکلات منو توی لیست پیوندی حل کردید .اگه پشته وصف و بقیه رو هم همینجوری توضیح بدید عالیه بازم ممنونم .
ممکن است چند کاربرد linked list در برنامه نویسی را ذکر کنید؟ کاربردی که توسط array انجام پذیر نباشد.
کاربرد که زیاد هست . ولی فرض کن شما یک لیست طولانی از داده ها می خواهی که یک سری داده رو ذخیره کنی. آرایه در حافظه به صورت خانه های پشت سر هم ذخیره می شه . که اگر اون لیستتون تعداد المنت های توش زیاد باشه سخت می شه توی حافظه جایی برای آرایه با طول زیاد پیدا کرد. ولی لینک لیست اینطوری نیست . هر قسمت لینک لیست می تونه جای مختلفی از حافظه باشه. همین طور در آرایه المنتی رو نمی تونیم حذف کنیم . برای حذف یک المنت باید یک ارایه جدید بسازیم و همه ی داده های قبلی رو بجز اون المنتی رو که می خوایم رو حذف کنیم.
لینک لیست یک داده ساختار ساده است که با آن ساختمان داده های مختلف و پیچیده ای می توان ساخت. در جاهایی که حذف المنت زیاد انجام می شود لیست پیوندی از گزینه های خوب است.
سلام عرض شد
من ی مشکلی دارم تو این کدتون !! ب نظر من اگ از last استفاده نکنیم هک تابع کار میکنه . من اینو ی جور دیگ نوشتم !! احساس میکنم این پیوندی ک باید بین نودها باشه تو کد من بهتر نمایش داده میشه !! تابع AddNode:
سلام میتونم بپرسم باچه زبانی کد زدی وبرای نوشتن لینک لیست یه طرفه چندتا کلاس نیازهست درست کنیم
merc kheyli aalie
واقعا ممنونم
سلام
اگر بخواهیم به جای یک متغییر مل data چند متغییر تعربف کرده و مقدار دهی کنیم باید چیکار کنیم؟
ممنون
منظورتون رو نفهمیدم بیشتر توضیح دهید
سلام
سایت خیلی خوبی دارین
واقعا مفید و مختصره
من نمیدونم چرا هیچ جا هیچی به زبان جاوا نیست چرا همش سی و سی پلاس پلاس??
چون معمولا تو مدارس و دانشگاه ها تو ایران سی پلاس درس می دهند
سلام خیلی سایت خوبی دارین ممنون
ممنون واقعا
من تازه فهمیدم لیست پیوندی چی هست!
سپاس.
استفاده کردم.
خیلی عالی بود
سلام، خیلی عالی بود
فقط نمیشه فرند کلاس نباشه؟
بعد اگه بخوایم دوتا عدد بزرگ رو باهم جمع کنیم بااستفاده از لیست پیوندی یکطرفه چجوری میشه؟
میشه کدشو بگید لطفا؟
واقعا ممنون…
سلام ، می شه فرند نباشه . برای این کار برای اجزای private کلاس تابع get , set تعریف می کنیم که متغییر های private کلاس رو ست کنه یا برگردونه ، این طوری لازم نیست اون یکی کلاس برای دسترسی به اجزای پرایوت کلاس دیگر فرند تعریف شود ،
عالییییی بود مرسی…
سلام خوبین؟
تروخدا جواب من بدید من به شدت به کمکتون نیاز دارم….
سلام چرا جواب منا نمیدید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
ایمیل خود را چک کنید
سلام وخسته نباشید خدمته مهندس دلیرانیه عزیز , دوسته عزیز میشه الگوریتم جستجو در لینک لیست رو برام بذاری-خداییش هر چی امتحان کردم جواب قابل قبولی نمیده(یجور جستجو با اسم دانشجو که بعد از جستجو- شماره دانشجویی و سه نمره درسش رو نشون بده)از وبسایت جالبی که راه انداختی صمیمانه تشکر میکنم(سال نو بر همه مهندسین ایران مبااااااااااارک)
جست و جو در خود کد بالا هست – برای جست و جو باید از نود اول شروع کنی حرکت کنی تا نو آخر و هر بار چک کنی.
سلام استاد!
واقعا ممنونم.بعد ۱۵ -۲۰ روز گشتن و خوندن وبسایتای متفاوت و کتاب و جزوه،امشب بالاخره لیست پیوندی رو فهمیدم.
خیلی ساده و کامل توضیح داده بودی خدا خیرت بده!
خداقوت عزیز!
تشکر ، خوشحالم توانستیم کمک کنیم.
میشه برا ی جابجا کردن گره ها جهت مرتب سازی کل لیست پیوندی بهم کمک کنید؟
از کدام الگوریتم برای مرتب سازی می خواهید استفاده کنید ؟
پست آپدیت شد به بند اول پست توجه نمایید.
بسیار عالی ، خیلی خیلی ممنون از توضیح کاملتون
باسلام و عرض ادب.
من یک پروژه برنامه نویسی دارم ولی متاسفانه نمیتونم بنویسمش. تو این کار زیاد وارد نیستم. فقط کارهای جزیی بلدم. میشه خواهش کنم کمکم کنید که بنویسمش. اگه ب ایمیل خودم بفرستیتش که بسیار سپاسگذار میشم.
باید برای استادم ارایه اش بدهم و اجراش کنم. وقت زیادی ندارم.حداکثر تایکی دو هفته دیگه باید تحویلش بدم.
موضوع پروژه اینه:
لیست پیوندی ایجاد کنید که اطلاعات ۵۰ دانشجو، مثلا(نام، نام خانوادگی، شماره دانشجویی، رشته تحصیلی) را دریافت کند. و عمل سرچ درج و حذف از لیست پیوندی را انجام دهد. به این صورت که:
۱)شماره دانشجویی دریافت کند، سایر مشخصات دانشجو را چاپ کند.
۲)شماره دانشجویی دریافت کند، دانشجوی بعد از دانشجوی مربوطه را چاپ کند.
۳)شماره دانشجویی دریافت کند، دانشجوی قبل از دانشجوی مربوطه را حذف کند.
طی این یکی دو هفته مدام ب همین سایت و ایمیل خودم سر میزنم امیدوارم کمکم کنید. واقعا نیاز دارم. ممنون بابت زحماتتون.
ما توی اوپن مایند برنامه ی آموزشی می گذاریم ، ولی اگر پروژه می خواهید سفارش دهید به تب “سفارش پروژه برنامه نویسی” در بالای صفحه مراجعه کنید.
دوست عزیز میشه نحوه ضرب چند جمله ای با لیست پیوندی یگطرفه و کدشو کمکم کنی بنویسم
یک لیست درست می کنی که اشیایی درش هستند که دو ویژگی دارند یک درجه ی متغییره مثلا ایکس به توان شش و دیگری ضریبش.دو لیست پیوندی می خواهی ضرب کنی خانه اول لیست اول را ضرب در تمام خانه های لیست دوم می کنی و حاصل را در یک لیست جدید می ریزی و به همین ترتیب
در کدی که شما نوشتید در تابع حذف عنصری که نوشتید آخرین else را اشتباه نوشتید. قبله اینکه کد رو بگذارید تو سایت یه اجرا بگیرید ازش اگه داده ی ما اولی و آخرین نباشد وسطی است که کدش در الس آخرین نوشته شده ولی اینطور که شما نوشتید فقط دومی رو حذف میکنه اجرا بگیرید از کد متوجه اشتباهتون میشوید در کل خیلی خوب بود. ممنون
تشکر بابت نظرتون ، ولی من کد چند بار اجرا کردم و هربار درست کار کرد . مثلا به لینک لیستی به صورت ۱ ۳ ۴ ۶ ۸ ۹ ساختم و به تابع پاک کردن از لیست گفتم عدد شش را پیدا و پاک کند . درست کار کرد و شش را پاک کرد!
شاید من منظورتون رو درست متوجه نشدم.
سلام می تونم خاهش کنم بخش های دیگه ای از لیست پیوندی رو هم اموزش بدین ….مته لیست پیوندی با گره راس و انتهایی و لیست دو پیوندی ؟؟؟ ممنونم
حتما در روز های آینده می نویسیم در موردش
ممنونم…
salam hala age tu ghesmate add 3 halat begirim :1)first=NULL ke shoma neveshtin va
first->data>i
va first->data<i
dar in halat ha age bekhaym baresi konim chi ke moratab shode ham bashan?
اگر بخواهید لینک لیست مرتب درست کنید خوب خوبه و کار کی کنه با یک کمی تغییر ، ولی لینک لیست بیشتر برای ارتباط اجزا استفاده می شه مثلا فرض کنید می خواهید با لینک لیست یک درخت بسازید اون موقع مهمه که رابطه پدر فرزندی رعایت شود.
سلام استاد عزیز
وقت بخیر
من زیاد با برنامه نویسی آشنایی ندارم و برای پروژه پایانی این درس استاد ما یه برنامه داده بنویسیم که من واقعا بلد نیستم..ممنون میشم ازتون اگه کمکم کنید…..موضوع برنامه به اینصورت هستش که :
برنامه ای بنویسید که ۱۰۰ عدد تصادفی را خوانده و در لیست پیوندی قرار بده سپس با استفاده از تابع مقادیر زیر را پیدا کند
min,max,average
استاد اگه ممکنه سریعتر اینو برام بفرستید
با تشکر فراوان از شما.
الهام
سلام ، ما اینجا ماهی نمی دیم در واقع ماهی گیری یاد می دهیم . شما می توانید از کد بالا برای ایجا لیستتاناستفاده کنید و به تعدادی که می خواهید عدد تصادفی با rand() تولید کنید.و از اول تا آر لیست یک بار برید تا کمترین و بیشترین را پیدا کنید
من پروژتونو آماده دارم اگر خواستید ایمیل بدید
barname_nevis@hotmail.com
سلام داداش مرامت تو حلقم خیلیییی کارمو آسون کردی پیاده سازیش کلی وقت میگرفت ازم
تعریف لیست پیوندی توی سی شارپ هم به همین صورت است؟میشه اون رو هم توضیح دهید
۹۶% درصد مثل همینه !
salam.kheli khooooob bud. plz code java ro bzarin vajebe mamnoon misham
سلام عزیزان
من به برنامه ای احتیاج دارم که یک لیست پیوندی داره و کاربر شماره دو گره را می دهد تا مکان این دو گره با هم عوض شود
خواهششششششششش می کنم کمک کنید
تا شنبه به این برنامه احتیاج دارم
قربان شما
سلام ببخشید چطوری میشه ۲ تا لیست رو پشت هم نوشت مثلا یه لیستی شامل x1,x2 و یه لیستی شامل y1,y2,y3,y4 باشه و در نهایت بشه y1,x1,y2,x2,y3,y4 این کار بدون ایجاد لیست جدید انجام بشه
لینک لیست یک ساختمان داده پویا است یعنی می شه بهش اضافه و کم کرد شما هم نود های یکی از لینک لیست ها رو به دیگری اضافه کن و بعد حافظه که لینک لیست اولی می گیرد آزاد کن.به تابع add توجه کن.
ببخشید منم همین سوال eli رو داشتم میشه واضح تر توضیح بدین؟
پیش پیش سپاس
سلام می خواستم دولسیت رو با هم مقایسه کنم کمک کنید؟
میشه از یک کلاس استفاده کرد ولی در مقایسه چطوری دو تا لیست رو با هم مقایسه کنم؟
خیلی این کار راحت است : اول یک پوینتر روی اولی و بعد یک پوینتر روی دومی می گذاری بعد دوتا خونه ای که پوینتر ها دارند بهشان اشاره می کنند را مقایسه می کنید و بعد هر دو پویینتر را یکی جلو می بریم و بعد دوباره مقایسه می کنیم و همین کار را ادامه می دهیم…
سلام.میشه با ساختار ها هم لیست های پیوندی رو بنویسین؟
این کد با استراکت زبان سی و فقط لینک لیست می سازه و به آن نود اضافه می کند.
#include
#include
struct student
{
int weight;
int age;
struct student *next;
};
struct student_linkedlist
{
struct student *head;
};
//===================================================
//Add node to list
struct student* add_to_list(struct student *first)
{
struct student *temp;
temp = malloc(sizeof(struct student));
temp->next = NULL;
printf(“Please inter student’s weight:\n”);
scanf(“%d”,&temp->weight);
printf(“Please inter student’s age:\n”);
scanf(“%d”,&temp->age);
if(first==NULL)
{
//create first node
first=temp;
}
else
{
//create other node
struct student *temp2 = first;
while(temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next=temp;
}
return first;
}
//===================================================
//show list
void show_list(struct student *first)
{
struct student *temp = first;
if(temp == NULL)
{
printf(“List is empty!\n”);
}
else
{
while(temp!= NULL)
{
printf(“%d , %d\n”,temp->weight,temp->age);
temp = temp->next;
}
}
}
//===================================================
int main()
{
int i;
struct student_linkedlist my_link;
//**********important********************
my_link.head = NULL;//*******head should be null when program start**********
//**********important********************
//for example add 4 node to list
for(i=0;i<۴;i++) { my_link.head = add_to_list(my_link.head); } //show list show_list(my_link.head); return 0; }
سلام،امکانش هست کد تابع delete after رو با سی شارپ بذارید؟؟؟
salam chi shod pas?????????????????????????
dar zemn anjam amaliat push va pop ru ham mikham
tashakor
سلام خوب بود مرسی میشه پیاده سازی پشته با استفاده از لیست پیوندی در زبان vb رو بگین ممنونم
تا آخر هفته حتما می گذارم
سلام
من یه پروژه دارم که باید با لیست پیوندی یک چند جمله ای چند متغیره را پیاده سازی کنم 🙁 چند جمله ای چند متغیره هم باید از نوع string باشه.و باید در نهایت ساده شده به خروجی بره.
اگه بتونید کمکم کنید خیلی ممنون میشم.
در همین وبسایت به آدرس http://open-mind.ir/?p=150 بروید و برنامه را کمی تغییر دهید.
salam.tashakor.tozihat kh kamelo khob bod 🙂
از این که تونستیم کمک کنیم خوشحالیم
سلام.خیلی عالی بود ممنون اقافرهاد
salam.age emkanesh hast tabe jostejo ham barash tarif konin.khely vajebe
mamnoon
تقریبا مانند تابع حذف کردن است ، به تابع حذف کردن توجه کنید
man ke natunestam benevisamesh.vali bazam mamnun.
kolan sitetun alie
در قسمت void linkelist::addelement بخش first->data=data1 قسمت data رو error می ده چیکار کنم.
پوریا تست کردم ، کارکرد مشکلی نداشت.من با ویژوال زدم
*temp.next
daqiqan b che manast???
kheili vajebe mamnoon
temp هم یک شی از کلاس node است فرض کن شما می خواهید جای دو عدد a,b در یک برنامه عوض کنید شما برای این کار یک متغییر تعریف می کنید تا مقدار a را در c بریزید و مقدار b را در a و در آخر مقدار c را در a . بگذارید ساده تر به شما بگوییم فرض کنید یک ظرف خورشت سبزی دارید و در یک ظرف دیگر آش حالا فکر کنید می خواهید جای این دو را عوض کنید برای این کار چه می کنید ؟؟ معلوم است یک ظرف خالی می آورید و آش را درون آن می ریزید و بعد خورشت سبزی را در ظرف خالی آش می ریزید و بعد آش را در ضرف خالی خورشت می ریزید . تقریبا temp هم به طور کلی همین کار را می کند . لبته کاربرد های دیگری هم دارد. (کاربرد های دیگر : اضافه کردن گره ، حذف گره ، پیمایش گره)