مقدمة
القائمة المرتبطة هي بنية بيانات أساسية شائعة. إنه جدول خطي ، لكنه لا يتم تخزينه بالتتابع في الذاكرة. يتم تخزينه في شكل سلسلة. كل عقدة تخزن "مؤشر" العقدة التالية. تنقسم البيانات في Java إلى أنواع البيانات المرجعية وأنواع البيانات الأساسية. لا يوجد مفهوم للمؤشرات في Java ، ولكن بالنسبة للقوائم المرتبطة ، تشير المؤشرات إلى عنوان أنواع البيانات المرجعية.
القوائم المرتبطة والصفائف كلاهما هياكل بيانات خطية ، ويتم تثبيت طولها للمصفوفات. نظرًا لأنها مستمرة في الذاكرة ، فهي أكثر ملاءمة للبحث والتجاوز. لا يتم تخزين القوائم المرتبطة بالتتابع في الذاكرة ، ولكن نظرًا لأنها تتألف من "مؤشرات" ، فهي أكثر ملاءمة لمقارنة المصفوفات عند الإدراج والحذف.
ينفذ الرمز التالي بنية بيانات بسيطة لقائمة مرتبطة موصوفة بلغة Java من خلال الفصول الداخلية والطرق المتكررة. دعونا نلقي نظرة على المقدمة التفصيلية.
تعريف بنية بيانات القائمة المرتبطة
أولاً ، دعنا نلقي نظرة على تعريف بنية بيانات القائمة المرتبطة ، الرمز كما يلي:
class nodemanager {private node root ؛ // Root Node private int currentIndex = 0 ؛ // node node node serial ، كل عملية تبدأ من 0 void public add (int data) {} public void delnode (int data) {} public void print () {} public boolean findNode (int data) {} public boolean updatenode (int olddata ، int newdata) {}} Method Class Node {Private Int Data ؛ العقدة الخاصة المقبل ؛ // خذ النوع الحالي كعقدة عامة (بيانات int) {this.data = data ؛ } public void setData (int data) {this.data = data ؛ } public int getData () {return data ؛ }. Node Public void insertnode (int index ، int data) {}}}لتعريف القوائم المرتبطة ، يتم استخدام فئة Nodemanager لإدارة عمليات القائمة المرتبطة ، بينما يتم استخدام عقدة الفئة الداخلية العضو لتوفير بيانات قائمة مرتبطة وهيكل السلسلة. بالنسبة لمستخدمي الفصل ، لا يتم الوصول إلى البيانات مباشرة ، لذلك تعمل فئة Nodemanager ، وتوفر عقدة الفئة الداخلية إدارة بيانات حقيقية. لذلك ، تحتاج فئة العقدة إلى توفير طرق حقيقية تشغيل بيانات ، ويحتاج فئة Nodemanager أيضًا إلى توفير مجموعة من الطرق لتشغيل القوائم المرتبطة من الخارج. لذلك ، يوفر كل من فئة Novemanager وفئة العقدة نفس الطرق على ما يبدو ، ولكن المعنى الفعلي ليس هو نفسه.
دعنا نتحقق من طريقة الإضافة () في فئة Novemanager وفئة العقدة. الرمز كما يلي:
void public add (int data) {if (root == null) {root = new node (data) ؛ } آخر {root.addnode (data) ؛ }} // إضافة Node public void addNode (int data) {if (this.next == null) {this.next = new node (data) ؛ } آخر {this.next.addnode (data) ؛ }}الطريقة أعلاه في الكود هي الطريقة في فئة Nodemanager ، في حين أن الطريقة التالية هي الطريقة في فئة العقدة.
يتم توفير متغير عضو الجذر في فئة المدير ، والذي يتم استخدامه لإدارة عقدة الرأس للقائمة المرتبطة. لذلك ، عند إضافة عقدة ، ستحدد أولاً ما إذا كان الجذر فارغًا. إذا كانت فارغة ، فسيتم حفظ العقدة مباشرة بواسطة الجذر. إذا لم يكن الجذر فارغًا ، فسيتم إضافته من خلال طريقة addNode () في فئة العقدة. تتمثل فكرة الإضافة إلى هذه النقطة في العثور على العقدة الأخيرة من القائمة المرتبطة الحالية وتعيين الإضافة الجديدة إلى متغير العضو التالي الذي تم تعيين العقدة إلى العقدة الأخيرة.
إضافة وحذف وتعديل وتحقق من القائمة المرتبطة
يتم تقديم نفس الفكرة أيضًا للعمليات الأخرى في القوائم المرتبطة. الرمز الكامل لإضافة وحذف واسترجاع وإخراج القوائم المرتبطة هو كما يلي:
class nodemanager {private node root ؛ // Root Node private int currentIndex = 0 ؛ // node node serial ، كل عملية تبدأ من 0 void public add (int data) {if (root == null) {root = new node (data) ؛ } آخر {root.addnode (data) ؛ }} public void delnode (int data) {if (root == null) return ؛ if (root.getData () == data) {node tmp = root ؛ الجذر = root.next ؛ TMP = فارغة ؛ } آخر {root.delnode (data) ؛ }} public void print () {if (root! = null) {system.out.print (root.getData () + "") ؛ root.printnode () ؛ System.out.println () ؛ }} public boolean findNode (int data) {if (root == null) return false ؛ if (root.getData () == data) {return true ؛ } آخر {return root.findnode (data) ؛ }} public boolean updatenode (int olddata ، int newdata) {if (root == null) return false ؛ if (root.getData () == olddata) {root.setData (newData) ؛ العودة صحيح. } آخر {return root.updatenode (Olddata ، NewData) ؛ }} // إدراج إدراج الفراغ العام (int index ، int data) {if (index <0) return ؛ CurrentIndex = 0 ؛ if (index == currentIndex) {node newNode = new node (data) ؛ newNode.next = الجذر ؛ الجذر = newNode ؛ } آخر {root.insertNode (الفهرس ، البيانات) ؛ }} // من يملك البيانات ، الذي يوفر عقدة فئة الطريقة {private int data ؛ العقدة الخاصة المقبل ؛ // خذ النوع الحالي كعقدة عامة (بيانات int) {this.data = data ؛ } public void setData (int data) {this.data = data ؛ } public int getData () {return data ؛ }. } آخر {this.next.addnode (data) ؛ }} // حذف العقدة public void delnode (int data) {if (this.next! = null) {if (this.next.getData () == data) {node tmp = this.next ؛ this.next = this.next.next ؛ TMP = فارغة ؛ } آخر {this.next.delnode (data) ؛ }}} // إخراج جميع العقد printnode printNode () {if (this.next! = null) {system.out.print (this.next.getData () + "") ؛ this.next.printnode () ؛ }} // ابحث عن ما إذا كانت العقدة موجودة BOONEDNODE (بيانات int) {if (this.next! = null) {if (this.next.getData () == data) {return true ؛ } آخر {return this.next.findnode (data) ؛ }} إرجاع خطأ ؛ }. العودة صحيح. } آخر {return this.next.updatenode (Olddata ، NewData) ؛ }} إرجاع خطأ ؛ } // insert node public void insertnode (int index ، int data) {currentIndex ++ ؛ if (index == currentIndex) {node newNode = new node (data) ؛ newNode.next = this.next ؛ this.next = newNode ؛ } آخر {this.next.insertNode (index ، data) ؛ }}}}}ما سبق هو الرمز الكامل للتشغيل الأساسي للقائمة المرتبطة. فيما يلي رمز الاتصال للاختبار ، الرمز هو كما يلي:
LinkList public Class {public static void main (string [] args) {nodemanager nm = newmanager () ؛ System.out.println ("عنوان القائمة المرتبطة (إضافة 5 ، 4 ، 3 ، 2 ، 1)") ؛ NM.Add (5) ؛ NM.Add (4) ؛ NM.Add (3) ؛ NM.Add (2) ؛ NM.Add (1) ؛ nm.print () ؛ System.out.println ("حذف القائمة المرتبطة (حذف 3)") ؛ NM.Delnode (3) ؛ nm.print () ؛ System.out.println ("البحث عن قائمة مرتبطة (العثور على 1)") ؛ System.out.println (NM.FindNode (1)) ؛ System.out.println ("LINKING LIST (Find 10)") ؛ System.out.println (NM.FindNode (10)) ؛ System.out.println ("قائمة التحديث (تحديث من 1 إلى 10)") ؛ nm.updatenode (1 ، 10) ؛ nm.print () ؛ System.out.println ("Insert List (Insert 20 في الموضع الأول)") ؛ NM.Insert (1 ، 20) ؛ nm.print () ؛ System.out.println ("Insert List (Insert 30 في الموضع الأول)") ؛ NM.Insert (1 ، 20) ؛ nm.print () ؛ System.out.println ("Insert List (Insert 30 at the Zero Position)") ؛ NM.Insert (0 ، 30) ؛ nm.print () ؛ }}تجميع وتشغيل الرمز ، والنتيجة هي كما يلي:
لقد استخدمت الكثير من المعرفة حول هياكل البيانات في فئة التجميع في Java. عندما أكون في حالة جيدة ، سأتعلم الكود المصدري لفئة مجموعة Java. سأعمل بجد لأكون مبرمجًا صغارًا!
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.