ฉันถูกถามเกี่ยวกับรายการที่เชื่อมโยงเมื่อเร็ว ๆ นี้และเพื่อนคนหนึ่งพูดเมื่อพูดถึง Java กับฉัน พูดตามตรงฉันได้เรียนรู้น้อยมากในปีที่ผ่านมาฉันได้เรียนรู้การเขียนโปรแกรม ฉันเรียนรู้ Java และ C# ในภาษาและฉันได้เรียนรู้เล็กน้อยเกี่ยวกับ HTML+CSS+JavaScript เกี่ยวกับเว็บ เพราะฉันชอบมันฉันจริงจังมากขึ้นเมื่อเรียนรู้ winform และฉันได้ศึกษาการดำเนินการฐานข้อมูลด้วยตัวเอง แต่ฉันไม่เคยศึกษาหรือศึกษารายการที่เชื่อมโยง นอกจากนี้ฉันได้อ่าน WPF เมื่อเร็ว ๆ นี้และหลักสูตรได้มาถึง JSP ซึ่งค่อนข้างแน่น
แต่ฉันยังคงใช้เวลาหนึ่งคืนครึ่งวันเพื่อดูรายการที่เชื่อมโยงทางเดียว และฉันพยายามเขียนตัวอย่างโดยใช้ Java เพื่อนที่ไม่ได้สัมผัสกับรายการที่เชื่อมโยงสามารถใช้เป็นข้อมูลอ้างอิงได้ ฉันหวังว่าคุณจะให้คำแนะนำที่มีค่ามากขึ้น
ก่อนอื่นให้อธิบายว่ารายการที่เชื่อมโยงคืออะไร เท่าที่ฉันรู้รายการที่เชื่อมโยงคือโครงสร้างข้อมูลซึ่งอยู่ในระดับเดียวกับอาร์เรย์ ตัวอย่างเช่นหลักการดำเนินการของ ArrayList ที่เราใช้ใน Java คืออาร์เรย์ หลักการการใช้งานของ LinkedList เป็นรายการเชื่อมโยง ครูของฉันบอกว่ารายการที่เชื่อมโยงนั้นไม่มีประสิทธิภาพเมื่อหมุนเวียน แต่มีข้อได้เปรียบที่ชัดเจนเมื่อแทรกและลบ จากนั้นเขามีประสบการณ์การเขียนโปรแกรมมานานกว่าสิบปีฉันเชื่อว่ามัน แต่ฉันไม่รู้ว่าเขากำลังพูดถึงรายการที่เชื่อมโยงสองทางหรือไม่ เราอยู่ที่นี่เพื่อทำความเข้าใจรายการที่เชื่อมโยงทางเดียวเท่านั้น
รายการที่เชื่อมโยง (ห่วงโซ่ที่กล่าวถึงในบทความนี้เป็นรายการที่เชื่อมโยงทิศทางเดียวทั้งหมดและต่อไปนี้ทั้งหมดเรียกว่ารายการที่เชื่อมโยงทิศทางเดียว) จริง ๆ แล้วประกอบด้วยโหนด (โหนด) และรายการที่เชื่อมโยงมีจำนวนโหนดที่ไม่แน่นอน มีเพียงหนึ่งโหนดหัว (หัว) ที่เปิดเผยออกไปด้านนอกและการดำเนินการทั้งหมดของเราในรายการที่เชื่อมโยงจะดำเนินการโดยตรงหรือโดยอ้อมผ่านโหนดหัว
โหนดประกอบด้วยวัตถุที่ต้องจัดเก็บและอ้างอิงถึงโหนดถัดไป นั่นคือโหนดมีสมาชิกสองคน: วัตถุที่เก็บไว้อ้างอิงถึงโหนดถัดไป
คุณอาจไม่เข้าใจสิ่งนี้เป็นอย่างดีและมันอาจจะง่ายกว่าที่คุณจะเข้าใจถ้าฉันโพสต์ภาพ
รหัสคีย์สำหรับการใช้งานพื้นฐานของรายการที่เชื่อมโยง Java Single มีดังนี้:
แพ็คเกจ com.tyxh.link; // โหนดระดับระดับโหนดโหนด {โหนดป้องกันถัดไป; // ฟิลด์ตัวชี้ป้องกันข้อมูล int; // ฟิลด์ข้อมูลโหนดสาธารณะ (ข้อมูล int) {สิ่งนี้ data = data; } // แสดงโมฆะสาธารณะโหนดนี้แสดง () {ระบบ out.print (data + ""); }} แพ็คเกจ com.tyxh.link; // รายการที่เชื่อมโยงเดียวในชั้นเรียนสาธารณะ LinkList {โหนดสาธารณะก่อน; // กำหนดส่วนหัวส่วนตัว int pos = 0; // ตำแหน่งของโหนดสาธารณะ linklist () {สิ่งนี้ ครั้งแรก = null; } // แทรกโหนดหัวโมฆะโมฆะ addFirstNode (ข้อมูล int) {โหนดโหนด = โหนดใหม่ (ข้อมูล); โหนด ถัดไป = ก่อน; ครั้งแรก = โหนด; } // ลบโหนดหัวและส่งคืนโหนดหัวโหนดสาธารณะ DELETEFIRSTNODE () {โหนด tempNode = ก่อน; First = TempNode ต่อไป; ส่งคืน tempnode; } // แทรกโหนดที่ตำแหน่งใด ๆ และแทรกโมฆะสาธารณะหลังจากเพิ่มดัชนี (ดัชนี int, ข้อมูล int) {โหนดโหนด = โหนดใหม่ (ข้อมูล); โหนดกระแส = ครั้งแรก; โหนดก่อนหน้า = ก่อน; ในขณะที่ (pos! = ดัชนี) {previous = current; ปัจจุบัน = ปัจจุบัน ต่อไป; POS ++; } โหนด ถัดไป = ปัจจุบัน; ก่อนหน้า. ถัดไป = โหนด; pos = 0; } // ลบโหนดที่ตำแหน่งใด ๆ โหนดสาธารณะ deleetebypos (ดัชนี int) {โหนด current = first; โหนดก่อนหน้า = ก่อน; ในขณะที่ (pos! = ดัชนี) {pos ++; ก่อนหน้า = ปัจจุบัน; ปัจจุบัน = ปัจจุบัน ต่อไป; } if (current == ก่อน) {first = ก่อน ต่อไป; } else {pos = 0; ก่อนหน้า. ถัดไป = ปัจจุบัน ต่อไป; } return current; } // ลบโหนดตามข้อมูลของโหนด (ลบเพียงหนึ่งโหนดแรก) โหนดสาธารณะ deleteByData (ข้อมูล int) {โหนด current = ก่อน; โหนดก่อนหน้า = ก่อน; // จำโหนดก่อนหน้าในขณะที่ (ปัจจุบันข้อมูล! = ข้อมูล) {ถ้า (ปัจจุบัน. next == null) {return null; } previous = current; ปัจจุบัน = ปัจจุบัน ต่อไป; } if (current == ก่อน) {first = ก่อน ต่อไป; } else {ก่อนหน้า ถัดไป = ปัจจุบัน ต่อไป; } return current; } // แสดงข้อมูลโหนดทั้งหมดโมฆะสาธารณะ displayallNodes () {โหนด current = แรก; ในขณะที่ (ปัจจุบัน! = null) {current.display (); ปัจจุบัน = ปัจจุบัน ต่อไป; } ระบบ. out.println (); } // ค้นหาข้อมูลโหนดขึ้นอยู่กับตำแหน่งที่ตั้งโหนดสาธารณะ findByPos (ดัชนี int) {โหนด current = ครั้งแรก; if (pos! = index) {current = current ต่อไป; POS ++; } return current; } // ค้นหาข้อมูลโหนดขึ้นอยู่กับข้อมูลโหนดสาธารณะ FindByData (ข้อมูล int) {โหนด current = ครั้งแรก; ในขณะที่ (ปัจจุบัน. data! = data) {ถ้า (current. next == null) ส่งคืน null; ปัจจุบัน = ปัจจุบัน ต่อไป; } return current; }} แพ็คเกจ com.tyxh.link; // ชั้นเรียนระดับการทดสอบระดับสาธารณะ testLinkList {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {linkList linkList = new LinkList (); 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 (); // โหนดโหนด = linkList.deleteFirstNode (); // system.out.println ("โหนด:" + node.data); // linklist.displayallnodes (); // node = linkList.deleteByPos (2); // system.out.println ("โหนด:" + node.data); // linklist.displayallnodes (); // linklist.deletefirstnode (); Node Node = LinkList.deleteByData (19); // โหนดโหนด = linkList.deleteByPos (0); ระบบ. out.println ("Node:" + Node. data); linkList.displayallnodes (); Node Node1 = LinkList.FindByPos (0); ระบบ. out.println ("node1:" + node1. ข้อมูล); Node Node2 = LinkList.findbyData (22); ระบบ. out.println ("node2:" + node2. ข้อมูล); -ข้างต้นคือการใช้งานการดำเนินงานพื้นฐานของรายการที่เชื่อมโยงกับ Java เดี่ยวที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!