[Powered by Google Translate] [Bölmə 6] [Daha Rahat] [Rob Bowden] [Harvard Universiteti] [Bu CS50 edir.] [CS50.TV] Biz suallara bizim bölməsinə rəhbərlik edə bilər. Mən əvvəl yerin URL göndərdi. Suallar bölməsində başlanması demək- yəqin çox asan sual unsick-dir tamamilə deyiləm valgrind olunur yalnız nə? Valgrind nə edir? Hər kəs valgrind nə demək istəyirəm? [Tələbə] Checks yaddaş sızıntıları. Bəli, valgrind ümumi yaddaş checker edir. Əgər hər hansı bir yaddaş sızıntıları varsa, sonunda, sizə deyir siz istəyirsinizsə çünki üçün istifadə etdiyiniz nə çox deyil problem müəyyən və ya istəyirsinizsə, yaxşı böyük board almaq, siz heç bir yaddaş sızıntıları lazımdır və halda, siz tapa bilərsiniz bir yaddaş sızıntısı var bir fayl açmaq zaman da unutmayın və bunu yaxın olmayan, bir yaddaş sızıntısı var. Bir çox onlar azad deyilik ki, bəzi node axtarır zaman, həqiqətən, onlar ilk addım lüğət bağlamamışlar. Bu da, hər hansı bir yalnış varsa oxuyur sizə deyir və ya yazır siz cəhd və bir dəyər əgər deməkdir ki yığın sonunda kənarda və bu seg günah nə deyil lakin valgrind, həqiqətən orada yazılı edilməməlidir kimi olarsınız və siz mütləq o ya hər hansı olmamalıdır. Necə valgrind istifadə edirsiniz? Necə valgrind istifadə edirsiniz? Bu ümumi bir sual cür çalıştırın və çıxış oldu. Çıxış dəfə çox böyük olunur. Bəzi olduqca yanlış şey varsa yerləşir əyləncə səhvlər də var bir loop baş, o, nəhayət, "Yol çox səhvlər deyəcəklər. İndi sayılması dayandırmaq üçün gedirəm. " Bu əsasən analiz ki, mətn çıxış edir. Sonda, bu, siz ki, hər hansı bir yaddaş sızıntıları izah edəcək faydalı neçə bloklar, ola bilər, çünki bir blok unfreed varsa, o, tapmaq üçün adətən asandır 1000 blokları unfreed çox. Unfreed 1000 blokları yəqin ki, siz azad deyilik deməkdir müvafiq və ya bir şey sizin bağlı siyahıları. Bu valgrind edir. İndi biz suallar bizim bölməsi hansı yükləmək lazım deyil. Siz mənim adını basın və kosmik onları qoparmaq bilər. İndi mənə basın. Revision 1 biz ilk edirik hansı yığını olacaq. Revision 2 növbə olacaq və Revision 3 story bağlı siyahı olacaq. Bizim yığını ilə off başlayır. Burada dediyi kimi, bir yığın, ən əsas biri informatika fundamental data strukturlar. Çox prototip nümunəsidir yemək salonunda qablar və yığını. Bir yığın təqdim olunur zaman ki, əsasən var kimsə, demək gedir "qablar bir yığın kimi, Oh". Siz qablar stack up. Sonra zaman bir tray çəkin gedin çıxardı əldə olan ilk tray yığını qoymaq ki, son biridir. Bu da-kimi yığını burada deyir biz yığını adlı yaddaş seqmentinin var. Və niyə yığını adlanır? Çünki bir yığın data strukturu kimi, bu yığını haqqında yığını çərçivəsində itiyor və pops yığını çərçivəsində bir funksiyası xüsusi bir zəng kimi burada var. Və bir yığın kimi, her zaman geri olacaq funksiyası zəng daha aşağı yığın çərçivəsində daxil aşağı almaq bilər. Siz əsas zəng foo zəng bar və əsas birbaşa bar geri ola bilməz. O, həmişə təzyiq və yaratma düzgün yığını riayət var. Iki əməliyyatları, dediyim kimi, push və pop edir. Bu universal şərtlər var. Siz destesi heç nə baxımından təkan və pop bilməlidir. Biz sıralarında müxtəlif növ var görəcəksiniz. Bu, həqiqətən bir universal müddəti deyil, təkan və pop baca üçün universaldır. Push yalnız yığını qoyulur. Pop yığını çıxarmaq deyil. Və biz, biz typedef struct yığını var burada biz char ** strings var. Hər ** tərəfindən qorxuram almaq etməyin. Bu strings bir sıra olan qədər başa gedir simvol göstəricilərinə və ya bir sıra hallarda simvol göstəricilərinə strings olur. Bu strings olmaq deyil, burada onlar strings olmaq olacaq. Biz strings bir sıra var. Biz yığını hazırda nə qədər çox elementləri təmsil edən bir ölçüsü var, və biz yığını nə çox elementləri ola bilər olan qabiliyyəti var. Gücü, 1-dən böyük bir şey kimi başlamaq lazımdır lakin ölçüsü 0 kimi başlamaq niyyətindədir. İndi, bir yığın hesab edə bilər üç müxtəlif yollarla əsasən var. Bəli, orada yəqin ki, daha çox, lakin iki əsas yolları bir sıra istifadə edərək həyata keçirə bilər, və ya bir bağlı siyahısını istifadə edərək həyata bilər. Əlaqəli siyahıları növ olan bacalar etmək mənasız edir. O, bağlı siyahıları istifadə edərək, bir yığın etmək çox asandır belə ki, burada biz, diziler istifadə yığını etmək olacaq və sonra seriallarda istifadə edərək, bu barədə düşünmək iki yol da var. Əvvəl, mən deyəndə ki, biz yığını üçün gücü biz yığını bir element uyğun bilər. Bu ola bilər bir yolu kimi tezliklə 10 elementlər hit, sonra Bitirdiğinizde edir. Siz dünyada 10 şeylər bağlı bir üst olduğunu bilirik bilər sizin yığını haqqında 10-dan çox şeyi heç vaxt lazımdır ki, Bu halda sizin yığını olan ölçüsü bağlı bir üst ola bilər. Yoxsa, sizin yığını ucu-bucağı olmamaq ola bilər bir sıra edirik amma əgər ki, hər bir zaman 10 elementlər edib o deməkdir ki, 20 elementlər hit zaman sonra, 20 elementləri inkişaf üçün gedən və edirik 30 elementlər və ya 40 elementlər üçün array inkişaf etmək olacaq. Siz burada nə olacaq nə olan gücü, artırmaq lazımdır olacaq. Biz yığını maksimum ölçüsü çatmaq hər bir zaman başqa bir şey basmaq zaman, biz artırılması lazım olacaq. Burada təkan bool push (char * küç) kimi bəyan etmisiniz. Char * küçəsi, biz yığını üzərinə basmaqla ki dizesidir və bool yalnız biz nail ya uğursuz olub deyir. Necə biz uğursuz ola bilər? Siz hesab edə bilər ki, yalnız hal nədir biz saxta qayıtmaq lazımdır harada? Bəli. [Tələbə] tam və biz həmsərhəddir icrası istifadə edirsinizsə. Bəli, belə ki, biz müəyyən-o nə cavab tam və biz bir Məhdud həyata kullanıyorsanız. Sonra biz mütləq yalan qayıdacaqlar. Kimi tezliklə biz serialın 10 şeylər edib, biz 11 uyğun bilməz, biz saxta qayıtmaq belə. Bu hədsiz ne olur? Bəli. Əgər nədənsə array genişləndirmək bilməz. Bəli, belə yaddaş, məhdud resurs deyil və nəhayət, biz yenidən üzərində yığını üzərinə basmaqla şeyi saxlamaq əgər, biz uyğun böyük bir sıra cəhd və ayrılması olacaq biz istifadə etdiyiniz böyük gücü və malloc və ya hər hansı saxta geri gedir. Yaxşı, malloc null qayıdacaqlar. Unutmayın, heç malloc zəng hər zaman, görmək yoxlanılması edilməlidir, əgər null qayıtdıqda və ya başqa bir düzgün çıxılmaqla edir. Biz qeyri-məhdud yığını olsun ildən, biz cəhd əgər biz yalan qaytarılması olacaq etdiyiniz yalnız halda gücü və malloc artırmaq və ya saxta qaytarır nə. Sonra pop, dəlilləri yox edir və yığını üst olduğunu string qaytarır. Nə olursa olsun ən son yığını haqqında sövq edilib, geri nə pop edir və bu da yığını rədd et. Və yığını haqqında heç bir şey yoxdur, əgər null qaytarır fark. Bu yığın boş olduğunu həmişə mümkündür. Java, siz ki, və ya digər dillərdə üçün istifadə edirsinizsə, boş yığını olan pop çalışır istisna və ya bir şey səbəb ola bilər. Lakin C, null biz bu problemlərin öhdəsindən necə hallarda bir çox növüdür. Null Geri biz yığını boş olduğunu demek olacaq necə. Biz, sizin yığını funksionallığı test kodu verdik itələmək və pop həyata keçirir. Bu kod çox olmayacaq. Mən-faktiki olaraq, biz bunu əvvəl, işarə, işarə- siz onu görməmişik, əgər malloc yalnız funksiyası deyil ki, sizin üçün yığın yaddaş ayırır. Alloc funksiyaları bir ailə var. Ilk alıştığınız olan malloc edir. Sonra malloc eyni şey etdiyi calloc, var amma bu sizin üçün hər şeyi sıfır olacaq. Heç bir şey mallocing sonra null hər şeyi təyin etmək istəyirdi varsa yalnız əvəzinə yazılı ilk növbədə calloc istifadə etməli yaddaş bütün məhəllə həyata sıfıra loop üçün. Realloc, malloc kimi xüsusi hallarda bir çox lakin əsasən realloc nə edir artıq ayrılıb bir pointer edir. Realloc burada diqqət istəyirəm funksiyasıdır. Artıq malloc döndü ki, bir pointer edir. Gəlin siz malloc dən 10 bayt göstərici tələb deyirlər. Sonra, siz 20 bytes istədiklərini reallaşdırmaq belə ki, 20 bayt ilə pointer haqqında realloc zəng və realloc sizin üçün avtomatik olaraq hər şey üzərində surəti olacaq. Yalnız 10 bytes blokunun var kimi, yenə malloc çağırıb. Əgər İndi 20 bayt bloku lazımdır Mən malloc 20 bayt, onda mən əl ilk şey olan 10 bytes üzərində surəti var ilk şey ikinci şey daxil və sonra pulsuz. Realloc sizin üçün ki, idarə edəcək. Imzası etibarsız * olacaq bildirək olan yalnız yaddaş blokunun bir pointer qayıdır sonra boşluq * Ptr. Siz ümumi göstərici kimi etibarsız * hesab edə bilər. Ümumiyyətlə, siz etibarsız * ilə məşğul heç lakin malloc bir boşluq * qaytarılması və sonra kimi istifadə Bu, həqiqətən, char * olacaq. Malloc geri ki Əvvəlki etibarsız * indi ölçüsü sonra realloc qəbul olunacaq, və siz ayrılması istəyirəm bayt yeni sayı üçün yeni potensialı. Mən sizə bir neçə dəqiqə vermək və kosmik bunu edəcəyik. Revision 1 ilə başlayın. Mən təkan həyata kifayət qədər vaxt sonra inşallah siz dayandırmaq lazımdır və sonra siz pop etmək üçün başqa bir fasilə vermək lazımdır. Amma həqiqətən bütün çox kodu deyil. Ən kodu potensialının genişləndirilməsi, yəqin ki, genişləndirilməsi məhsulları edir. OK, tamamilə edilməsi üçün heç bir təzyiq, lakin kimi uzun siz doğru yolda olduğunuz kimi hiss kimi, yaxşı. Hər kəs onlar məni çəkərək rahat hiss heç kodu varmı? Bəli, Mən, lakin hər kəs mən qoparmaq bilər hər hansı bir kodu var? Okay, bunu nə ki, saxlamaq başlamaq olar? Mən həmişə bir addım unutmayın. OK, push baxaraq, Siz kodu izah etmək istəyirsiniz? [Tələbə] Əvvəla, mən ölçüsü artmışdır. Mən bəlkə mən ki, hər halda olmalıdır tapmaq, I, ölçüsü artıb bu potensialın daha az varsa və görürəm. Və bu gücü daha az varsa, biz artıq olan array əlavə edin. Bu deyil, əgər, mən 2 qabiliyyəti çoxaltmaq və mən indi daha böyük gücü ölçüsü ilə bir şey üçün strings sıra təkrar bölüşdürə bilər. Ki, uğursuz və sonra, mən istifadəçi demək və saxta qayıtmaq gözəl varsa və sonra yeni spot simli qoydu. [Rob B.] biz burada gözəl bitwise operator istifadə Həmçinin qeyd 2-çoxaltmaq üçün. Unutmayın, sol növbədə həmişə 2 vurulur olacaq. Siz onu deməkdir ki, yadda kimi sağ shift uzun kimi 2 bölünür 2 bölünür bir tam kimi 2 bölmək. Burada ya orada 1 kəsmək bilər. Amma 1 buraxdığı növbədə həmişə, 2 vurulur olacaq siz daşqın isə tam hüdudlarından halda, sonra olmayacaq. A yan comment. Mən, do-bu heç bir şəkildə kodlaşdırma dəyişmək niyyətində deyil istəyirəm lakin mən bu kimi bir şey etmək istəyirəm. Bu, faktiki olaraq o qədər uzun etmək niyyətindədir. Bəlkə bu, bu göstərmək üçün mükəmməl halda deyil lakin mən-bu blokları daxil seqmentinə kimi bu halda əgər, tamam, sonra, bir şey etmək gedirəm və sonra funksiyanı edilir. Mən funksiyası aşağı gözümün bütün yol hərəkət etmək lazım deyil də başqa sonra nə görmək. Bu halda əgər bu, sonra yalnız geri. O, həmçinin bu kənarda hər şeyin gözəl əlavə fayda var indi bir dəfə tərk keçdikdə. Mən artıq üçün, əgər heç ridiculously uzun xətləri yaxınlığında lazımdır , həmin 4 bayt kömək edə bilər, həm də daha sol şey az kimi-tamam, mən xatırlayıram varsa hiss overwhelmed Mən loop üçün bir başqa daxilində daxilində isə loop hazırda edirəm. Yerdə Mən növ kimi, dərhal bu geri edə bilərsiniz. Bu tamamilə isteğe və hər hansı bir şəkildə gözlənilir. [Tələbə] bir ölçüsü olmalıdır - bu uğursuzluqla vəziyyətdə? Burada uğursuzluqla vəziyyətdə biz, bəli, realloc bilmədi olunur. , Güman ki, uğursuzluqla vəziyyəti necə edək biz pulsuz stuff sonra halda, biz həmişə uğursuz olacaq biz bir təkan cəhd neçə dəfə asılı olmayaraq. Biz basmaqla saxlamaq, biz, incrementing ölçüsü saxlamaq biz yığını üzərinə bir şey qoyaraq deyil, baxmayaraq. Adətən biz qədər ölçüsü arttırmayı yoxdur biz uğurla yığını qoyun sonra. Biz ya burada və burada, demək, bunu edərdi. Əvəzinə ≤ gücü s.size deyən və sonra, o, gücü az deyil hər şey olduğu biz köçürülüb yalnız çünki. Ve unutmayın, biz bəlkə yalan yalnız yer qayıtmaq bilər realloc null geri yerləşir, burada və standart səhv xatırlayıram nə varsa, bir standart səhv çap istədiyiniz bəlkə, bu halda düşünebilirsiniz yerine standart həyata birbaşa çap belə fprintf stderr. Yenə, bir gözləmə deyil, bir səhv varsa printf yazın, sonra yerine standart həyata standart səhv çap etmək istəyirik bilər. Hər kəs qeyd etmək başqa bir şey var? Bəli. [Tələbə] siz [işitilemez] üzərində getmək olarmı? [Rob B.] Bəli, faktiki bu binariness ya nə deyil? [Tələbə] Belə ki, 2 ilə çoxaltmaq? [Rob B.] Bəli, əsasən. Binar torpaq, biz həmişə rəqəm bizim dəsti var. Sağ burada əsasən edər 1 Bu sol keçid. Geri bu, yalnız ikili hər şeyi xatırlayaraq , 2 elektrik, belə ki, bu 0 2 təmsil 1-Bu 2, bu 2 2. İndi sağ üçün 0 daxil, biz yalnız hər şeyə tutulub. Nə 0 2 olmaq üçün istifadə 2, artıq 2 1 2 edilir. Biz daxil olan sağ mütləq 0 olacaq, olan hissi verir. Əgər 2-bir sıra çoxaltmaq varsa, bu, tək başa gedən deyil belə 0 yerə 2, 0 olmalıdır Siz shift başına əgər bu mən yarım əvvəl xəbərdarlıq nə bir tamsayı ildə bit sayı kənarda, sonra bu 1 gediş sonuna qədər davam edir. Həqiqətən böyük imkanları ilə məşğul olmaq üçün baş, əgər ki, yalnız narahat deyil. Amma bu nöqtədə, sonra, hər şeyi milyardlarla bir sıra ilə məşğul olduğunuz hər halda yaddaş uyğun deyil bilər. İndi daha asan olan pop, əldə edə bilərsiniz. Bir bütün dəstə pop baş əgər Siz bunu nə bilər və indi yenidən yarım gücü ilə edirik. Siz, sizin yaddaş məbləği shrink realloc bilər amma siz narahat yoxdur, belə ki, yalnız realloc halda olacaq , yaddaşlı daralır, heç vaxt, yaddaş artan olan pop super asan etmək üçün gedir. Destesi kimi olacaq indi sıralarında, lakin şeyi almaq qaydada ləğv edilir. Bir sıra olan prototip Məsələn, bir xətt Mən İngilis dili, əgər tahmin, mən demişəm ki, bir sıra bir prototip Məsələn bir sıra edir. Belə bir xətt kimi, uyğun olaraq ilk şəxs danışırsınızsa, Siz line həyata ilk şəxs ola gözləyirik. Siz line son şəxs danışırsınızsa, siz xidmət keçən şəxs olacaq. Yığını LIFO model idi Biz ki, FIFO model adlandırırlar. Bu sözləri olduqca universaldır. Destesi kimi seriallarda fərqli olaraq, sıralarında adətən ortasında elementləri imkanı yoxdur. Burada, bir yığın, biz təkan və pop var. Burada biz onlara enqueue və dequeue çağırıb başına. Mən də onlara shift və unshift adlı eşitmişəm. Mən insanların təkan və pop sıralarında də tətbiq deyə eşitdim. I, aradan qaldırılması, daxil eşitmişəm belə təkan və bacalar gedir, əgər təzyiq və yaratma olunur, açılır. Siz sıralarında bəhs edirsinizsə, siz istifadə etmək istədiyiniz sözləri seçin bilər durub və aradan qaldırılması üçün, bu adlanır nə heç bir fikir birliyi yoxdur. Amma burada, biz enqueue və dequeue var. İndi, struct yığını struct demək olar ki, eyni görünür. Amma baş takip var. Mən onu burada deyir tahmin, ancaq nə baş lazımdır? Bu prototipləri təkan və pop əsasən eynidir. Siz push və pop kimi hesab edə bilər. Yeganə fərq pop edir qayıtdıqdan-əvəzinə son, ilk qaytarılması edir. 2, 1, 3, 4, və ya bir şey. Burada başlanğıc var. Bizim queue tam deyil, belə ki, dörd elementləri var. Bizim sıra sonu, hazırda 2 və indi biz başqa bir şey daxil gedin. Biz yığını versiyası üçün biz nə başqa bir şey, daxil istədiyiniz zaman biz yaddaş bizim blok uzadılır. Bu problemi nədir? [Tələbə] Siz 2 hərəkət. Mən queue sonuna haqqında əvvəl bildirib ki, nə Bu, 1 biz başlamaq mənada etmir sonra sonra dequeue 3, dequeue 4, dequeue 1 istəyirəm sonra dequeue 2, sonra bu dequeue. Biz indi realloc istifadə edə və ya ən azı, siz fərqli bir şəkildə realloc istifadə etmək lazımdır. Amma yəqin ki, yalnız realloc istifadə etməməlidir. Siz özünüz yaddaş surəti üçün gedir. Yaddaş surəti iki funksiyaları var. Memcopy və memmove var. Hal-hazırda istifadə etmək istədiyiniz olacaq bir görmək man pages oxu alıram. OK, memcopy, fərq memcopy və memmove, bir düzgün halda emal siz regionda üst-üstə olur ki, regiona çıxarmaq olduğunuz Sizi çıxarmaq edirik. Memcopy onu idarə etmir. Memmove edir. Siz kimi problem hesab edə bilər Gəlin, bu oğlan surəti istəyirsiniz artıq bu adam bu dörd. Sonunda serialın kimi nə olmalıdır surəti sonra 2, 1, 2, 1, 3, 4, və sonunda bəzi stuff sonra. Lakin bu, biz həqiqətən surəti sıraya asılıdır biz regionda biz daxil çıxarmaq edirik ki, hesab etmirəm əgər bəri üst-üstə düşür biz çıxarmaq olduğunuz biri, sonra biz burada başlanğıc kimi bunu getmək istədiyiniz yerə 2 surəti bilər sonra irəli göstəricilərinə hərəkət. İndi biz burada və burada olacaq, indi biz kopyalamak etmək istəyirsinizsə bu oğlan artıq oğlan və irəli göstəricilərinə hərəkət. Biz əldə qədər olacaq, 1, 2, 1, 2, 1 2 əvəzinə uyğun 2, 1, 2, 1, 3, 4, çünki 2, 1 orijinal, 3, 4 overrode. Memmove doğru yapar. Bu halda, əsasən yalnız həmişə memmove istifadə bu düzgün emal çünki. Bu, ümumiyyətlə heç bir pis ifa deyil. Ideyası əvəzinə əvvəlindən başlayan və bu yolla çıxarmaq deyil biz yalnız burada olduğu kimi, bu, son başlayır və nüsxə və bu halda, bir problem heç bilər. Heç bir performans var itirilir. Həmişə memmove istifadə edin. Memcopy narahat etməyin. Ayrıca memmove üçün gidiyorsun harada və ki Sizin növbə ilə sarılı-ətrafında hissəsi. Heç bir narahatlıq tamamilə həyata əgər. Bu yığını push, və pop daha çətindir. Hər kəs biz işləmək bilər hər hansı bir kodu var? Hətta tamamilə natamam əgər? [Tələbə] Bəli, baxmayaraq ki, tamamilə natamam var. Biz bilər yenidən qazanc kimi tamamilə natamam uzun kimi gözəl var? Hesab edirəm ki, hər bir zaman unutmayın. Biz şeyi ölçüsünü lazım Okay, nə məhəl olur. Tamamilə ölçüsünü bilməz. Bu kodu izah edir. Ölçüsü, ilk növbədə surəti az, mən ilk növbədə yoxlanılması alıram və sonra sonra, mən daxil Mən baş + ölçüsü, almaq və mən bu serialın gücü ətrafında wraps əmin olun və mən o mövqedə olan yeni simli daxil edin. Sonra ölçüsü artırmaq və doğru geri. [Rob B.] Bu mütləq sizə mod istifadə etmək istəyirəm olacaq hallarda biridir. Əgər ətrafında wrapping düşünürəm əgər, ətrafında wrapping olduğu halda hər cür dərhal fikir mod olmalıdır. Tez optimallaşdırma kimi /, kodu bir line qısa etmək Siz line dərhal bu aşağıdakı qeyd yalnız ölçüsü + +, belə ki, daxil olan bu xəttə, ölçüsü + +. Aşağı burada İndi vəziyyət var biz kifayət qədər yaddaş yoxdur biz 2-bizim gücü artır. , Mən burada eyni problem ola bilər tahmin, ancaq indi iqnor edə bilər Siz artırılması üçün uğursuz olduğu təqdirdə, sonra yenə 2 ilə gücü azaltmaq istəyirəm olacaq. Digər qısa qeyd edə bilərsiniz yalnız kimi + = siz də << = edə bilərsiniz. Bərabərdir əvvəl demək olar ki, bir şey edə bilərsiniz, + = | = & = << =. Char * Yeni yaddaş yeni blokdur. Oh, burada. Insanların yaddaş yeni blokunun növü haqqında nə düşünürsünüz? [Tələbə] Bu char ** olmalıdır. Qədər burada struct geri düşüncələri, strings biz reallocating nə. Biz növbəyə elementləri üçün bütün yeni dinamik storage edirik. Biz sizin strings təyin etmək olacaq, biz indi mallocing ne edir və belə yeni bir char ** olacaq. Bu strings bir sıra olacaq. Sonra yalan qayıtmaq olacaq altında işi nədir? [Tələbə] biz char * etdiyini lazımdır? [Rob B.] Bəli, yaxşı deyirik. [Tələbə] nə idi? [Rob B.] Biz heç bir çünki char * ölçüsü etmək istəyirdi uzun sizeof (char) 1 olardı, çünki bu, həqiqətən çox böyük bir problem olardı. Sizeof char *, 4 olacaq belə ints ilə məşğul olduğunuz zaman bir çox siz ilə üz əldə edirlər, çünki int * və int və ölçüsü ölçüsü bir 32-bit sistem eyni şey olacaq. Amma burada, sizeof (char) və sizeof (char *) artıq eyni şey olacaq. Biz saxta qayıtmaq olduğu halda nədir? [Tələbə] Yeni null edir. Yeni null əgər Bəli, biz, saxta qayıtmaq və mən aşağı atmaq gedirəm burada [Tələbə] [işitilemez] [Rob B.] Bəli, bu yaxşıdır. Siz ya 2 dəfə qabiliyyəti və ya gücü shift 1 və sonra yalnız burada və ya hər hansı aşağı müəyyən edə bilər. Biz bu idi Biz bunu edəcəyik. Tutum >> = 1. Və 1 yeri itirmək barədə narahat gedən heç etdiyiniz siz 1 keçdikdə tərk çünki, belə ki, 1-in yeri, mütləq 0 deyil belə sağ 1 keçid, hələ də gözəl olacaq. [Tələbə] Siz qaytarılması əvvəl buna ehtiyac varmı? [Rob B.] Bəli, bu, tamamilə heç bir əhəmiyyət kəsb edir. Biz sonuna doğru qaytarılması başa olacaq İndi daşımır. Bu memmoves nə olacaq yolu, biz onlara necə diqqətli olmaq lazımdır. Hər kəs biz onlara necə üçün heç bir təklif varmı? Burada başlanğıc. Qaçılmaz, biz yenə əvvəlində başlamaq istəyirəm oradan və surəti əşyalar, 1, 3, 4, 2. Necə ki, etməliyəm? Birincisi, mən yenə memmove üçün adam səhifə baxmaq var. Memmove, arqumentləri üçün həmişə vacibdir. Biz mənbə ikinci, ölçüsü üçüncü, ilk bizim təyinat istəyirəm. Mənbə və təyinat ləğv hansı funksiyaları var. Hedef, mənbə qədər ardıcıl olmağa çalışır. Move, nə qayıdır? Bu istəyirik ki, ola bilər hər hansı səbəbdən, hedef bir pointer qaytarır. Mən bunu oxuya bilərsiniz şəkil, lakin biz təyinat hərəkət etmək istəyirəm. Bizim təyinat nə olacaq? [Tələbə] Yeni. [Rob B.] Bəli, və burada biz çıxarmaq olunur? Biz çıxarmaq edilir ilk şey bu 1, 3, 4. , 4 3-bu 1 nədir. Bu 1-ünvan nədir? Ki, 1-ünvan nədir? [Tələbə] [işitilemez] [Rob B.] rəhbəri + ilk element və ünvanı. Necə biz serialın ilk element alıram? [Tələbə] Queue. [Rob B.] Bəli, q.strings. Unutmayın, burada, bizim baş 1-dir. Bu darn. Mən yalnız hesab magically- Burada bizim baş 1-dir. Mən də mənim rəngini gedirəm. Burada strings edir. Biz burada etdiyi kimi, bu, biz onu yaza bilərsiniz ilə başçılarının + q.strings. Bir çox adam da yazmaq və q.strings [baş]. Bu, həqiqətən, heç bir az səmərəli deyil. Siz dereferencing və sonra ünvanı əldə kimi, bu hesab bilər lakin compiler q.strings + rəhbəri, hər halda biz əvvəl nə üçün tərcümə edir. Siz düşünün istəyirəm Ya bir yol. Və neçə bayt biz surəti istəyirsiniz? [Tələbə] Tutum - baş. Tutum - baş. Və sonra həmişə nümunə yazmaq bilər ki, doğru əgər anlamaq üçün. [Tələbə] O 2 bölünür lazımdır. Bəli, belə ki, biz ölçüsü istifadə edə bilər danışarlar. Biz hələ ölçüsü olan- ölçüsü istifadə edərək, biz 4 bərabər ölçüsü var. Bizim ölçüsü 4. Bizim baş 1-dir. Biz bu 3 elementləri köçürmək üçün istəyirəm. Bu ağlı başında olma ki, ölçüsü yoxlamaq var - baş düzgün 3. Biz əvvəlki kimi, burada geri gələn biz gücü istifadə, onda biz 2 bölmək istiyorum biz artıq tutumu artıb etdik, çünki əvəzinə, biz ölçüsü istifadə olacaq. Bu surətləri həmin hissəsi. İndi biz digər hissəsi başlanması qalan hissəsinin surəti lazımdır. Bu nə mövqeyi memmove olacaq? [Tələbə] Plus ölçüsü - baş. Bəli, biz artıq ölçüsü kopyaladığınız - baş bayt, və biz qalan bytes surəti istədiyiniz yeni və sonra ölçüsü minus-də bytes sayı artıq daxil sitemizi sonra Və sonra yerləşir biz çıxarmaq olunur? [Tələbə] Q.strings [0]. [Rob B.] Bəli, q.strings. Biz ya nə & q.strings [0]. Bilər Bu çox daha az yayılmışdır. Yalnız 0 olacaq, onda q.strings görmək edirlər lazımdır. Biz çıxarmaq etdiyiniz harada. Biz surəti neçə bayt yazmayıblar bilərəm? >> [Tələbə] 10. Sağ. [Tələbə] biz 5 çoxaltmaq üçün var - 10 dəfə bayt və ya bir şey ölçüsü? Bəli, bu Ü-nə məhz biz çıxarmaq olunur? [Tələbə] [işitilemez] Biz çıxarmaq etdiyiniz şey növü nədir? [Tələbə] [işitilemez] O gələn yerləşir Bəli, char * s biz çıxarmaq edirik ki, biz bilmirik. Bəli, onlar işarə etdiyiniz olduğu strings kimi, biz növbə üzərinə basmaqla başa və ya queue daxil enqueuing. O gələn hallarda, biz heç bir fikrim yoxdur. Biz yalnız char * s özləri takip lazımdır. Baş bytes - Biz ölçüsü surəti istəmirəm. Baş char * s, - Biz ölçüsü kopyalamak etmək istəyirsinizsə biz sizeof (char *) bu çoxaltmaq olacaq. Eyni aşağı burada, head * sizeof (char *). [Tələbə] nə [işitilemez]? Burada Bu hüquq? [Tələbə] Xeyr, aşağıda, ölçüsü - baş. [Rob B.] burada Bu hüquq? Pointer hesab. Göstərici hesab iş gedir necə avtomatik olaraq biz məşğul olduğunuz növü ölçüsü multiplies. Sadəcə, burada kimi yeni + (ölçüsü - rəhbəri) və yeni [- baş size] tam bərabər ki, düzgün iş gözləyirik qədər biz int dizi ilə məşğul edirsinizsə-ci ildən sonra biz int-index deyil daxil və ya 5 ölçüsü var və 4-cü element istəyirsinizsə, onda biz index int array [4]. Siz don't-[4] int of * ölçüsü. Yəni bu halda avtomatik olaraq emal və sözün bərabərdir, belə ki, bracket sintaksis yalnız tez tərtib kimi bu valyutaya çevrilmişdir olacaq. Yəni ki, ehtiyatlı olmaq lazımdır şey Siz ölçüsü əlavə zaman - baş bir byte deyil əlavə olunur. Siz bir bayt və ya hər hansı ola bilər, bir char * əlavə edirik. Digər suallar? OK, dequeue daha asan olacaq. Mən sizə yerinə yetirmək üçün bir dəqiqə verəcəyik. Oh, və bu eyni vəziyyət tapmaq yerləşir nə enqueue halda, biz null enqueuing edirsinizsə, bəlkə biz onu idarə etmək istəyirəm, bəlkə biz deyil. Biz burada daha, lakin bizim yığını hal kimi eyni deyil. Biz null enqueue varsa, biz bunu göz ardı edə bilərsiniz. Hər kəs mən qoparmaq bilər bir kodu var? [Tələbə] Mən yalnız dequeue var. Version 2 ki, tamam. Siz izah etmək istəyirsiniz? [Tələbə] Birincisi, siz növbə bir şey var əmin olun və ölçüsü 1 aşağı gedir. Siz nə etmək lazımdır, sonra baş qayıtmaq və sonra 1-dək baş keçin. OK, belə ki, biz hesab üçün bir künc halda var. Bəli. [Tələbə] başını son element da deyil sonra baş serialın kənarda qeyd etmək istəmirəm. Bəli, belə tez baş kimi, bizim serialın son xit biz dequeue zaman baş 0 geri modded edilməlidir. Təəssüf ki, bir addım da bunu edə bilməz. Mən yəqin ki, düzeltmek istədiyiniz yol tapmaq Bu, biz qaytarılması ne bir char * olacaq sizin dəyişən adı olmaq istəyir nə. Sonra gücündə baş Mod istəyirəm və sonra islağa qoymaq qaytarın. Burada insanlar bir çox onlar-bilər bu-you'll halda insanlar nə görürsünüzsə baş potensialın daha böyük, baş etmək - gücü. Və yalnız mod nə ətrafında çalışır. Baş mod = tutumu çox təmiz həcmi -. ətrafında tutumu rəhbəri çox baş daha əgər daha wrapping və Suallar? OK, biz yazmayıblar son şey bizim bağlı siyahısı. Siz əgər Siz bağlı siyahı davranış bəzi istifadə edilə bilər bir hash table Əgər sizin hash cədvəllərdə siyahıları bağlıdır. Mən qəti bir hash table etdiyini gəlir. Siz artıq bir trie görmüşük bilər lakin çalışır daha çətindir. Nəzəriyyə, onlar asimptotik daha yaxşı deyilik. Lakin, böyük board baxmaq və daha heç vaxt çalışır, və daha çox yaddaş tutur. Hər şey haqqında daha çox iş üçün pis olan bitir çalışır. Bu David Malan həlli həmişə nə edir o həmişə ismarışları onun trie həlli və o, hal-hazırda harada görmək bildirin. O David J, altında nə idi? O, 18 saylı var ki, olduqca pis deyil, belə və ən yaxşı biri olacaq ki, siz hesab edə bilər çalışır və ya yaxşı bir trie ilə çalışır. Onun orijinal həll belə deyilmi? Trie həllər RAM istifadə bu intervalında daha çox meyl kimi hiss edirəm. Çox top Go down və RAM istifadə bir rəqəm deyil. Alt tərəf aşağı gedin və sonra çalışır görmeye başlamaq Siz tamamilə kütləvi RAM istifadə aldığı, və çalışır daha çətindir. Not tamamilə ancaq təhsil təcrübəsi dəyər bir əgər. Son şey, bizim bağlı siyahısı və bu üç şeyə, bacalar, sıralarında və bağlı siyahıları, Əgər kompüter nə hər hansı gələcək şey Bu şeyi ilə tanışlıq var daşımayacaq. Onlar hər şey yalnız belə əsas var. Siyahıları bağlıdır və burada bir story bağlı siyahı bizim həyata olacaq etmişdir. Story nə bağlı deyil kimi ikiqat bağlı fərqli deməkdir? Bəli. [Tələbə] Bu yalnız, növbəti pointer üçün çox göstəricilərinə işarə onu sonra bir əvvəlki kimi. Bəli, belə şəkil formatında, yalnız nə idi? Mən iki şey var. Mən şəkil və şəkil var. Şəkil formatında, bizim story bağlı siyahıları, qaçılmaz, biz siyahı rəhbəri göstərici bir növ və sonra siyahı ərzində biz yalnız göstəricilərinə malik və bəlkə bu bal null üçün. Bu story bağlı siyahı sizin tipik rəsm olacaq. A ikiqat bağlı siyahısı, siz geri bilərsiniz. Mən sizə siyahıda hər hansı bir node vermək, onda siz mütləq əldə edə bilərsiniz hər hansı digər node siyahısına bir ikiqat bağlı siyahısı əgər. Amma siz siyahısına üçüncü node almaq və bir story bağlı siyahı varsa, Əgər birinci və ikinci qovşaqlarının almaq olacaq. heç bir yol Və müavinət və detriments və bir aşkar bir var daha çox ölçüsü qədər, və bunlar indi işarə olduğu takip var. Amma biz yalnız story bağlı qayğı. Biz həyata malik olacaq bir neçə şeylər. Sizin typedef struct node, int i: struct node * Növbəti; node. Bu typedef ürəyinizdə daxil yandırılmış edilməlidir. Quiz 1, bağlı siyahı node bir typedef vermək istəyirəm olmalıdır və dərhal aşağı cızmaq lazımdır hətta bu barədə düşünmədən. Mən bir neçə sual tapmaq, niyə biz burada struct lazımdır? Niyə biz node * deyə bilər? [Tələbə] [işitilemez] Bəli. Bir şey kimi bir node müəyyən edən yeganə şey özü typedef edir. Amma bu baxımdan, biz bu struct node definition vasitəsilə təhlil cür olduğunuzda biz typedef bitmiş deyil belə bəri, hələ bizim typedef başa deyil node yoxdur. Amma struct node edir və bu node burada, Bu da başqa bir şey adlandırmaq olar. Bu n adlandırmaq olar. Bu bağlı siyahı node adlandırmaq olar. Bu bir şey adlandırmaq olar. Amma bu struct node bu struct node eyni şey deyilir lazımdır. Bu da burada olmalıdır zəng nə, və belə də məsələnin ikinci nöqtə cavab niyə bir siz structs və structs və typedefs gördükdə dəfə çox olan yalnız typedef struct görmək lazımdır, siz anonim structs görürsünüz struct, lüğət, və ya hər həyata keçirilməsi. Niyə biz burada node demək lazımdır? Nə anonim struct ola bilər? Demək olar ki, eyni cavabı var. [Tələbə] Siz struct ərzində müraciət etmək lazımdır. Bəli, struct ərzində, siz struct özü müraciət etmək lazımdır. Siz struct adı vermir Əgər anonim struct varsa, siz ona istinad edə bilməz. Və son lakin ən-bu bütün olmalıdır qədər sadə deyil, Bu aşağı yazılı edirsinizsə və onlar həyata kömək etməlidir şeyləri bu cür mənası yoxdur Əgər səhv bir şey edirik ki,. Ən son deyil, niyə bu struct node * olmaq var? Niyə yalnız sonrakı node struct bilməz? Növbəti struct üçün [Tələbə] Pointer. Yəni biz istədiyiniz nə qaçılmaz edir. Nə üçün növbəti struct node heç vaxt ola bilər? Niyə * Növbəti struct node olmaq var? Bəli. [Tələbə] Bu sonsuz loop kimi. Bəli. [Tələbə] Bu, bütün biri olacaq. Bəli, yalnız biz ölçüsü və ya bir şey necə düşünün. Bir struct ölçüsü əsasən + və ya - burada və ya orada bəzi model. Bu əsasən struct olan şeyi ölçüləri məbləği olacaq. Burada Bu doğru bir şey dəyişmədən, ölçüsü asan olacaq. Struct node ölçüsü növbəti i + ölçüsü ölçüsü olacaq. I ölçüsü 4 olacaq. Növbəti ölçüsü 4 olacaq. Struct node ölçüsü 8 olacaq. Biz * yoxsa, sizeof düşünür sonra sizeof (i) 4 olacaq. Struct node ölçüsü sonrakı struct node + ölçüsü i ölçüsü olacaq Növbəti struct node i + ölçüsü + ölçüsü. Bu qovşaqlarının sonsuz recursion olardı. Bu şeylər olmalıdır necə görə. Yenə, mütləq ki, yadda və ya ən azı siz ola bilər ki, kifayət qədər başa bu kimi baxmaq nə vasitəsilə səbəb. Biz həyata istəyirəm olacaq şeylər. Əgər uzunluğu siyahısı siz fırıldaqçı və ətrafında saxlamaq bilər qlobal uzunluğu və ya bir şey, ancaq bunu etmək fikrində deyilik. Biz siyahısı uzunluğu saymaq olacaq. Biz şey var ki, əsasən axtarış kimi belə biz bu tam da bağlı siyahısında olub olmadığını görmek üçün integers bir bağlı siyahı var. Başına siyahı əvvəlində daxil olur. Əlavə sonunda daxil edir. Insert_sorted listedeki sıralaması mövqe daxil edir. Və Insert_sorted cür siz başına istifadə və ya pis yollarla əlavə heç tutur. Siz həyata etdiyiniz zaman insert_sorted-Insert_sorted Gəlin biz bağlıdır siyahısı var deyirlər. Bu hazırda 5, 4, 2, kimi görünür. Mən belə uzun siyahısını özü artıq çeşidlənir kimi, 3 daxil etmək istəyirəm 3 məxsusdur yerləşir tapmaq asan. I 2-da başlanır. OK, 3 2 daha böyük, mən davam etmək istəyirəm. Oh, 4 çox böyük, mən 3 2 və 4 arasında getmək gedir bilirəm və mən göstəricilərinə və bütün məhsulları düzeltmek üçün var. Amma ciddi, insert_sorted istifadə etmədikdə kimi edək, yalnız mən 6 başına demək sonra mənim bağlı siyahısı olmağa davam edir. İndi insert_sorted üçün, yalnız kəsb edə bilər ki, heç bir əhəmiyyət kəsb edir əməliyyatları mövcud olsa siyahısı sorted ki, bu sıralanır deyil səbəb ola bilər ki, bu. O siz həyata keçirilməsi üçün var olacaq əsas şey bir faydalı əlavə-belə tapın. İndi, uzunluğu nə bir dəqiqə almaq və başqa və bu nisbətən sürətli olmalıdır. Yekun zaman yaxınlaşır, belə ki, hər kəs uzunluğu üçün bir şey və ya başqa? Onlar demək olar ki, eyni olacaq. [Tələbə] Length. , Gəlin görmək təftiş edək. Okay. Siz izah etmək istəyirsiniz? [Tələbə] Mən yalnız bir göstərici node yaratmaq və qlobal dəyişən olan ilk onu başlamaq, və sonra mən San günah almaq və bu halda əgər 0 qayıtmaq yoxdur belə ki, null varsa kontrol edin. Əks halda, mən vasitəsilə loop, tam ərzində track saxlanılması Mən siyahıda növbəti element əldə etdik neçə dəfə və eyni artım əməliyyat da ki, faktiki element daxil və sonra davamlı, bu null varsa çek görmək etmək bu null varsa və o, aborts və yalnız mən əldə etdiyiniz elementlərin sayı qaytarır. [Rob B.] hər şey haqqında hər hansı bir şərh varmı? Bu gözəl düzgün müdrik görünür. [Tələbə] Mən sizə node == null lazımdır düşünmürəm. Bəli, belə node əgər == null qaytarılması 0. Amma node == null bu-oh, bir düzgün məsələ vardır. Bu yalnız i qaytarılması edirik idi, lakin indi daxilində deyil. Siz int i yalnız lazımdır, belə ki, i = 0. Node null olsa, sonra i hələ, 0 olacaq və biz 0 qayıtmaq olacaq, bu halda eyni belə. Digər ümumi şey bəyannamə davam edir loop üçün və node daxili. Siz demək-oh bilər heç. Bu kimi saxlamaq edək. Mən yəqin ki, int i = 0 bura qoymaq olardı sonra node * node = burada ilk. Və indi bu canini-almaq necə yəqin ki. Bu yazdığınız necə yəqin ki. Bu kimi də dönük bilər. Burada loop strukturu üçün int i = 0 kimi demək olar ki, kimi təbii olmalıdır i array uzunluğu az i + +. Ki, bir sıra üzərində təkrarlamaq necə varsa, bu bir bağlı siyahı üzərində təkrarlamaq necə. Bu bir nöqtədə ikinci təbiət olmalıdır. Mind ki, bu demək olar ki, eyni şey olacaq. Siz bağlı siyahı üzərində təkrarlamaq istəyirəm olacaq. Əgər node-I dəyəri adlanır nə heç bir fikrim yoxdur. Node i. Ki node olan value = i doğru qayıtmaq və bu edin. Qeyd edək ki, biz heç yalan qayıtmaq yeganə yolu biz bütün bağlı siyahı üzərində təkrarlamaq və doğru qayıtmaq heç əgər, belə ki, bu nə. Kimi yan not biz yəqin ki, əlavə və ya başına almaq deyil. Sadə son qeyd. Siz statik söz görürsünüzsə, elə isə statik int sayı = 0 deyək sonra biz count etmək + +, siz əsasən qlobal dəyişən kimi hesab edə bilər, Mən yalnız bu biz uzunluğu həyata olacaq necə deyil, baxmayaraq. Burada bunu, sonra + + saymaq alıram. Biz sayı incrementing bizim bağlı siyahı bir node daxil hər hansı bir yol. Bu baxımdan statik söz nə deməkdir edir. Mən yalnız int sayı olsaydı = müntəzəm köhnə qlobal dəyişən olacağını 0. Nə statik int sayı vasitələri bu fayl üçün qlobal dəyişən olmasıdır. Bu, bəzi başqa fayl mümkün deyil siz açılmış varsa, pset 5 düşünmək istəyirəm. Siz həm speller.c var və siz dictionary.c var və yalnız speller.c, sonra bir şey qlobal bir şey bəyan əgər dictionary.c və əksinə əldə edilə bilər. Qlobal dəyişənlər, hər hansı bir. C fayl tarafından erişilebilir lakin statik dəyişənlərin, fayl daxilində yalnız erişilebilir belə daxili dictionary.c və spell checker və ya daxili, bu mənim serialın ölçüsü üçün dəyişən bəyan necə növ və ya lüğət sözlər mənim sıra ölçüsü. Mən hər kəs üçün daxil bir qlobal dəyişən bəyan etmək istəmirəm ildən, Mən, həqiqətən, yalnız öz məqsədləri üçün qayğı. Bu barədə yaxşı şey, bütün adı toqquşma stuff deyil. Bəzi digər fayl sayı adlanan qlobal dəyişən istifadə etməyə çalışır varsa, hər şeyi çox çox səhv, , bu gözəl şeylər təhlükəsiz edir və yalnız siz istifadə edə bilərsiniz və başqa heç bir ola bilər, və başqa kimsə sayı adlanan qlobal dəyişən bəyan əgər, sonra sayı adlanan sizin statik dəyişən mane deyil. Bu statik nə var. Bu fayl qlobal dəyişir. Bir şey haqqında suallar? Bütün dəsti. Bye. [CS50.TV]