>> ลำโพง 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 แล้วครั้งที่
ทำเราก็สามารถคืนค่าจริง
ยกเลิกการโหลดไม่สามารถล้มเหลวเรา เพียงแค่สิ่งที่พ้น
ดังนั้นเมื่อเราดำเนินการเสร็จแล้วพ้น ทุกอย่างกลับมาที่แท้จริง
และที่มัน
ชื่อของฉันคือร็อบและ เป็น [ไม่ได้ยิน]