การดำเนินการรายการ Java Linked: รายการลิงค์วงกลม
ตัวอย่างการวิเคราะห์หลัก:
1. รายการซ้ำรายการที่เชื่อมโยงเดียว
2. รายการซ้ำสองรายการที่เชื่อมโยงกัน
ในหมู่พวกเขาโหนดรายการที่เชื่อมโยงเดียวและคลาสโหนดรายการเชื่อมโยงสองรายการและอินเตอร์เฟส icommoperate <t> สอดคล้องกับบทความก่อนหน้าและจะไม่กล่าวถึงที่นี่ การอ้างอิง: การดำเนินการรายการ Java Linked: รายการลิงค์เดียวและรายการเชื่อมโยงสองครั้ง //www.vevb.com/article/95113.htm
1. รายการซ้ำรายการที่เชื่อมโยงเดียว
Package LinkListTest; นำเข้า java.util.hashmap; นำเข้า java.util.map; SingleCycleLinkList ระดับสาธารณะ // ตัวชี้ส่วนหัวสาธารณะไม่เปลี่ยนแปลงหลังจากประกาศขนาด INT ส่วนตัว = 0; public int getsize () {return this.size; } / * * แทรกรายการที่เชื่อมโยงทุกครั้งที่แทรกไปยังจุดสิ้นสุดมาตรฐานสำหรับการพิจารณาว่าปลายจะชี้ไปที่หัว * * / @Override บูลีน InsertNode (Snode Node) ถัดไป initlinklist (); // เริ่มต้นรายการที่เชื่อมโยงถ้า (this.size == 0) {// รายการที่เชื่อมโยงว่างเปล่า this.head.setNextNode (โหนด); node.setNextNode (this.head); } else {snode current = this.head; ในขณะที่ (current.getNextNode ()! = this.head) {// ค้นหาโหนดปลายทาง current = current.getNextNode (); } current.setNextNode (โหนด); node.setNextNode (this.head); // ติดตามรายการที่เชื่อมโยงไม่ดีโหนดหางชี้ไปที่หัว} this.size ++; ธง = จริง; ธงกลับ; } / * * แทรกตำแหน่งที่ระบุของรายการที่เชื่อมโยงเริ่มต้นจาก 1 และ POS มากกว่าขนาดให้แทรกที่ส่วนท้ายของรายการที่เชื่อมโยง * * / @Override public Boolean InsertPosNode (int pos, โหนด snode) {boolean flag = true; snode current = this.head.getNextNode (); initLinkList (); // เริ่มต้นรายการที่เชื่อมโยงถ้า (this.size == 0) {// รายการที่เชื่อมโยงนั้นว่างเปล่า this.head.setNextNode (โหนด); node.setNextNode (this.head); // ทำตามรายการที่เชื่อมโยงไม่ดีโหนดหางชี้ไปที่หัวนี้ขนาด ++; } อื่นถ้า (this.size <pos) {// ตำแหน่ง POS มากกว่าความยาวของรายการที่เชื่อมโยง, แทรก end 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 (); // โหนดปัจจุบันถูกย้ายไปข้างหลังค้นหา ++; if (ค้นหา <pos-1 && currentNode! = this.head) {// โหนดยังไม่เสร็จสิ้นการค้นหาโหนดและโหนดจะถูกย้ายย้อนกลับ current = current.getNextNode (); }} // system.out.println (prenode); // system.out.println (currentNode); // 2. แทรกโหนด prenode.setNextNode (โหนด); node.setNextNode (currentNode); this.size ++; } else {system.out.println ("ข้อผิดพลาดข้อมูลตำแหน่ง"); ธง = เท็จ; } return flag; } โมฆะส่วนตัว initLinkList () {ถ้า (ขนาด == 0) {this.head.setNextNode (this.head); }} / * * ระบุโหนด POS ของรายการที่เชื่อมโยงและลบโหนดที่เกี่ยวข้อง วิธี: ค้นหาโหนดด้านหน้าและด้านหลังเพื่อลบลบและตัวห้อยเริ่มต้นจาก 1 * */ @Override บูลีนสาธารณะ deletenode (int pos) {flag บูลีน = false; snode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("ข้อผิดพลาดข้อมูลตำแหน่งหรือไม่มีข้อมูลในรายการที่เชื่อมโยง"); } else {// 1. ค้นหาโหนดด้านหน้าและด้านหลังเพื่อลบ int find = 0; snode prenode = this.head; // โหนดด้านหน้า snode nextNode = current.getNextNode (); // โหนดด้านหลังในขณะที่ (ค้นหา <pos-1 && nextNode! = this.head) {prenode = current; // โหนดด้านหน้าจะถูกย้ายกลับ nextNode = nextNode.getNextNode (); // โหนดด้านหลังถูกย้ายกลับ find ++; if (ค้นหา <pos-1 && nextNode! = this.head) {// โหนดด้านหน้ายังไม่เสร็จสิ้น "โหนดด้านหน้า" ด้านหลังจะถูกย้ายกลับ current = current.getNextNode (); }} // system.out.println (prenode); // system.out.println (nextNode); // 2. ลบโหนด prenode.setNextNode (NextNode); System.gc (); // รีไซเคิลและลบโหนดนี้ขนาด-; ธง = จริง; } return flag; } / * * ระบุโหนด POS ของรายการที่เชื่อมโยงแก้ไขโหนดที่สอดคล้องกันและตัวห้อยเริ่มต้นจาก 1 * * / @Override บูลีนบูลีน updatenode (int pos, แผนที่ <สตริง, วัตถุ> แผนที่) {boolean flag = false; snode node = getNode (pos, map); // รับโหนดที่ pos ที่สอดคล้องกันถ้า (node! = null) {string data = (string) map.get ("data"); node.setData (ข้อมูล); ธง = จริง; } return flag; } / * * ค้นหาโหนด POS ของรายการที่เชื่อมโยงที่ระบุและตัวห้อยเริ่มต้นจาก 1 * * / @Override สาธารณะ snode getNode (int pos, แผนที่ <สตริง, วัตถุ> แผนที่) {snode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("ข้อมูลตำแหน่งไม่ถูกต้องหรือรายการที่เชื่อมโยงไม่มีอยู่"); คืนค่า null; } int find = 0; ในขณะที่ (ค้นหา <pos-1 && current! = this.head) {current = current.getNextNode (); ค้นหา ++; } return current; } / * * พิมพ์รายการที่เชื่อมโยง * * / @Override โมฆะสาธารณะ printLink () {int length = this.size; if (length == 0) {system.out.println ("รายการที่เชื่อมโยงว่างเปล่า!"); กลับ ; } snode current = this.head.getNextNode (); System.out.println ("จำนวนทั้งหมดของโหนด:" + length + "one"); int find = 0; ในขณะที่ (ปัจจุบัน! = this.head) {system.out.println ("th" + (++ find) + "โหนด:" + ปัจจุบัน); current = current.getNextNode (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {singlecyclelinklist scll = ใหม่ singlecyclelinklist (); snode node1 = snode ใหม่ ("node1"); snode node2 = snode ใหม่ ("node2"); snode node3 = snode ใหม่ ("node3"); snode node4 = snode ใหม่ ("node4"); snode node5 = snode ใหม่ ("node5"); snode node6 = snode ใหม่ ("แทรกตำแหน่งที่ระบุ"); // scll.insertPosnode (scll.getSize ()+1, node1); // scll.insertPosnode (scll.getSize ()+1, node2); // scll.insertposnode 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 ("ลบ"+pos2+"โหนด:"); scll.deletenode (pos2); scll.printlink (); System.out.println ("********************************* การแก้ไขโหนดตำแหน่งที่ระบุของรายการที่เชื่อมโยง *******************************"); int pos3 = 3; System.out.println ("แก้ไข"+pos3+"โหนด:"); แผนที่ <string, Object> map = new hashmap <> (); map.put ("data", "นี่คือการทดสอบ"); scll.updatenode (pos3, แผนที่); scll.printlink (); -2. รายการซ้ำสองรายการที่เชื่อมโยงกัน
Package LinkListTest; นำเข้า java.util.hashmap; นำเข้า java.util.map; คลาสสาธารณะ doublecyclelinklist ใช้ icommoperate <Dnode> {private dnode head = new dnode ("head"); // ตัวชี้ส่วนหัวสาธารณะไม่เปลี่ยนแปลงหลังจากประกาศขนาด INT ส่วนตัว = 0; // บันทึกจำนวนโหนดของรายการที่เชื่อมโยงสาธารณะ int getsize () {return this.size; } / * * แทรกรายการที่เชื่อมโยงทุกครั้งที่แทรกไปยังจุดสิ้นสุดมาตรฐานสำหรับการพิจารณาว่าปลายจะชี้ไปที่หัว * * / @Override บูลีน InsertNode (โหนด Dnode) {boolean flag = false; initlinklist (); // เริ่มต้นรายการที่เชื่อมโยง dnode current = this.head; if (this.size == 0) {// รายการที่เชื่อมโยงว่างเปล่า this.head.setNextNode (โหนด); node.setPriornode (this.head); node.setNextNode (this.head); } else {// โหนดในรายการที่เชื่อมโยงในขณะที่ (current.getNextNode ()! = this.head) {// ค้นหาโหนดสิ้นสุด current = current.getNextNode (); } current.setNextNode (โหนด); Node.SetPriornode (ปัจจุบัน); node.setNextNode (this.head); // เปลี่ยนเส้นทางรายการที่เชื่อมโยงไม่ดีโหนดหางชี้ไปที่หัว} this.size ++; ธง = จริง; ธงกลับ; } / * * แทรกตำแหน่งที่ระบุของรายการที่เชื่อมโยงเริ่มต้นจาก 1 และ POS มากกว่าขนาดให้แทรกส่วนท้ายของรายการที่เชื่อมโยง * * / @Override public boolean insertPosNode (int pos, โหนด dnode) {boolean flag = true; initlinklist (); // เริ่มต้นรายการที่เชื่อมโยง dnode ปัจจุบัน = this.head.getNextNode (); if (this.size == 0) {// รายการที่เชื่อมโยงนั้นว่างเปล่า this.head.setNextNode (โหนด); node.setPriornode (this.head); node.setNextNode (this.head); this.size ++; } อื่นถ้า (pos> this.size) {// ตำแหน่ง POS มากกว่าความยาวของรายการที่เชื่อมโยง, แทรก End InsertNode (โหนด); } else if (pos> 0 && pos <= this.size) {// โหนดในรายการที่เชื่อมโยง // 1 ค้นหาโหนด POS ที่จะแทรกให้แทรกตำแหน่งโหนด POS ปัจจุบันตำแหน่ง int find = 0; ในขณะที่ (ค้นหา <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode (); ค้นหา ++; } // 2. แทรกโหนดถ้า (current.getNextNode () == this.head) {// node node tail node.SetPriorNode (ปัจจุบัน); node.setNextNode (this.head); current.setNextNode (โหนด); } อื่นถ้า (current.getNextNode ()! = this.head) {// โหนดระดับกลาง node.setPriorNode (current.getPriorNode ()); node.setNextNode (ปัจจุบัน); current.getPriorNode (). setNextNode (โหนด); current.setPriornode (โหนด); } this.size ++; } else {system.out.println ("ข้อผิดพลาดข้อมูลตำแหน่ง"); ธง = เท็จ; } return flag; } โมฆะส่วนตัว initLinkList () {ถ้า (ขนาด == 0) {this.head.setNextNode (this.head); this.head.setpriornode (this.head); }} / * * ระบุโหนด POS ของรายการที่เชื่อมโยงและลบโหนดที่เกี่ยวข้อง วิธี: ค้นหาการลบโหนดด้านหน้าและด้านหลังของโหนดที่จะลบและตัวห้อยเริ่มต้นจาก 1 * */ @Override บูลีนสาธารณะ 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. ค้นหาตำแหน่ง pos node ที่จะลบ int find = 0; ในขณะที่ (ค้นหา <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode (); ค้นหา ++; } // 2. ลบโหนดถ้า (current.getNextNode () == this.head) {// tail node current.getPriorNode (). setNextNode (this.head); } อื่นถ้า (current.getNextNode ()! = this.head) {// โหนดกลาง current.getPriorNode (). setNextNode (current.getNextNode ()); current.getNextNode (). setPriorNode (current.getPriorNode ()); } system.gc (); // รีไซเคิลและลบโหนดนี้ขนาด-; ธง = จริง; } return flag; } / * * ระบุโหนด POS ของรายการที่เชื่อมโยงแก้ไขโหนดที่สอดคล้องกันและตัวห้อยเริ่มต้นจาก 1 * * / @Override บูลีนบูลีน updatenode (int pos, แผนที่ <สตริง, วัตถุ> แผนที่) {boolean flag = false; dnode node = getNode (pos, map); if (node! = null) {string data = (string) map.get ("data"); node.setData (ข้อมูล); ธง = จริง; } return flag; } / * * ค้นหาโหนด POS ของรายการที่เชื่อมโยงที่ระบุและตัวห้อยเริ่มต้นจาก 1 * * / @Override สาธารณะ dnode getNode (int pos, แผนที่ <สตริง, วัตถุ> แผนที่) {dnode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("ข้อมูลตำแหน่งไม่ถูกต้องหรือรายการที่เชื่อมโยงไม่มีอยู่"); คืนค่า null; } int find = 0; ในขณะที่ (ค้นหา <pos-1 && current! = this.head) {current = current.getNextNode (); ค้นหา ++; } return current; } / * * พิมพ์รายการที่เชื่อมโยง * * / @Override โมฆะสาธารณะ printLink () {int length = this.size; if (length == 0) {system.out.println ("รายการที่เชื่อมโยงว่างเปล่า!"); กลับ ; } dnode current = this.head.getNextNode (); int find = 0; System.out.println ("จำนวนทั้งหมดของโหนด:" + length + "one"); ในขณะที่ (ปัจจุบัน! = this.head) {system.out.println ("th" + (++ find) + "หนึ่งโหนด:" + ปัจจุบัน); current = current.getNextNode (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {doubleCycleLinkList dcll = ใหม่ doubleCycleLinkList (); 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 ("******************************** แทรกโหนดลงในตำแหน่งที่ระบุของรายการที่เชื่อมโยง **********************************"); int pos1 = dcll.getSize ()+1; System.out.println ("แทรกข้อมูลลงใน"+pos1+"โหนด:"); dcll.insertPosNode (pos1, node6); dcll.printlink (); System.out.println ("************************ การลบตำแหน่งที่ระบุโหนดของรายการที่เชื่อมโยง ***************************************"); int pos2 = 7; System.out.println ("ลบ"+pos2+"โหนด:"); dcll.deletenode (pos2); dcll.printlink (); System.out.println ("***********************************"); int pos3 = 3; System.out.println ("แก้ไข"+pos3+"โหนด:"); แผนที่ <string, Object> map = new hashmap <> (); map.put ("data", "นี่คือการทดสอบ"); dcll.updatenode (pos3, แผนที่); dcll.printlink (); -ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!