أحمد مراد نشر 21 مايو 2016 أرسل تقرير نشر 21 مايو 2016 كما هو واضح من العنوان، أبحث عن class link list باستخدام المصفوفات بلغة ++c؟ شكرًا. اقتباس
0 E.Nourddine نشر 21 مايو 2016 أرسل تقرير نشر 21 مايو 2016 كتعريف لـ class linked list على لغة ++C، هي مصفوفة مكونة من بنيات بيانات تُخزّن يها بيانات لا يُشترط أن تكون من نفس النوع، وتربط بينها مؤشرات Pointersبطريقة متسلسلة. صورة موضحة لبنية class Linked list: أيضا: linkedlist.bmp الفرق بين linked list وَ مصفوفة array: array: محدودة الطول. الحذف والاضافة تتطلب وقت. قراءة العناصر يتم عن طريقindex. Linked Lists: طول قابل للتغيير. الحذف والاضافة فعالة. قراءة العناصر بالتتابع. مثال: #include <iostream> using namespace std; struct Node { int data; Node* next; }; // only for the 1st Node void initNode(struct Node *head,int n){ head->data = n; head->next =NULL; } // apending void addNode(struct Node *head, int n) { Node *newNode = new Node; newNode->data = n; newNode->next = NULL; Node *cur = head; while(cur) { if(cur->next == NULL) { cur->next = newNode; return; } cur = cur->next; } } void insertFront(struct Node **head, int n) { Node *newNode = new Node; newNode->data = n; newNode->next = *head; *head = newNode; } struct Node *searchNode(struct Node *head, int n) { Node *cur = head; while(cur) { if(cur->data == n) return cur; cur = cur->next; } cout << "No Node " << n << " in list.\n"; } bool deleteNode(struct Node **head, Node *ptrDel) { Node *cur = *head; if(ptrDel == *head) { *head = cur->next; delete ptrDel; return true; } while(cur) { if(cur->next == ptrDel) { cur->next = ptrDel->next; delete ptrDel; return true; } cur = cur->next; } return false; } /* reverse the list */ struct Node* reverse(struct Node** head) { Node *parent = *head; Node *me = parent->next; Node *child = me->next; /* make parent as tail */ parent->next = NULL; while(child) { me->next = parent; parent = me; me = child; child = child->next; } me->next = parent; *head = me; return *head; } /* Creating a copy of a linked list */ void copyLinkedList(struct Node *node, struct Node **pNew) { if(node != NULL) { *pNew = new Node; (*pNew)->data = node->data; (*pNew)->next = NULL; copyLinkedList(node->next, &((*pNew)->next)); } } /* Compare two linked list */ /* return value: same(1), different(0) */ int compareLinkedList(struct Node *node1, struct Node *node2) { static int flag; /* both lists are NULL */ if(node1 == NULL && node2 == NULL) { flag = 1; } else { if(node1 == NULL || node2 == NULL) flag = 0; else if(node1->data != node2->data) flag = 0; else compareLinkedList(node1->next, node2->next); } return flag; } void deleteLinkedList(struct Node **node) { struct Node *tmpNode; while(*node) { tmpNode = *node; *node = tmpNode->next; delete tmpNode; } } void display(struct Node *head) { Node *list = head; while(list) { cout << list->data << " "; list = list->next; } cout << endl; cout << endl; } int main() { struct Node *newHead; struct Node *head = new Node; initNode(head,10); display(head); addNode(head,20); display(head); addNode(head,30); display(head); addNode(head,35); display(head); addNode(head,40); display(head); insertFront(&head,5); display(head); int numDel = 5; Node *ptrDelete = searchNode(head,numDel); if(deleteNode(&head,ptrDelete)) cout << "Node "<< numDel << " deleted!\n"; display(head); cout << "The list is reversed\n"; reverse(&head); display(head); cout << "The list is copied\n"; copyLinkedList(head,&newHead); display(newHead); cout << "Comparing the two lists...\n"; cout << "Are the two lists same?\n"; if(compareLinkedList(head,newHead)) cout << "Yes, they are same!\n"; else cout << "No, they are different!\n"; cout << endl; numDel = 35; ptrDelete = searchNode(newHead,numDel); if(deleteNode(&newHead,ptrDelete)) { cout << "Node "<< numDel << " deleted!\n"; cout << "The new list after the delete is\n"; display(newHead); } cout << "Comparing the two lists again...\n"; cout << "Are the two lists same?\n"; if(compareLinkedList(head,newHead)) cout << "Yes, they are same!\n"; else cout << "No, they are different!\n"; cout << endl; cout << "Deleting the copied list\n"; deleteLinkedList(&newHead); display(newHead); return 0; } النتيجة: 10 10 20 10 20 30 10 20 30 35 10 20 30 35 40 5 10 20 30 35 40 Node 5 deleted! 10 20 30 35 40 The list is reversed 40 35 30 20 10 The list is copied 40 35 30 20 10 Comparing the two lists... Are the two lists same? Yes, they are same! Node 35 deleted! The new list after the delete is 40 30 20 10 Comparing the two lists again... Are the two lists same? No, they are different! Deleting the copied list هناك دورة فيديو على موقع youtube: مصادر أخرى: C++ Tutorial: Intro to Linked Lists Linked Lists C++ Tutorial - Linked List Examples - 2016 اقتباس
السؤال
أحمد مراد
كما هو واضح من العنوان، أبحث عن class link list باستخدام المصفوفات بلغة ++c؟
شكرًا.
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.