تشغيل قائمة المرتبطة Java: قائمة ارتباط دائري
أمثلة التحليل الرئيسي:
1. قائمة متكررة قائمة واحدة مرتبطة
2. قائمة متكررة ذات ارتباط مزدوج
من بينها ، تتوافق عقدة القائمة المفردة والفئة العقدة ذات الارتباط المزدوج وواجهة iCommoperate <T> مع المقالة السابقة ، ولن تتم مناقشتها هنا. المرجع: عمليات قائمة Java المرتبطة: قائمة متصلة واحدة وقائمة مرتبطة مزدوجة //www.vevb.com/article/95113.htm
1. قائمة متكررة قائمة واحدة مرتبطة
Package LinkListTest ؛ import java.util.hashmap ؛ import java.util.map ؛ public class SingleCycleLinkList تنفذ icommoperate <snode> {private snode head = new snode ("head") ؛ // مؤشر الرأس العام ، لم يتغير بعد إعلان حجم int الخاص = 0 ؛ public int getSize () {return this.size ؛ } / * * أدخل القائمة المرتبطة ، في كل مرة يتم إدراجها في النهاية ، المعيار لتحديد ما إذا كانت النهاية تشير إلى الرأس التالي إلى الرأس * * / Override Public Boolean InsertNode (Snode Node) {boolean flag = false ؛ initLinkList () ؛ // تهيئة القائمة المرتبطة if (this.size == 0) {// freef linked list this.head.setNextNode (node) ؛ node.setNextNode (this.head) ؛ } آخر {snode current = this.head ؛ بينما (current.getNextNode ()! = this.head) {// ابحث عن end node current = current.getNextNode () ؛ } current.setNextNode (node) ؛ node.setNextNode (this.head) ؛ // اتبع القائمة المرتبطة السيئة ، تشير عقدة الذيل إلى الرأس} this.size ++ ؛ العلم = صحيح ؛ العلم العودة } / * * أدخل الموضع المحدد للقائمة المرتبطة ، بدءًا من 1 ، و POS أكبر من الحجم ، أدخله في نهاية القائمة المرتبطة * * / Override Boolean InsertPosnode (int pos ، عقدة Snode) {boolean flag = true ؛ snode current = this.head.getNextNode () ؛ initLinkList () ؛ // تهيئة القائمة المرتبطة if (this.size == 0) {// القائمة المرتبطة فارغة this.head.setNextNode (node) ؛ Node.setNextNode (this.head) ؛ // اتبع القائمة المرتبطة السيئة ، تشير عقدة الذيل إلى رأس هذا .size ++ ؛ } آخر إذا (this.size <pos) {// يكون موضع POS أكبر من طول القائمة المرتبطة ، أدخل insertnode (العقدة) ؛ } آخر إذا (pos> 0 && pos <= this.size) {// العقدة في القائمة المرتبطة // 1. ابحث عن العقدة والعقدة السابقة المراد إدراجها ، وسيتم إدراج العقدة بين العقدتين int find = 0 ؛ snode prenode = this.head ؛ // العقدة الأمامية snode currentNode = التيار ؛ // العقدة الحالية بينما (ابحث عن <pos-1 && currentNode! = this.head) {prenode = current ؛ // تتحرك العقدة الأمامية إلى الوراء currentNode = currentNode.getNextNode () ؛ // يتم نقل العقدة الحالية إلى الوراء Find ++ ؛ if (find <pos-1 && currentNode! = this.head) {// لم يتم الانتهاء من العقدة بحثًا عن العقدة ، ويتم نقل العقدة إلى الوراء الحالية = currentnextNode () ؛ }} // system.out.println (prenode) ؛ // system.out.println (currentNode) ؛ // 2. Insert Node prenode.setNextNode (Node) ؛ node.setNextNode (currentNode) ؛ this.size ++ ؛ } آخر {system.out.println ("خطأ معلومات الموضع") ؛ العلم = خطأ ؛ } العلم الإرجاع ؛ } private void initLinkList () {if (size == 0) {this.head.setNextNode (this.head) ؛ }} / * * حدد عقدة POS للقائمة المرتبطة وحذف العقدة المقابلة. الطريقة: ابحث عن العقد الأمامية والخلفية لحذفها وحذفها وتبدأ التراجع من 1 * *// Override Boolean Deletenode (int pos) {boolean flag = false ؛ snode current = this.head.getNextNode () ؛ if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("خطأ في معلومات الموضع أو عدم وجود معلومات في القائمة المرتبطة") ؛ } آخر {// 1. ابحث عن العقد الأمامية والخلفية لحذف int find = 0 ؛ snode prenode = this.head ؛ // Front Node snode nextNode = current.getNextNode () ؛ // العقدة الخلفية بينما (ابحث عن <pos-1 && nextNode! = this.head) {prenode = current ؛ // يتم نقل العقدة الأمامية إلى الوراء nextNode = nextNode.getNextNode () ؛ // يتم نقل العقدة الخلفية إلى الوراء Find ++ ؛ if (find <pos-1 && nextNode! = this.head) {// لم يتم الانتهاء من العقدة الأمامية ، يتم نقل "العقدة الأمامية" الخلفية إلى الوراء = current.getNextNode () ؛ }} // system.out.println (prenode) ؛ // system.out.println (nextNode) ؛ // 2. حذف العقدة prenode.setNextNode (nextNode) ؛ System.gc () ؛ // إعادة تدوير وحذف العقدة this.size-- ؛ العلم = صحيح ؛ } العلم الإرجاع ؛ } / * * حدد عقدة POS للقائمة المرتبطة ، وقم بتعديل العقدة المقابلة ، ويبدأ التراجع من 1 * * / Override Public Boolean Updatenode (int pos ، خريطة <string ، كائن> خريطة) {boolean flag = false ؛ Snode Node = getNode (pos ، map) ؛ // احصل على العقدة في POS المقابلة if (node! = null) {string data = (string) map.get ("data") ؛ Node.setData (البيانات) ؛ العلم = صحيح ؛ } العلم الإرجاع ؛ } / * * ابحث عن عقدة POS للقائمة المرتبطة المحددة ، ويبدأ التراجع من 1 * * / Override public snode getNode (int pos ، خريطة <string ، كائن> خريطة) {snode current = this.head.getNextNode () ؛ if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("معلومات الموضع غير صحيحة أو أن القائمة المرتبطة غير موجودة") ؛ العودة لاغية. } int find = 0 ؛ بينما (البحث <pos-1 && current! = this.head) {current = current.getNextNode () ؛ البحث ++ ؛ } إرجاع التيار ؛ } / * * طباعة قائمة مرتبطة * * / Override public void printLink () {int length = this.size ؛ if (length == 0) {system.out.println ("القائمة المرتبطة فارغة!") ؛ يعود ؛ } snode current = this.head.getNextNode () ؛ System.out.println ("إجمالي عدد العقد:" + طول + "منها") ؛ int find = 0 ؛ بينما (الحالي! = this.head) {system.out.println ("th" + (++ find) + "العقد:" + الحالية) ؛ current = current.getNextNode () ؛ }} public static void main (string [] args) {singleCycleLinkList scll = new SingleCyclinkList () ؛ snode node1 = new snode ("node1") ؛ snode node2 = new snode ("node2") ؛ snode node3 = new snode ("node3") ؛ snode node4 = new snode ("node4") ؛ snode node5 = new snode ("node5") ؛ snode node6 = new snode ("insert empection position") ؛ // scll.insertposnode (scll.getSize ()+1 ، node1) ؛ // scll.insertposnode (scll.getsize ()+1 ، node2) ؛ // scll.insertposnode (scll.getsize ()+1 ، node2) ؛ scll.insertposnode (scll.getsize ()+1 ، node3) ؛ // scll.insertposnode (scll.getSize ()+1 ، node4) ؛ // scll.insertposnode (scll.getsize ()+1 ، node5) ؛ scll.insertnode (node1) ؛ scll.insertnode (node2) ؛ scll.insertnode (node3) ؛ scll.insertnode (node4) ؛ scll.insertnode (node5) ؛ System.out.println ("***********************************") ؛ scll.printLink () ؛ System.out.println ("************************ الحصول على القائمة المرتبطة المحددة *************************************** int pos = 2 ؛ System.out.println ("الحصول على بيانات موضع"+pos+"للقائمة المرتبطة:"+scll.getNode (pos ، null)) ؛ System.out.println ("***********************************") ؛ int pos1 = 3 ؛ System.out.println ("أدخل البيانات في العقد"+pos1+":") ؛ scll.insertposnode (pos1 ، node6) ؛ scll.printLink () ؛ System.out.println ("*************************** حذف العقدة المحددة في القائمة المرتبطة ********************************") ؛ int pos2 = 3 ؛ system.out.println ("delete"+pos2+"العقد:") ؛ scll.deletenode (pos2) ؛ scll.printLink () ؛ System.out.println ("********************************* تعديل العقد المحددة للموقع للقائمة المرتبطة *************************************") ؛ int pos3 = 3 ؛ System.out.println ("Modify"+pos3+"العقد:") ؛ الخريطة <string ، Object> map = new HashMap <> () ؛ map.put ("البيانات" ، "هذا اختبار") ؛ scll.updatenode (pos3 ، map) ؛ scll.printLink () ؛ }}2. قائمة متكررة ذات ارتباط مزدوج
Package LinkListTest ؛ import java.util.hashmap ؛ import java.util.map ؛ public class doubleCycleLinkList تنفذ icommoperate <Dnode> {private dnode head = new dnode ("head") ؛ // مؤشر الرأس العام ، لم يتغير بعد إعلان حجم int الخاص = 0 ؛ // سجل عدد العقد من القائمة المرتبطة العامة getSize () {return this.size ؛ } / * * أدخل القائمة المرتبطة ، في كل مرة يتم إدراجها في النهاية ، المعيار لتحديد ما إذا كانت النهاية تشير إلى الرأس التالي إلى الرأس * * / Override Boolean InsertNode (DNODE NODE) {flag = false ؛ initLinkList () ؛ // تهيئة القائمة المرتبطة dnode current = this.head ؛ if (this.size == 0) {// القائمة الفارغة المرتبطة this.head.setNextNode (node) ؛ node.setPriOnde (this.head) ؛ node.setNextNode (this.head) ؛ } else {// العقدة في القائمة المرتبطة بينما (current.getNextNode ()! = this.head) {// ابحث عن end node current = currentNextNode () ؛ } current.setNextNode (node) ؛ Node.setPriOnde (الحالي) ؛ node.setNextNode (this.head) ؛ // إعادة توجيه القائمة المرتبطة السيئة ، تشير عقدة الذيل إلى الرأس} this.size ++ ؛ العلم = صحيح ؛ العلم العودة } / * * أدخل الموضع المحدد للقائمة المرتبطة ، بدءًا من 1 ، و POS أكبر من الحجم ، أدخل نهاية القائمة المرتبطة * * / Override Public Boolean insertposnode (int pos ، dnode node) {boolean flag = true ؛ initLinkList () ؛ // تهيئة القائمة المرتبطة dnode حاليًا = this.head.getNextNode () ؛ if (this.size == 0) {// القائمة المرتبطة فارغة this.head.setNextNode (node) ؛ node.setPriOnde (this.head) ؛ node.setNextNode (this.head) ؛ this.size ++ ؛ } آخر إذا (pos> this.size) {// يكون موضع POS أكبر من طول القائمة المرتبطة ، أدخل insertnode (العقدة) ؛ } آخر إذا (pos> 0 && pos <= this.size) {// العقدة في القائمة المرتبطة // 1. ابحث عن عقدة pos ليتم إدراجها ، أدخل موقع POS Current Current int = 0 ؛ بينما (العثور على <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode () ؛ البحث ++ ؛ } // 2. insert node if (current.getNextNode () == this.head) {// tail node.setpriornode (current) ؛ node.setNextNode (this.head) ؛ current.setNextNode (العقدة) ؛ } if if (current.getNextNode ()! = this.head) {// intermediate node node.setpriornode (current.getPriornode ()) ؛ node.setNextNode (الحالي) ؛ current.getPriOnd (). setNextNode (العقدة) ؛ current.setPriOnde (العقدة) ؛ } this.size ++ ؛ } آخر {system.out.println ("خطأ معلومات الموضع") ؛ العلم = خطأ ؛ } العلم الإرجاع ؛ } private void initLinkList () {if (size == 0) {this.head.setNextNode (this.head) ؛ this.head.setPriOrnode (this.head) ؛ }} / * * حدد عقدة POS للقائمة المرتبطة وحذف العقدة المقابلة. الطريقة: ابحث عن حذف العقدة الأمامية والخلفية للعقدة المراد حذفها ، ويبدأ الحرف الفردي من 1 * */ Override Public Boolean Deletenode (int pos) {boolean flag = false ؛ dnode current = this.head.getNextNode () ؛ if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("معلومات الموضع غير صحيحة أو أن القائمة المرتبطة غير موجودة") ؛ } else {// 1. ابحث عن عقدة موقع الموقع المراد حذفها int find = 0 ؛ بينما (العثور على <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode () ؛ البحث ++ ؛ } // 2. حذف العقدة if (current.getNextNode () == this.head) {// tail node current.getPriOrnode (). setNextNode (this.head) ؛ } آخر if (current.getNextNode ()! = this.head) {// intermediate node current.getPriOrnode (). setNextNode (current.getNextNode ()) ؛ current.getNextNode (). } system.gc () ؛ // إعادة تدوير وحذف العقد this.size-- ؛ العلم = صحيح ؛ } العلم الإرجاع ؛ } / * * حدد عقدة POS للقائمة المرتبطة ، وقم بتعديل العقدة المقابلة ، ويبدأ التراجع من 1 * * / Override Public Boolean Updatenode (int pos ، خريطة <string ، كائن> خريطة) {boolean flag = false ؛ عقدة dnode = getNode (pos ، map) ؛ if (node! = null) {string data = (string) map.get ("data") ؛ Node.setData (البيانات) ؛ العلم = صحيح ؛ } العلم الإرجاع ؛ } / * * ابحث عن عقدة POS للقائمة المرتبطة المحددة ، ويبدأ التراجع من 1 * * / Override public dnode getNode (int pos ، خريطة <string ، كائن> خريطة) {dnode current = this.head.getNextNode () ؛ if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("معلومات الموضع غير صحيحة أو أن القائمة المرتبطة غير موجودة") ؛ العودة لاغية. } int find = 0 ؛ بينما (البحث <pos-1 && current! = this.head) {current = current.getNextNode () ؛ البحث ++ ؛ } إرجاع التيار ؛ } / * * طباعة قائمة مرتبطة * * / Override public void printLink () {int length = this.size ؛ if (length == 0) {system.out.println ("القائمة المرتبطة فارغة!") ؛ يعود ؛ } dnode current = this.head.getNextNode () ؛ int find = 0 ؛ System.out.println ("إجمالي عدد العقد:" + طول + "منها") ؛ بينما (current! = this.head) {system.out.println ("th" + (++ find) + "عقد واحد:" + الحالي) ؛ current = current.getNextNode () ؛ }} public static void main (string [] args) {doubleCycleLinkList dcll = new DoubleCyclinkList () ؛ dnode node1 = new dnode ("node1") ؛ dnode node2 = new dnode ("node2") ؛ dnode node3 = new dnode ("node3") ؛ dnode node4 = new dnode ("node4") ؛ dnode node5 = new dnode ("node5") ؛ dnode node6 = new dnode ("أدخل موضع محدد") ؛ dcll.insertposnode (10 ، node1) ؛ dcll.insertposnode (10 ، node2) ؛ dcll.insertposnode (8 ، node3) ؛ dcll.insertposnode (88 ، node4) ؛ dcll.insertposnode (8 ، node5) ؛ // dcll.insertnode (node1) ؛ // dcll.insertnode (node2) ؛ // dcll.insertnode (node3) ؛ // dcll.insertnode (node4) ؛ // dcll.insertnode (node5) ؛ System.out.println ("****************************** إخراج قائمة مرتبطة ******************************* dcll.printlink () ؛ system.out.println ("************************************** int pos = 2 ؛ System.out.println ("الحصول على بيانات موضع"+pos+"للقائمة المرتبطة:"+dcll.getnode (pos ، null)) ؛ system.out.println ("******************************** INSERT NODE في الموقف المحدد للقائمة المرتبطة ********************************") ؛ int pos1 = dcll.getSize ()+1 ؛ System.out.println ("إدراج البيانات في"+pos1+"العقد:") ؛ dcll.insertposnode (pos1 ، node6) ؛ dcll.printlink () ؛ System.out.println ("************************ حذف العقدة المحددة للموقع المحدد للقائمة المرتبطة ********************************") ؛ int pos2 = 7 ؛ system.out.println ("delete"+pos2+"العقد:") ؛ dcll.deletenode (pos2) ؛ dcll.printlink () ؛ System.out.println ("*****************************************") ؛ int pos3 = 3 ؛ System.out.println ("تعديل العقد"+pos3+":") ؛ الخريطة <string ، Object> map = new HashMap <> () ؛ map.put ("البيانات" ، "هذا اختبار") ؛ dcll.updatenode (pos3 ، map) ؛ dcll.printlink () ؛ }}شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!