บทนำ: ในชีวิตประจำวันผู้คนมักใช้รายการ ตัวอย่างเช่นเมื่อบางครั้งเราต้องไปช็อปปิ้งเพื่อซื้อทุกสิ่งที่เราต้องการซื้อก่อนที่เราจะไปซึ่งเป็นรายการของสิ่งที่เราต้องใช้ หรือเมื่อเราอยู่ในโรงเรียนเมื่อเรายังเด็กหลังจากการสอบแต่ละครั้งโรงเรียนจะแสดงรายการการจัดอันดับและการถอดเสียงของนักเรียนสิบอันดับแรกในการสอบนี้ ฯลฯ นี่คือรายการทั้งหมดของรายการ นอกจากนี้เรายังใช้รายการในคอมพิวเตอร์ของเราดังนั้นรายการที่เหมาะสมสำหรับการใช้งานอยู่ที่ไหน? มันไม่เหมาะสำหรับการใช้งานที่ไหน?
เหมาะสำหรับการใช้งาน: เมื่อมีองค์ประกอบไม่มากนักในรายการคุณสามารถใช้รายการได้เนื่องจากประสิทธิภาพสูงมากเมื่อค้นหาหรือเรียงลำดับองค์ประกอบในรายการ ในทางตรงกันข้ามหากมีองค์ประกอบหลายอย่างในรายการมันไม่เหมาะสำหรับการใช้รายการ
1: คำจำกัดความประเภทข้อมูลนามธรรมของรายการ
ในการออกแบบประเภทข้อมูลนามธรรมของรายการเราจำเป็นต้องให้คำจำกัดความของรายการรวมถึงคุณลักษณะที่ควรมีรายการควรดำเนินการในรายการ ฯลฯ ฯลฯ
รายการเป็นชุดข้อมูลที่สั่งซื้อ รายการข้อมูลในแต่ละรายการเรียกว่าองค์ประกอบ ใน JavaScript องค์ประกอบในรายการอาจเป็นประเภทข้อมูลใด ๆ ไม่มีข้อตกลงก่อนหน้านี้เกี่ยวกับจำนวนองค์ประกอบที่สามารถบันทึกไว้ในรายการ อย่างไรก็ตามจำนวนองค์ประกอบถูก จำกัด โดยหน่วยความจำโปรแกรมเมื่อใช้งานจริง
ตอนนี้เราต้องการออกแบบรายการแล้วเราสามารถคิดถึงการใช้รายการ พวกเขาควรมีคุณลักษณะและวิธีการใดบ้าง แน่นอนว่าการออกแบบของฉันด้านล่างได้รับการออกแบบตามการสาธิตในหนังสือ "โครงสร้างข้อมูล JavaScript และอัลกอริทึม" ดังนั้นเราสามารถเรียนรู้วิธีการออกแบบคลาสนามธรรมของเราเองเป็นข้อมูลอ้างอิงเมื่อเราเขียนโปรแกรมในอนาคต สิ่งที่สำคัญที่สุดที่เราเรียนรู้เกี่ยวกับการสาธิตในหนังสือคือการเรียนรู้แนวคิดการออกแบบและวิธีการเขียนโค้ด พวกเขามีคุณลักษณะดังต่อไปนี้
1. listsize (คุณสมบัติ): ใช้ตัวแปร listsize เพื่อบันทึกจำนวนองค์ประกอบในรายการ
2. POS (คุณสมบัติ): ตำแหน่งปัจจุบันของรายการดัชนีขององค์ประกอบ
3. Dataastore (คุณสมบัติ): เริ่มต้นอาร์เรย์ที่ว่างเปล่าเพื่อบันทึกจำนวนองค์ประกอบ หากเราต้องการรับองค์ประกอบในรายการเฉพาะเราสามารถใช้แอตทริบิวต์ POS ด้านบน เช่น DataStore [POS];
ทุกวิธี; รายการต่อไปนี้จะได้รับการอธิบายและจะไม่ถูกแนะนำทีละรายการ
สอง: วิธีการใช้คลาสรายการ
จากประเภทข้อมูลนามธรรมที่กำหนดไว้ข้างต้นเราสามารถใช้คลาสรายการต่อไปนี้ดังนี้ผ่านรูปแบบตัวสร้าง + ต้นแบบ
การคัดลอกรหัสมีดังนี้:
รายการฟังก์ชัน () {
// จำนวนองค์ประกอบในรายการ
this.listsize = 0;
// ตำแหน่งปัจจุบันของรายการคืออะไร
this.pos = 0;
// เริ่มต้นอาร์เรย์ที่ว่างเปล่าเพื่อบันทึกองค์ประกอบรายการ
this.datastore = [];
-
list.prototype = {
// เพิ่มองค์ประกอบในตอนท้ายของรายการ
ผนวก: ฟังก์ชั่น (องค์ประกอบ) {
var self = this;
self.datastore [this.listsize ++] = องค์ประกอบ;
-
// ลบองค์ประกอบออกจากรายการ
ลบ: ฟังก์ชัน (องค์ประกอบ) {
var self = this;
var curindex = self.find (องค์ประกอบ);
if (curindex> -1) {
self.datastore.splice (curindex, 1);
-self.listsize;
กลับมาจริง;
-
กลับเท็จ;
-
// ค้นหาองค์ประกอบในรายการเพื่อส่งคืนดัชนี
ค้นหา: ฟังก์ชั่น (องค์ประกอบ) {
var self = this;
สำหรับ (var i = 0, datalen = self.datastore.length; i <datalen; i ++) {
if (self.datastore [i] == องค์ประกอบ) {
กลับฉัน;
-
-
กลับ -1;
-
// ส่งคืนจำนวนองค์ประกอบในรายการ
ความยาว: ฟังก์ชัน () {
ส่งคืนสิ่งนี้
-
// แสดงองค์ประกอบในรายการ
ToString: function () {
คืนสิ่งนี้ datastore;
-
-
* แทรกองค์ประกอบหลังจากองค์ประกอบที่ระบุ
* องค์ประกอบปัจจุบันองค์ประกอบปัจจุบัน
* @param elementafter แทรกองค์ประกอบปัจจุบันที่อยู่เบื้องหลังองค์ประกอบนี้
-
แทรก: ฟังก์ชั่น (องค์ประกอบ, elementAfter) {
var self = this;
var insertPos = self.find (elementAfter);
if (insertPos> -1) {
self.datastore.splice (insertpos+1,0, องค์ประกอบ);
++ self.listsize;
กลับมาจริง;
-
กลับเท็จ;
-
// ล้างองค์ประกอบทั้งหมดในรายการ
ล้าง: ฟังก์ชั่น () {
ลบสิ่งนี้ datastore;
this.datastore = [];
this.listsize = this.pos = 0;
-
// พิจารณาว่าองค์ประกอบที่กำหนดอยู่ในรายการ
มี: ฟังก์ชัน (องค์ประกอบ) {
var self = this;
สำหรับ (var i = 0, ilen = self.datastore.length; i <ilen; i ++) {
if (self.datastore [i] == องค์ประกอบ) {
กลับมาจริง;
-
-
กลับเท็จ;
-
// ย้ายองค์ประกอบปัจจุบันในรายการไปยังตำแหน่งแรก
ด้านหน้า: ฟังก์ชั่น () {
this.pos = 0;
-
// ย้ายองค์ประกอบปัจจุบันในรายการไปยังตำแหน่งสุดท้าย
สิ้นสุด: ฟังก์ชัน () {
this.pos = this.listize - 1;
-
// ย้ายตำแหน่งปัจจุบันทีละหนึ่ง
ก่อนหน้า: ฟังก์ชั่น () {
if (this.pos> 0) {
-this.pos;
-
-
// ย้ายตำแหน่งปัจจุบันทีละหนึ่ง
ถัดไป: function () {
if (this.pos <this.listisiz - 1) {
++ this.pos;
-
-
// กลับไปที่ตำแหน่งปัจจุบันของรายการ
curpos: function () {
ส่งคืนสิ่งนี้ pos;
-
// ย้ายตำแหน่งปัจจุบันไปยังตำแหน่งที่ระบุ
Moveto: function (n) {
this.pos = n;
-
// ส่งคืนองค์ประกอบที่ตำแหน่งปัจจุบัน
GetElement: function () {
ส่งคืนสิ่งนี้ datastore [this.pos];
-
-
ดังที่กล่าวมาข้างต้น: ใช้คลาสรายการรวมถึงวิธีการมากมายดังกล่าวข้างต้น แน่นอนว่าเรายังสามารถขยายวิธีการอื่น ๆ เพื่อเพิ่มประสิทธิภาพการใช้งานของคลาสรายการ สิ่งที่สำคัญที่สุดคือการเรียนรู้วิธีการเข้ารหัสดังกล่าวข้างต้น