سئلت عن القائمة المرتبطة مؤخرًا وقال أحد الأصدقاء عند مناقشة جافا معي. لأكون صادقًا ، لقد تعلمت القليل جدًا في العام الماضي ، لقد تعلمت البرمجة. لقد تعلمت اللغات Java و C# ، وتعلمت القليل عن HTML+CSS+JavaScript حول الويب. لأنني أفضل ذلك ، فأنا أكثر جدية عند تعلم Winform ، وقد درست عمليات قاعدة البيانات بنفسي. لكنني لم أدرس أو درست القائمة المرتبطة أبدًا. بالإضافة إلى ذلك ، كنت أقرأ WPF مؤخرًا وقد وصلت الدورة التدريبية إلى JSP ، وهو ضيق نسبيًا.
لكنني ما زلت أأخذت ليلة ونصف للنظر إلى القائمة المرتبطة في اتجاه واحد. وحاولت كتابة مثال باستخدام Java. يمكن للأصدقاء الذين لم يتعرضوا للقائمة المرتبطة استخدامها كمرجع. أتمنى أن تقدم اقتراحات أكثر قيمة.
دعونا أولاً نوضح ماهية القائمة المرتبطة. على حد علمي ، فإن القائمة المرتبطة هي بنية بيانات ، وهي في نفس المستوى مثل الصفيف. على سبيل المثال ، مبدأ التنفيذ في ArrayList الذي نستخدمه في Java هو Array. مبدأ التنفيذ في LinkedList هو قائمة مرتبطة. قال أستاذي إن القوائم المرتبطة ليست فعالة عند الدوران ، ولكن لها مزايا واضحة عند الإدراج والحذف. ثم لديه أكثر من عشر سنوات من خبرة البرمجة ، وأعتقد ذلك. لكنني لا أعرف ما إذا كان يتحدث عن قوائم مرتبطة في اتجاهين. نحن هنا لفهم القوائم المرتبطة في اتجاه واحد فقط.
القوائم المرتبطة (السلسلة المذكورة في هذه المقالة كلها قوائم مرتبطة أحادية الاتجاه ، ويشار إليها جميعها على أنها قوائم مرتبطة أحادية الاتجاه) تتكون بالفعل من العقد (العقد) ، والقائمة المرتبطة بها عدد غير مؤكد من العقد. لا يوجد سوى عقدة رأس واحدة (رأس) تعرض للخارج ، ويتم تنفيذ جميع عملياتنا في القائمة المرتبطة بشكل مباشر أو غير مباشر من خلال عقدة رأسها.
تتكون العقدة من كائن يحتاج إلى تخزينه ومرجع إلى العقدة التالية. أي أن العقدة بها عضوين: كائن مخزن ، مرجع إلى العقدة التالية.
قد لا تفهم هذا جيدًا ، وقد يكون من الأسهل عليك أن تفهم ما إذا قمت بنشر صورة.
الرموز الرئيسية لتنفيذ العمليات الأساسية لقوائم Java الفردية المرتبطة هي كما يلي:
حزمة com.tyxh.link ؛ // Node Class Public Class Node {node node next ؛ // Pointer Field Dative Int Data ؛ // Field Data Field Node (int data) {this. البيانات = البيانات ؛ } // إظهار هذه العقدة display void display () {system. out.print (data + "") ؛ }} package com.tyxh.link ؛ // قائمة واحدة مرتبطة بـ LinkList {Public Node First ؛ // حدد رأسًا خاصًا int pos = 0 ؛ // موقع Node Public LinkList () {this. أولا = فارغ ؛ }. العقدة. التالي = أولا ؛ أولا = العقدة ؛ } // حذف عقدة رأس وإرجاع عقدة الرأس العامة DELETEFIRSTNODE () {node tempnode = first ؛ أولا = tempnode. التالي؛ إرجاع tempnode ؛ } // أدخل عقدة في أي مكان وأدخل الفراغ العام بعد الفهرس إضافة (int index ، int data) {node node = new node (data) ؛ التيار العقدة = الأول ؛ العقدة السابقة = الأول ؛ بينما (pos! = index) {prevent = current ؛ الحالي = الحالي. التالي؛ POS ++ ؛ } العقدة. التالي = الحالي ؛ سابق. التالي = العقدة ؛ POS = 0 ؛ } // حذف العقد في أي موقع عقدة عامة DELETEBYPOS (int index) {node current = first ؛ العقدة السابقة = الأول ؛ بينما (pos! = index) {pos ++ ؛ السابق = الحالي ؛ الحالي = الحالي. التالي؛ } if (current == first) {first = first. التالي؛ } آخر {pos = 0 ؛ سابق. التالي = الحالي. التالي؛ } إرجاع التيار ؛ } // حذف العقدة وفقًا لبيانات العقدة (فقط حذف واحدة) العقدة العامة الأولى) DELETEBYDATA (int data) {node current = first ؛ العقدة السابقة = الأول ؛ // تذكر العقدة السابقة بينما (البيانات الحالية. البيانات! = البيانات) {if (current. next == null) {return null ؛ } السابق = الحالي ؛ الحالي = الحالي. التالي؛ } if (current == first) {first = first. التالي؛ } آخر {السابق. التالي = الحالي. التالي؛ } إرجاع التيار ؛ } // إظهار جميع معلومات العقدة public displayAllNodes () {node current = first ؛ بينما (الحالي! = null) {current.display () ؛ الحالي = الحالي. التالي؛ } نظام. Out.println () ؛ } // البحث عن معلومات العقدة استنادًا إلى موقع FindBypos (int index) {int index) {node current = first ؛ if (pos! = index) {current = current. التالي؛ POS ++ ؛ } إرجاع التيار ؛ }. بينما (البيانات الحالية! = البيانات) {if (current. next == null) إرجاع null ؛ الحالي = الحالي. التالي؛ } إرجاع التيار ؛ }} package com.tyxh.link ؛ . LinkList.AddFirstNode (20) ؛ LinkList.AddFirstNode (21) ؛ LinkList.AddFirstNode (19) ؛ // 19،21،20 linklist.add (1 ، 22) ؛ // 19،22،21،20 linklist.add (2 ، 23) ؛ // 19،22،23،21،20 linklist.add (3 ، 99) ؛ // 19،22،23،99،21،20 linklist.displayallnodes () ؛ // node node = linklist.deletefirstnode () ؛ // system.out.println ("node:" + node.data) ؛ // linklist.displayallnodes () ؛ // node = linklist.deleteBypos (2) ؛ // system.out.println ("node:" + node.data) ؛ // linklist.displayallnodes () ؛ // linklist.deletefirstnode () ؛ Node Node = LinkList.DeleteByData (19) ؛ // node node = linklist.deleteBypos (0) ؛ نظام. Out.println ("العقدة:" + عقدة. البيانات) ؛ LinkList.DisplayAllNodes () ؛ node node1 = linklist.findbypos (0) ؛ نظام. out.println ("node1:" + node1. data) ؛ node node2 = linklist.findbydata (22) ؛ نظام. out.println ("node2:" + node2. data) ؛ }}ما سبق هو تنفيذ العمليات الأساسية لقوائم Java Single Linked التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!