ลำโพง 1: ขอให้ วิธีนี้ลอง ดังนั้นลองมาดูที่สิ่งที่เรา โหนด struct จะมีลักษณะเช่น ที่นี่เราจะเห็นว่าเรากำลังจะมี บูล Word และดาวโหนด Struct ตัวอักษรเด็กวงเล็บ ดังนั้นสิ่งแรกที่คุณอาจจะสงสัยว่า ทำไมกัญชาตัวอักษรที่กำหนดไว้เป็น 27? ดีจำไว้ว่าเรากำลังจะต้อง จะได้รับการจัดการวรรคดังนั้น ที่เป็นไปได้ค่อนข้างพิเศษ กรณีตลอดโปรแกรมนี้ ตกลงตอนนี้จำได้ว่า Trie ใช้งานได้จริง สมมติว่าเรากำลังทำดัชนีแมวคำว่า แล้วจากรากของ Trie ของเรา เราจะมองไปที่เด็ก อาร์เรย์และเรากำลังจะไปดูที่ ดัชนีที่สอดคล้องกับตัวอักษร C. ดังนั้นที่จะเป็นดัชนีสอง ได้รับเพื่อให้ที่จะทำให้เรา โหนดใหม่แล้วเราจะ ทำงานจากที่โหนดที่ เพื่อให้โหนดที่เราอีกครั้ง จะไปดูที่แถวเด็ก และเรากำลังจะไปดูที่ดัชนีศูนย์ ให้ตรงกับในแมว ดังนั้นแล้วเราจะไปที่โหนดที่ และได้รับโหนดที่เราจะ การมองไปที่ดัชนีที่สอดคล้อง ทีและย้ายไปยังโหนดที่ ในที่สุดเราได้ดูสมบูรณ์ แมวผ่านคำพูดของเราและตอนนี้ Bool คำที่ควรจะระบุว่า คำที่กำหนดนี้เป็นจริงคำว่า ดังนั้นเราจึงไม่จำเป็นต้องมีเหตุผลว่ากรณีพิเศษหรือไม่ ดีสิ่งที่ถ้าภัยพิบัติคำ อยู่ในพจนานุกรมของเรา แต่ แมวคำไม่ได้คืออะไร ดังนั้นในการมองหาเพื่อดูว่าแมวของคำว่า ในพจนานุกรมของเราที่เรากำลังจะ ประสบความสำเร็จมองผ่านดัชนี C--T และเข้าถึงโหนด แต่ที่ เพียงเพราะภัยพิบัติที่เกิดขึ้นกับ สร้างโหนดในทางจาก C-A-T ทั้งหมด วิธีที่จะสิ้นสุดของคำว่า ดังนั้น Bool Word จะใช้ระบุว่า ตำแหน่งนี้โดยเฉพาะอย่างยิ่งจริง ระบุคำ ทั้งหมดขวาดังนั้นตอนนี้ที่เรารู้ว่าสิ่งที่ Trie จะไปดูเช่นให้ดู ฟังก์ชั่นที่โหลด ดังนั้นโหลดจะกลับ Bool เพื่อว่าเราจะประสบความสำเร็จหรือ พจนานุกรมโหลดไม่ประสบความสำเร็จและ นี้เป็นไปได้ในพจนานุกรม ที่เราต้องการโหลด ดังนั้นสิ่งแรกที่เรากำลังจะทำคือเปิด ขึ้นพจนานุกรมสำหรับการอ่านที่ เราจะต้องทำให้แน่ใจว่าเราไม่ได้ล้มเหลว ดังนั้นถ้าพจนานุกรมไม่ได้ เปิดประสบความสำเร็จก็จะกลับ ไม่มีในกรณีที่เรากำลังจะ กลับเท็จ แต่สมมติว่ามันประสบความสำเร็จ เปิดแล้วเราจริงสามารถอ่าน ผ่านพจนานุกรม ดังนั้นสิ่งแรกที่เรากำลังจะ ต้องการที่จะทำคือการที่เรามีนี้ รากตัวแปรทั่วโลก ตอนนี้รากเป็นไปได้ดาวโหนด มันเป็นด้านบนของ Trie ของเราว่าเรา จะวนผ่าน ดังนั้นสิ่งแรกที่เรากำลังจะต้องการที่จะ ไม่ได้รับการจัดสรรหน่วยความจำสำหรับรากของเรา ขอให้สังเกตว่าเรากำลังใช้ calloc ฟังก์ชั่นซึ่งเป็นพื้นเดียวกัน เป็นฟังก์ชั่น Malloc ยกเว้นมัน รับประกันว่าจะให้กลับสิ่งที่เป็น zeroed สมบูรณ์ออก ดังนั้นหากเราใช้ Malloc เราจะต้อง ผ่านทุกตัวชี้ในของเรา โหนดและให้แน่ใจว่า พวกเขากำลัง null ทั้งหมด ดังนั้น calloc จะทำเพื่อเรา ตอนนี้เช่นเดียวกับ Malloc เราต้องทำ ให้แน่ใจว่าการจัดสรรจริง ที่ประสบความสำเร็จ ถ้ากลับมาเป็นโมฆะแล้วเรา ต้องปิดพจนานุกรมของเรา ไฟล์และกลับเท็จ ดังนั้นสมมติว่าการจัดสรรเป็น ประสบความสำเร็จเรากำลังจะใช้โหนด ดาวเคอร์เซอร์เพื่อย้ำ ผ่าน Trie ของเรา ดังนั้นรากของเราไม่เคยไปเปลี่ยน แต่เรากำลังจะใช้เคอร์เซอร์ไป จริงไปจากโหนดไปยังโหนด ขวาทั้งหมดดังนั้นในครั้งนี้สำหรับวงเรา อ่านผ่านแฟ้มพจนานุกรม และเรากำลังใช้ที่ fgetc ดังนั้น fgetc จะคว้าเดียว ตัวอักษรจากไฟล์ เราจะยังคงโลภ ตัวละครในขณะที่เราไม่ถึง สิ้นสุดของไฟล์เพื่อให้มี สองกรณีที่เราต้องการที่จะจัดการกับ แรกถ้าตัวละครไม่ได้ บรรทัดใหม่เพื่อให้เรารู้ว่ามันเป็นใหม่ สายแล้วเรากำลังจะ ย้ายไปยังคำใหม่ แต่สมมติว่ามันไม่ได้เป็นสายใหม่แล้ว ที่นี่เราต้องการที่จะคิดออก ดัชนีที่เรากำลังจะเข้ามาในดัชนี ในอาร์เรย์ที่เด็ก เรามองที่ก่อน ดังนั้นเหมือนที่ผมกล่าวว่าก่อนที่เราต้อง กรณีพิเศษเครื่องหมายวรรคตอน สังเกตเห็นเรากำลังใช้ประกอบ ternary ที่นี่ดังนั้นเราจะไปอ่าน นี้ราวกับว่าตัวละครที่เราอ่านเป็น เครื่องหมายวรรคตอนนั้นเรากำลังจะ การตั้งค่าดัชนีเท่ากับตัวอักษรลบ 1 ซึ่งจะเป็นดัชนี 26 อื่นถ้ามันไม่ได้อัญประกาศเดี่ยว, จากนั้นเราจะกำหนดดัชนี เท่ากับคลบ ดังนั้นอย่าลืมกลับมาจากชุดพีก่อนหน้านี้ คลบเป็นไปให้เรา ตำแหน่งเรียงตามตัวอักษรคดังนั้นหาก คเป็นตัวอักษรนี้จะ ให้เราเป็นศูนย์ดัชนี สำหรับจดหมาย B ก็จะให้ เราดัชนี 1 และอื่น ๆ ดังนั้นนี้จะช่วยให้เราเข้ามาในดัชนี เด็กแถวที่เราต้องการ ตอนนี้ถ้าดัชนีนี้เป็นโมฆะในปัจจุบัน อาร์เรย์เด็กที่หมายความว่า โหนดไม่อยู่ในขณะนี้จาก เส้นทางที่เราจึงต้องจัดสรร โหนดสำหรับเส้นทางที่ นั่นคือสิ่งที่เราทำที่นี่ ดังนั้นเราจะไปอีกครั้งใช้ calloc ฟังก์ชั่นเพื่อให้เราไม่ได้มี ให้เป็นศูนย์ออกทั้งหมดของตัวชี้และเรา อีกครั้งจะต้องตรวจสอบว่า calloc ไม่ได้ล้มเหลว หาก calloc ไม่ล้มเหลวแล้วเราต้อง ขนทุกอย่างที่ปิดของเรา พจนานุกรมและกลับเท็จ ดังนั้นสมมติว่ามันไม่ได้ล้มเหลวแล้ว นี้จะสร้างเด็กใหม่สำหรับเรา และจากนั้นเราจะไปที่เด็ก เคอร์เซอร์ของเราจะย้ำ ลงไปที่เด็ก ตอนนี้ถ้านี้ไม่ว่างที่จะเริ่มต้นด้วย แล้วเคอร์เซอร์ก็สามารถย้ำ ลงไปที่เด็กที่ไม่จริง มีอะไรที่จะจัดสรร นี้เป็นกรณีที่เกิดขึ้นครั้งแรกของเรา การจัดสรรแมวคำและ นั่นหมายความว่าเมื่อเราไปในการจัดสรร ภัยพิบัติที่เราไม่จำเป็นต้องสร้าง โหนดสำหรับ C-A-T อีกครั้ง พวกเขามีอยู่แล้ว ตกลงดังนั้นสิ่งที่เป็นอื่นนี้ นี้เป็นเงื่อนไขที่เป็นค เครื่องหมาย n โดยที่คเป็นบรรทัดใหม่ ซึ่งหมายความว่าเราประสบความสำเร็จ เสร็จสิ้นคำ ตอนนี้สิ่งที่เราต้องการจะทำเมื่อเรา เสร็จคำประสบความสำเร็จ เรากำลังจะใช้ฟิลด์คำนี้ ภายในของโหนด Struct ของเรา เราต้องการที่จะกำหนดว่าให้เป็นจริงเพื่อให้ แสดงให้เห็นว่าโหนดนี้บ่งชี้ว่า คำที่ประสบความสำเร็จที่เกิดขึ้นจริงคำ ตอนนี้การตั้งค่าที่เป็นจริง เราต้องการที่จะตั้งค่าเคอร์เซอร์ของเราไปยังจุด ที่จุดเริ่มต้นของ Trie อีกครั้ง และในที่สุดเพิ่มในพจนานุกรมของเรา ขนาดตั้งแต่เราพบคำอื่น ขวาทั้งหมดดังนั้นเราจะให้ทำ ที่อ่านในตัวละครโดย ตัวละครสร้างโหนดใหม่ใน Trie และคำในแต่ละของเรา พจนานุกรมจนในที่สุดเราก็มาถึงค เท่ากับ EOF ซึ่งในกรณีที่เราแบ่ง ออกจากแฟ้ม ขณะนี้มีสองกรณีที่อยู่ภายใต้ ซึ่งเราอาจจะมีการตี EOF แรกคือถ้ามีข้อผิดพลาด อ่านจากแฟ้มดังนั้นหากมี ข้อผิดพลาดที่เราต้องทำโดยทั่วไป ขนทุกอย่างปิดแฟ้ม กลับเท็จ สมมติว่ามีไม่ได้เป็นข้อผิดพลาดที่ ก็หมายความว่าเราจะตีจุดสิ้นสุดของ แฟ้มในกรณีที่เราปิด ไฟล์และคืนค่าจริงตั้งแต่เรา ประสบความสำเร็จในการโหลดพจนานุกรม Trie เป็นของเรา ขวาดังนั้นตอนนี้ให้ทุก ตรวจสอบตรวจสอบ มองไปที่ฟังก์ชั่นตรวจสอบเราจะเห็น ตรวจสอบที่จะกลับ Bool มันจะกลับจริงถ้าคำนี้ว่ามันเป็น ถูกส่งอยู่ใน Trie ของเรา มันกลับเป็นอย่างอื่นเท็จ ดังนั้นเราจึงมีวิธีการที่จะตรวจสอบว่า คำนี้อยู่ใน Trie ของเราหรือไม่ เรามาดูกันว่าที่นี่เช่นเดียวกับก่อนหน้านี้ ที่เรากำลังจะใช้เคอร์เซอร์เพื่อย้ำ ผ่าน Trie ของเรา ตอนนี้ที่นี่เรากำลังจะย้ำ เหนือคำทั้งหมดของเรา ดังนั้น iterating กว่าคำที่เรามี ผ่านไปเรากำลังจะตรวจสอบ ดัชนีลงในอาร์เรย์ที่เด็ก สอดคล้องกับคำพูดของฉันวงเล็บ ดังนั้นนี้จะมีลักษณะเหมือนกับ ภาระที่ถ้าผมยึดคำเป็น เครื่องหมายวรรคตอนแล้วเราต้องการที่จะใช้ดัชนี ตัวอักษรลบ 1 เพราะเรากำหนด ว่าเป็นที่ที่เรากำลังจะ ในการจัดเก็บ apostrophes อื่นที่เรากำลังจะใช้ ToLower คำฉันวงเล็บ ดังนั้นอย่าลืมคำที่สามารถมีพล มูลค่าและเพื่อให้เรา ต้องการที่จะให้แน่ใจว่าเรากำลังใช้ รุ่นเล็กของสิ่งที่ แล้วลบออกจากตัวพิมพ์เล็กที่ ไปอีกครั้งหนึ่งให้เรา ตำแหน่งเรียงตามตัวอักษร ของตัวละครที่ เพื่อที่จะเป็นดัชนีของเรา เป็นอาร์เรย์เด็ก และตอนนี้ถ้าดัชนีเป็นเด็กที่ อาร์เรย์เป็นโมฆะนั่นหมายความว่าเรา ไม่สามารถดำเนินการต่อ iterating ลง Trie ของเรา หากเป็นกรณีที่คำนี้ไม่สามารถ อาจจะอยู่ใน Trie ของเราเพราะถ้ามัน ได้ที่จะหมายถึงจะมี เส้นทางลงไปที่คำว่าและคุณจะ ไม่เคยพบโมฆะ ดังนั้นพบ null เรากลับเท็จ เป็นคำที่ไม่ได้อยู่ในพจนานุกรม ถ้ามันไม่ได้เป็นโมฆะแล้วเรากำลังจะ ยังคง iterating ดังนั้นเรากำลังจะ การปรับปรุงเคอร์เซอร์ของเราที่จะชี้ไปที่ โดยเฉพาะอย่างยิ่งที่โหนดดัชนีที่ ดังนั้นเราจึงให้ทำว่าตลอด ทั้งคำ สมมติว่าเราไม่เคยตีโมฆะหมายความว่า เราสามารถที่จะได้รับผ่านทั้ง โลกและหาโหนดใน Trie ของเรา แต่เราไม่ได้ทำมากยัง เราไม่ได้ต้องการเพียงแค่ผลตอบแทนที่แท้จริง เราต้องการที่จะกลับคำผิดเคอร์เซอร์ ตั้งแต่จำอีกครั้งถ้าแมวไม่ได้ ในพจนานุกรมและภัยพิบัติของเราคือ แล้วเราประสบความสำเร็จจะได้รับผ่าน แมวคำ แต่คำเคอร์เซอร์ จะเป็นเท็จและไม่จริง ดังนั้นเราจึงกลับคำเคอร์เซอร์จะแสดงให้เห็น ว่าโหนดนี้เป็นจริงคำว่า และที่มันสำหรับการตรวจสอบ เพื่อขอตรวจสอบขนาด ดังนั้นขนาดเป็นไปได้ง่ายสวย ตั้งแต่จำในการโหลดเรา เพิ่มขึ้นขนาดพจนานุกรม คำที่เราพบกัน ดังนั้นขนาดเป็นเพียงจะกลับ ขนาดพจนานุกรมและที่มัน ขวาทั้งหมดดังนั้นในที่สุดเราจะต้องยกเลิกการโหลด เพื่อยกเลิกการโหลดเรากำลังจะใช้ ฟังก์ชั่นซ้ำที่จะทำจริงทั้งหมด การทำงานของเราเพื่อให้การทำงานของเรา เป็นไปได้ที่เรียกว่า Unloader สิ่งที่ Unloader จะทำอย่างไร เรามาดูกันที่นี่ Unloader ที่เป็นไป ย้ำกว่าทั้งหมดของเด็กที่ โหนดนี้โดยเฉพาะอย่างยิ่งและถ้าเด็ก โหนดไม่โมฆะแล้วเรากำลังจะ ขนโหนดเด็ก ดังนั้นนี้จะซ้ำ ขนของลูกหลานของเรา เมื่อเรากำลังตรวจสอบว่าทั้งหมดของลูกหลานของเรา ได้รับการยกเลิกการโหลดแล้วเรา สามารถฟรีตัวเองเพื่อปลดปล่อยเราเอง ดังนั้นนี้ซ้ำจะยกเลิกการโหลด ทั้ง Trie แล้วครั้งที่ ทำเราก็สามารถคืนค่าจริง ยกเลิกการโหลดไม่สามารถล้มเหลวเรา เพียงแค่สิ่งที่พ้น ดังนั้นเมื่อเราดำเนินการเสร็จแล้วพ้น ทุกอย่างกลับมาที่แท้จริง และที่มัน ชื่อของฉันคือร็อบและ เป็น [ไม่ได้ยิน]