1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [MÜZİK OYUN] 3 00:00:11,137 --> 00:00:12,220 DAVID J. MALAN: Pekala. 4 00:00:12,220 --> 00:00:13,950 Bu CS50 olduğunu. 5 00:00:13,950 --> 00:00:18,560 Bu hafta beş devam ve biz bazı iyi haberler ve kötü haberlerim var. 6 00:00:18,560 --> 00:00:21,140 Çok iyi bir haber olduğunu CS50 olduğunu Bu Cuma başlattı. 7 00:00:21,140 --> 00:00:24,430 Bize katılmak isterseniz, Burada her zamanki URL baş. 8 00:00:24,430 --> 00:00:28,670 Hatta daha iyi bir haber, herhangi bir ders Bu 13 Pazartesi geliyor. 9 00:00:28,670 --> 00:00:31,970 Biraz daha az iyi haber, Quiz sıfır önümüzdeki Çarşamba. 10 00:00:31,970 --> 00:00:33,840 Daha fazla detay olabilir Burada bu URL adresinde bulunamadı. 11 00:00:33,840 --> 00:00:36,340 Ve önümüzdeki birkaç gün içinde Biz boşlukları doldurarak olacak 12 00:00:36,340 --> 00:00:39,234 oda getirmedi biz aittir olacağı. 13 00:00:39,234 --> 00:00:41,400 Daha iyi haberler var olacak ki Bir ders çapında yorum olacak 14 00:00:41,400 --> 00:00:43,570 oturumu bu geliyor Akşam Pazartesi. 15 00:00:43,570 --> 00:00:46,270 Elbette en Bizi izlemeye devam edin konumu ve detaylar için web sitesi. 16 00:00:46,270 --> 00:00:49,290 Bu halde Kesitler, tatil, aynı zamanda buluşacak. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 En iyi haber, bir sonraki Cuma ders. 19 00:00:52,940 --> 00:00:56,220 Yani bu bir gelenek olduğunu biz ders başına sahiptir. 20 00:00:56,220 --> 00:00:58,100 Sadece-- şaşırtıcı olacak. 21 00:00:58,100 --> 00:01:02,510 Sen gibi şeyler göreceksiniz Sabit zamanlı veri yapıları 22 00:01:02,510 --> 00:01:04,730 ve hash tabloları ve ağaçlar ve çalışır. 23 00:01:04,730 --> 00:01:07,150 Ve biz doğum günü sorunları hakkında konuşacağım. 24 00:01:07,150 --> 00:01:09,440 Şeyler bir sürü Bir sonraki Cuma bekliyor. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 TAMAM MI. 27 00:01:12,200 --> 00:01:13,190 Her neyse. 28 00:01:13,190 --> 00:01:17,080 >> Bu yüzden oldum hatırlamak ne bu resim üzerinde duruluyor 29 00:01:17,080 --> 00:01:18,980 bizim bilgisayarın belleğinin içinde. 30 00:01:18,980 --> 00:01:22,875 Yani bellek veya RAM nerede programlar Onları koşarken var. 31 00:01:22,875 --> 00:01:25,215 Eğer bir çift tıklarsanız simge bazı programı çalıştırmak için 32 00:01:25,215 --> 00:01:27,520 ya da çift tıklayın Bazı dosyayı açmak için simgesini, 33 00:01:27,520 --> 00:01:30,430 Bu sabit yüklenen oluyor sürücü veya katı hal sürücüsü 34 00:01:30,430 --> 00:01:34,190 RAM, Random Access Memory, içine kapanana kadar o yaşıyor 35 00:01:34,190 --> 00:01:36,700 dizüstü kapağı, kapatır veya programdan çıkın. 36 00:01:36,700 --> 00:01:38,960 >> Şimdi bu bellek, bir hangi muhtemelen 37 00:01:38,960 --> 00:01:41,950 1 gigabayt bu gün, 2 gigabayt, hatta çok daha fazla, 38 00:01:41,950 --> 00:01:44,420 genellikle ortaya koydu belirli bir program için 39 00:01:44,420 --> 00:01:47,170 dikdörtgen Bu tür kavramsal model 40 00:01:47,170 --> 00:01:50,860 Biz alt yığını var sayede ve üstündeki diğer şeyler bir demet. 41 00:01:50,860 --> 00:01:53,140 çok üstünde bir şey Bu resimde gördüm 42 00:01:53,140 --> 00:01:55,670 daha önce ama asla hakkında konuştuk olarak adlandırılan kısa bölümdür. 43 00:01:55,670 --> 00:01:58,419 Metin segmenti sadece bir fantezi yoludur sıfırları ve olanları söyleyerek bu 44 00:01:58,419 --> 00:02:01,150 Gerçek derlenmiş programı oluşturmak. 45 00:02:01,150 --> 00:02:03,910 >> Peki ne zaman çift tıklayın Mac veya PC Microsoft Word, 46 00:02:03,910 --> 00:02:08,030 Eğer nokta çalıştırdığınızda veya bir üzerinde Mario çizgi Terminal penceresinde Linux bilgisayar, 47 00:02:08,030 --> 00:02:12,460 oluşturan sıfır ve olanlar Word veya Mario geçici olarak depolandığı 48 00:02:12,460 --> 00:02:16,610 sözde bilgisayarınızın RAM içinde Belirli bir program için metin parçası. 49 00:02:16,610 --> 00:02:19,080 Gider Aşağıda başlatıldı ve başlatılmamış verileri. 50 00:02:19,080 --> 00:02:22,655 Bu global değişkenler gibi şeyler, Biz birçok kullanılmaz olduğuna göre, 51 00:02:22,655 --> 00:02:24,910 ama vesileyle biz ettik Küresel değişkenler vardı 52 00:02:24,910 --> 00:02:28,819 veya statik dizeleri tanımlanan sert "merhaba" gibi kelimeler kodlanmıştır 53 00:02:28,819 --> 00:02:31,860 kullanıcıdan alınan olmadığını senin programına sabit kodlanmıştır. 54 00:02:31,860 --> 00:02:34,230 >> Şimdi, aşağı alt biz Sözde yığını. 55 00:02:34,230 --> 00:02:37,665 Ve yığın, bugüne kadar, biz oldum amaçları ne tür kullanarak? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 Yığın ne için kullanılır oldu? 58 00:02:40,997 --> 00:02:41,160 Evet? 59 00:02:41,160 --> 00:02:42,070 >> İZLEYİCİ: Fonksiyonlar. 60 00:02:42,070 --> 00:02:43,320 >> DAVID J. MALAN: fonksiyonlar için? 61 00:02:43,320 --> 00:02:44,980 Fonksiyonlar için hangi anlamda? 62 00:02:44,980 --> 00:02:48,660 >> İZLEYİCİ: Bir işlevini çağırdığınızda, argümanlar yığının üzerine kopyalandı. 63 00:02:48,660 --> 00:02:49,660 >> DAVID J. MALAN: Kesinlikle. 64 00:02:49,660 --> 00:02:52,650 Eğer bir işlev çağrısı zaman, argümanlar yığının üzerine kopyalandı. 65 00:02:52,650 --> 00:02:56,330 Yani herhangi bir X veya Y en en ya da A veya B en en Eğer bir işlev geçen olduğunuzu 66 00:02:56,330 --> 00:02:58,680 geçici konur Sözde yığını, 67 00:02:58,680 --> 00:03:02,000 Sadece Annenberg biri gibi yemekhane tepsileri ve ayrıca şeyler 68 00:03:02,000 --> 00:03:03,190 Yerel değişkenler gibi. 69 00:03:03,190 --> 00:03:06,290 Eğer foo işlevi ya da takas işlevi, yerel değişkenler var, 70 00:03:06,290 --> 00:03:08,602 temp gibi, bu iki yığını üzerinde sonuna kadar. 71 00:03:08,602 --> 00:03:11,560 Şimdi, biz hakkında çok fazla konuşmak olmaz Onları, ancak bu ortam değişkenleri 72 00:03:11,560 --> 00:03:15,690 altındaki bir süre önce ne gördüm Ben klavyeden bir gün futzing oldu 73 00:03:15,690 --> 00:03:20,050 ve ben bir şeyler erişen başladı argv 100 veya argv 1000 gibi, 74 00:03:20,050 --> 00:03:22,320 Sadece öğelerin-- unutuyorum Numaraları ancak 75 00:03:22,320 --> 00:03:24,330 Bana tarafından erişilebilir olması gerekiyordu. 76 00:03:24,330 --> 00:03:26,581 Biz bazı görmeye başladı Ekranda korkak sembolleri. 77 00:03:26,581 --> 00:03:28,330 Bu sözde edildi ortam değişkenleri 78 00:03:28,330 --> 00:03:32,390 küresel ayarları gibi benim Program ya da benim bilgisayar, değil 79 00:03:32,390 --> 00:03:37,090 Son ilgisi Konuştuğumuz hata, 80 00:03:37,090 --> 00:03:39,670 Shellshock bu oldu Epeyce bilgisayar başına bela. 81 00:03:39,670 --> 00:03:42,960 >> Şimdi son olarak, bugünün odak biz sonuçta öbek üzerinde olacak. 82 00:03:42,960 --> 00:03:44,864 Bu belleğin bir başka yığınıdır. 83 00:03:44,864 --> 00:03:47,030 Ve temelde bütün bu Bellek aynı şeyler. 84 00:03:47,030 --> 00:03:48,040 Aynı donanım var. 85 00:03:48,040 --> 00:03:49,956 Biz tür sadece konum Farklı kümeleri tedavi 86 00:03:49,956 --> 00:03:51,460 Farklı amaçlar için bayt. 87 00:03:51,460 --> 00:03:56,540 yığın da nereye olacak Eğer talep değişkenleri ve bellek 88 00:03:56,540 --> 00:03:58,810 işletim sisteminden geçici olarak depolanır. 89 00:03:58,810 --> 00:04:01,890 >> Ama bir problem tür var Burada, resim anlaşılacağı gibi. 90 00:04:01,890 --> 00:04:05,261 Biz tür iki tane hakkında gemileri çarpışmak. 91 00:04:05,261 --> 00:04:08,010 Eğer daha fazla kullanmak gibi çünkü bugün gördüğümüz yığının, gibi 92 00:04:08,010 --> 00:04:11,800 itibaren, Eğer daha fazla kullanmak gibi Yığın, kesinlikle kötü şeyler olabilir. 93 00:04:11,800 --> 00:04:15,054 Ve gerçekten de, biz o neden olabilir kasıtlı veya kasıtsız. 94 00:04:15,054 --> 00:04:16,970 Geçen çekişme Yani Zaman bu program oldu, 95 00:04:16,970 --> 00:04:20,570 herhangi bir fonksiyonel hizmet etmedi hangi göstermek için başka amacı 96 00:04:20,570 --> 00:04:24,750 nasıl bir kötü adam aslında alabilir gibi Birinin programında hataların avantajı 97 00:04:24,750 --> 00:04:28,460 ve hatta bir bir program veya devralmaya Tüm bilgisayar sistemi veya sunucu. 98 00:04:28,460 --> 00:04:31,660 Yani sadece bakışta kısaca, seni altındaki bu main fark 99 00:04:31,660 --> 00:04:34,510 Komut satırında alır argv göre argümanlar. 100 00:04:34,510 --> 00:04:38,480 Ve bir fonksiyon f bir çağrı var, aslında isimsiz bir fonksiyonu olarak adlandırılır 101 00:04:38,480 --> 00:04:40,250 f ve argv geçen var [1]. 102 00:04:40,250 --> 00:04:43,960 At >> Yani ne olursa olsun kelime kullanıcı türleri Bu programın adından sonra istemi, 103 00:04:43,960 --> 00:04:49,310 ve daha sonra bu keyfi işlevi kadar üst, f, bir dize alır, AKA karakter *, 104 00:04:49,310 --> 00:04:51,720 tartışmak başladık gibi, ve sadece "bar" diyor. 105 00:04:51,720 --> 00:04:53,310 Ama biz bir şey diyebiliriz. 106 00:04:53,310 --> 00:04:57,470 Ve o zaman içinde, beyan f, karakter dizisinin 107 00:04:57,470 --> 00:04:59,930 12 tür karakterler C- çağırdı. 108 00:04:59,930 --> 00:05:03,580 >> Şimdi, hikaye ben anlatıyordum Bir an önce, nerede bellekte 109 00:05:03,580 --> 00:05:06,720 c, ya da bu 12 vardır sonuna kadar gidiyor karekter olmalı? 110 00:05:06,720 --> 00:05:07,570 Sadece temiz olması için. 111 00:05:07,570 --> 00:05:08,070 Evet? 112 00:05:08,070 --> 00:05:08,590 >> İZLEYİCİ: yığını üzerinde. 113 00:05:08,590 --> 00:05:09,420 >> DAVID J. MALAN: yığını üzerinde. 114 00:05:09,420 --> 00:05:10,720 Yani c yerel bir değişkendir. 115 00:05:10,720 --> 00:05:14,079 Biz 12 karakter veya 12 bayt için soruyorsun. 116 00:05:14,079 --> 00:05:16,120 Bu sonuna kadar gidiyoruz Sözde yığını üzerinde. 117 00:05:16,120 --> 00:05:18,530 Şimdi nihayet bu diğer işlevi Bu, aslında oldukça yararlıdır 118 00:05:18,530 --> 00:05:20,571 ama biz gerçekten kullanılan ettik kendimizi, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 Bu, dize kopyasını anlamına gelir ama sadece harf, n karakterleri n tane. 121 00:05:25,200 --> 00:05:31,990 Yani n karakter olacak c içine bardan kopyalandı. 122 00:05:31,990 --> 00:05:32,980 Ve kaç? 123 00:05:32,980 --> 00:05:34,110 çubuğunun uzunluğu. 124 00:05:34,110 --> 00:05:36,330 Bu yüzden, diğer bir deyişle, bu bir satır, strncopy, 125 00:05:36,330 --> 00:05:39,500 kopyalamak için gidiyor etkin bir c için bar. 126 00:05:39,500 --> 00:05:42,340 >> Şimdi, sadece tür tahmin Bu hikayenin ahlaki, 127 00:05:42,340 --> 00:05:44,750 ne burada potansiyel sorunlu? 128 00:05:44,750 --> 00:05:49,710 Biz uzunluğu kontrol ediyoruz olsa çubuğunun ve strncopy içine geçen, 129 00:05:49,710 --> 00:05:53,145 ne gut sen anlatıyor hala bu program hakkında kırıldı? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 Evet? 132 00:05:55,220 --> 00:05:57,491 >> İZLEYİCİ: içermez null karakteri için oda. 133 00:05:57,491 --> 00:05:59,990 DAVID J. MALAN: içermez null karakteri için oda. 134 00:05:59,990 --> 00:06:02,073 Potansiyel olarak, farklı Geçtiğimiz uygulama bile yok 135 00:06:02,073 --> 00:06:04,810 sahip bir artı 1 olarak çok daha O null karakteri ağırlayacak. 136 00:06:04,810 --> 00:06:06,649 Ama daha da kötüsü var. 137 00:06:06,649 --> 00:06:07,940 Başka ne yapmamız için başarısız? 138 00:06:07,940 --> 00:06:08,432 Evet? 139 00:06:08,432 --> 00:06:09,307 >> İZLEYİCİ: [Duyulmaz] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 DAVID J. MALAN: Mükemmel. 142 00:06:16,440 --> 00:06:18,490 Biz zor oldukça keyfi 12 kodlu ettik. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 Bu çok fazla değil Sorun, ama aslında 145 00:06:21,330 --> 00:06:25,630 biz bile olmadığını kontrol değiliz çubuğunun uzunluğu, en az 12 olan 146 00:06:25,630 --> 00:06:28,530 bu durumda olacak belleğe koymak için güvenli 147 00:06:28,530 --> 00:06:30,260 biz tahsis ettik denilen c. 148 00:06:30,260 --> 00:06:32,960 Nitekim, bar gibi eğer Uzun 20 karakter, 149 00:06:32,960 --> 00:06:39,010 Bu fonksiyon kopyalama gibi görünüyor Böylece c içine bar, 20 karakter 150 00:06:39,010 --> 00:06:41,310 En az 8 byte alarak olması gerektiğini söyledi. 151 00:06:41,310 --> 00:06:42,690 Burada ima var. 152 00:06:42,690 --> 00:06:44,347 >> Yani kısa, kırık programda. 153 00:06:44,347 --> 00:06:45,180 Büyük bir anlaşma gibi değil. 154 00:06:45,180 --> 00:06:46,360 Belki bir segment hataya olsun. 155 00:06:46,360 --> 00:06:47,651 Biz tüm programlarda hata yaşadım. 156 00:06:47,651 --> 00:06:50,196 Hepimiz hata olabilir Şu anda programlarda. 157 00:06:50,196 --> 00:06:51,320 Ama ima ne? 158 00:06:51,320 --> 00:06:54,390 Peki, burada bir uzaklaştırdınız-sürüm var Benim bilgisayarın belleğinden bu resmi. 159 00:06:54,390 --> 00:06:56,230 Bu benim yığının altına. 160 00:06:56,230 --> 00:06:59,644 Ve gerçekten de, çok altında ne olduğunu denilen ana rutin yığını, fantezi yolu 161 00:06:59,644 --> 00:07:00,560 o ana söyleyerek. 162 00:07:00,560 --> 00:07:03,772 Fonksiyonu olarak adlandırılır kim Böylece Bahsettiğimiz f. 163 00:07:03,772 --> 00:07:05,230 Yani bu yığının alt olduğunu. 164 00:07:05,230 --> 00:07:06,640 İade adresi yeni bir şey. 165 00:07:06,640 --> 00:07:08,810 Her zaman, orada oldu hep resimde olmuştur. 166 00:07:08,810 --> 00:07:10,440 Biz buna dikkat çekti sadece asla. 167 00:07:10,440 --> 00:07:15,290 Çıkıyor, çünkü c çalışır yoludur bir fonksiyonun bir başka çağırdığında o, 168 00:07:15,290 --> 00:07:18,780 Sadece bu da değil argümanlar yapmak Fonksiyon yığını üzerine itti olsun, 169 00:07:18,780 --> 00:07:22,470 sadece işlevi yerel yapmak değişkenler yığını itti olsun, 170 00:07:22,470 --> 00:07:26,820 bir şey geri dönüş adresi olarak adlandırılır Ayrıca yığının üzerine koymak olur. 171 00:07:26,820 --> 00:07:33,330 Özellikle, ana aramalar foo eğer, ana en bellekte kendi adres, öküz bir şey, 172 00:07:33,330 --> 00:07:38,240 etkin bir yığının üzerine koymak alır Böylece f bunu yürütme yapılır zaman 173 00:07:38,240 --> 00:07:43,630 Metinde geri atlamak için nerede biliyor çalıştırmaya devam etmek için segment. 174 00:07:43,630 --> 00:07:47,760 >> Kavramsal buradayız Yani, main, daha sonra f çağrılır. 175 00:07:47,760 --> 00:07:50,200 F biliyor nasıl kim geri el kontrolü? 176 00:07:50,200 --> 00:07:52,020 Peki, bu küçük Burada kırmızı kırıntı, 177 00:07:52,020 --> 00:07:54,978 dönüş adresi olarak adlandırılan, sadece kontroller, bu dönüş adresi nedir? 178 00:07:54,978 --> 00:07:57,039 Ah, beni buraya geri ana atlamak verelim. 179 00:07:57,039 --> 00:07:59,080 Ve bu biraz var Bir tefrit, 180 00:07:59,080 --> 00:08:00,750 sıfır ve olanlar nedeniyle main için teknik olarak 181 00:08:00,750 --> 00:08:01,967 Burada teknoloji segmentinde kadar. 182 00:08:01,967 --> 00:08:03,800 Ama bu fikir. f Sadece ne bilmek zorunda 183 00:08:03,800 --> 00:08:06,680 Nerede kontrol sonuçta geri gider. 184 00:08:06,680 --> 00:08:09,790 >> Ama yol bilgisayarları Uzun şeyler koydu 185 00:08:09,790 --> 00:08:12,320 Yerel değişkenler gibi ve argümanlar bu gibi. 186 00:08:12,320 --> 00:08:17,180 Bu resmin üst Yani mavi yüzden tüm f yığın çerçevesi 187 00:08:17,180 --> 00:08:19,630 belleğin o f Özellikle kullanıyor. 188 00:08:19,630 --> 00:08:22,990 Dolayısıyla buna göre, fark bar Bu resimde olduğunu. 189 00:08:22,990 --> 00:08:23,980 Bar argümanı oldu. 190 00:08:23,980 --> 00:08:27,240 Ve biz iddia argümanlar bu fonksiyonlar yığını itti olsun. 191 00:08:27,240 --> 00:08:29,910 Ve C, tabii ki, Ayrıca bu resimde. 192 00:08:29,910 --> 00:08:33,520 >> Ve sadece işaretler amaçlar için, sol üst köşesindeki fark 193 00:08:33,520 --> 00:08:37,020 braket 0 c ne olurdu ve sonra biraz sağa aşağı 194 00:08:37,020 --> 00:08:38,220 c dirseği 11 olduğunu. 195 00:08:38,220 --> 00:08:41,240 Yani diğer bir deyişle, hayal edebilirsiniz bayt bir ızgara var olduğunu 196 00:08:41,240 --> 00:08:44,380 Orada, bunlardan birincisi Sol üst, alt hangi 197 00:08:44,380 --> 00:08:48,360 Bu 12 bayt sonuncusu. 198 00:08:48,360 --> 00:08:49,930 >> Ama şimdi ileri sarmak için deneyin. 199 00:08:49,930 --> 00:08:55,580 Ne geçerse ne hakkında olduğunu c daha uzun olan bir dize bar? 200 00:08:55,580 --> 00:08:59,130 Ve biz eğer kontrol değil gerçekten uzun 12'den var. 201 00:08:59,130 --> 00:09:03,146 Bu resmin hangi bölümü gidiyor bayt 0, 1, 2, 3 ile yazılır olsun, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11, ve sonra Kötü, 12, 19 ile 13? 203 00:09:07,890 --> 00:09:11,820 Ne, burada ne olacak Eğer sipariş gelen sonucuna eğer 204 00:09:11,820 --> 00:09:14,790 Bu c dirsek 0 üstte c dirsek 11 aşağı tür 205 00:09:14,790 --> 00:09:15,812 Doğru mu? 206 00:09:15,812 --> 00:09:16,796 Evet? 207 00:09:16,796 --> 00:09:19,260 >> İZLEYİCİ: Peki, o gidiyor char * çubuğunu üzerine yazmak. 208 00:09:19,260 --> 00:09:22,260 >> DAVID J. MALAN: Evet, bu gibi görünüyor Eğer char * çubuğunu üzerine gidiyoruz. 209 00:09:22,260 --> 00:09:26,245 Ve daha da kötüsü, sen gerçekten uzun gönderirseniz dize, hatta ne üzerine olabilir? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 dönüş adresi. 212 00:09:28,570 --> 00:09:31,380 Hangi yine sadece gibi Programı nerede anlatmak için kırıntı 213 00:09:31,380 --> 00:09:34,060 ne zaman f dönmek için çağrıldığını yapılır. 214 00:09:34,060 --> 00:09:37,140 >> Kötü adamlar genellikle yapmak Peki Onlar bir program rastlamak eğer olduğunu 215 00:09:37,140 --> 00:09:41,290 onlar olup olmadığını merak olduğunuzu Böyle bir şekilde işletilebilir, hatalı 216 00:09:41,290 --> 00:09:43,550 o alabilir Bu hata avantajı, 217 00:09:43,550 --> 00:09:45,720 genelde alamadım Bu ilk seferde doğru. 218 00:09:45,720 --> 00:09:48,590 Onlar sadece, örneğin, gönderme işlemini başlatmak, Programınızın içine rastgele dizeleri, 219 00:09:48,590 --> 00:09:50,260 Klavyenin olsun, ya açıkçası onlar muhtemelen 220 00:09:50,260 --> 00:09:52,740 küçük bir program yazmak, sadece otomatik dizeleri oluşturmak, 221 00:09:52,740 --> 00:09:55,430 ve tarafından programa beceriyor başlamak Farklı girdilerin sürü gönderme 222 00:09:55,430 --> 00:09:56,340 Farklı uzunluklarda. 223 00:09:56,340 --> 00:09:58,990 >> En kısa sürede program çöker gibi, Bu inanılmaz bir şey. 224 00:09:58,990 --> 00:10:01,020 O he anlamına gelir, çünkü ya da o keşfetti 225 00:10:01,020 --> 00:10:02,660 Ne gerçekten muhtemelen bir hata olduğunu. 226 00:10:02,660 --> 00:10:05,830 Ve sonra onlar daha akıllı alabilirsiniz ve başlangıç ​​daha dar odaklama 227 00:10:05,830 --> 00:10:07,420 Bu hata yararlanmak için nasıl. 228 00:10:07,420 --> 00:10:11,480 Özellikle, ne o olabilir yapmak merhaba, iyi durumda, gönderilir. 229 00:10:11,480 --> 00:10:12,210 Hayır büyük dağıtmak. 230 00:10:12,210 --> 00:10:14,750 Bu yeterince kısa olan bir dize var. 231 00:10:14,750 --> 00:10:18,100 Ama ne o gönderirse, ve biz bunu gibi genelleme edeceğiz 232 00:10:18,100 --> 00:10:20,890 Saldırı sıfır yüzden code-- ve bu olanları şeyler 233 00:10:20,890 --> 00:10:25,150 rm-rf gibi, her şeyi kaldırmak Sabit diskten ya da spam göndermek 234 00:10:25,150 --> 00:10:27,000 ya da bir şekilde makineyi saldırı? 235 00:10:27,000 --> 00:10:29,570 >> Bunların her biri Yani eğer harfler bir, sadece, temsil 236 00:10:29,570 --> 00:10:32,380 kavramsal, saldırı, saldırı, saldırı, saldırı, bazı kötü kod 237 00:10:32,380 --> 00:10:36,410 başkası yazdı, ama o kişi yeterince akıllı ise 238 00:10:36,410 --> 00:10:40,790 sadece tüm içerir Bu rm-RFS değil, aynı zamanda 239 00:10:40,790 --> 00:10:46,100 onun son birkaç bayt karşılık gelen bir sayı olmak 240 00:10:46,100 --> 00:10:50,540 adresine onun veya kendi saldırı kodu 241 00:10:50,540 --> 00:10:53,820 o sadece geçti isteminde bunu sağlayarak, 242 00:10:53,820 --> 00:10:58,760 Eğer etkili bir bilgisayarı kandırmak olabilir f yürütme bittiğinde fark içine, 243 00:10:58,760 --> 00:11:02,400 oh, beni atlamak için zamanı geri dönüş kırmızı adresine. 244 00:11:02,400 --> 00:11:06,070 Ama o şekilde çünkü Bu geri dönüş adresi çakışan 245 00:11:06,070 --> 00:11:09,602 Kendi numarası ile, ve onlar kadar zekisin 246 00:11:09,602 --> 00:11:11,560 Bu yapılandırılmış olması sayı senin gibi, başvurmak için 247 00:11:11,560 --> 00:11:13,740 Süper üst görmek Orada sol köşesi, 248 00:11:13,740 --> 00:11:18,020 Bilgisayar yıllarda gerçek adresi onların saldırı bazı kod bellek, 249 00:11:18,020 --> 00:11:21,740 Bir kötü adam bilgisayar kandırmak olabilir kendi kod yürütme içine. 250 00:11:21,740 --> 00:11:23,700 >> Ve bu kod, yine her şey olabilir. 251 00:11:23,700 --> 00:11:26,120 Genel olarak adlandırılır sadece bir kabuk kodu, 252 00:11:26,120 --> 00:11:29,030 öyle değil diyerek bir yolu rm-rf gibi basit genel bir şey. 253 00:11:29,030 --> 00:11:32,340 Bu, aslında Bash gibi bir şey var ya da gerçek bir program onu ​​verir 254 00:11:32,340 --> 00:11:37,230 ya da onu programatik kontrol yürütmek için Onlar istediğiniz başka bir şey. 255 00:11:37,230 --> 00:11:40,210 Yani kısacası, bu bütün Basit gerçeğinden kaynaklanmaktadır 256 00:11:40,210 --> 00:11:44,490 katılan bu hata kontrol değil senin dizinin sınırları. 257 00:11:44,490 --> 00:11:47,250 Ve bu arada, çünkü bilgisayarlar eseri olduğunu onlar 258 00:11:47,250 --> 00:11:49,430 gelen yığını kullanmak etkin bir şekilde, kavramsal olarak, 259 00:11:49,430 --> 00:11:54,830 up alt, ama sonra elemanlar Eğer, yukarıdan aşağı büyümek yığına itin 260 00:11:54,830 --> 00:11:56,624 Bu inanılmaz sorunlu. 261 00:11:56,624 --> 00:11:58,290 Şimdi, bu geçici bir çözüm yolları vardır. 262 00:11:58,290 --> 00:12:00,800 Ve açıkçası, dilleri vardır hangi Bu sorunu gidermek için. 263 00:12:00,800 --> 00:12:03,100 Java, örneğin, bağışıklık Bu özel konuya. 264 00:12:03,100 --> 00:12:04,110 Onlar işaretçiler vermeyin çünkü. 265 00:12:04,110 --> 00:12:05,943 Onlar vermeyin doğrudan bellek adresleri. 266 00:12:05,943 --> 00:12:08,560 Elimizdeki bu güçle Yani bellekte şey dokunmak 267 00:12:08,560 --> 00:12:11,580 Biz kuşkusuz, büyük bir risk, gelir istiyorum. 268 00:12:11,580 --> 00:12:12,430 >> Yani bir göz tutmak. 269 00:12:12,430 --> 00:12:14,596 Açıkçası, varsa, ay veya yıllar zaman, gelecek 270 00:12:14,596 --> 00:12:17,740 Bazı sömürü hakkında okuyun Bir program veya bir sunucu, 271 00:12:17,740 --> 00:12:22,370 Hiç bir şey bir ipucu görürseniz Bir tampon taşması saldırısı gibi, 272 00:12:22,370 --> 00:12:25,390 veya yığın taşması başka türüdür saldırı, ruhu benzer, 273 00:12:25,390 --> 00:12:28,770 Web sitesi en ilham kadar Eğer biliyorsanız, isim, 274 00:12:28,770 --> 00:12:33,170 hepsi sadece bahsediyor Bazı karakter boyutunu taşan 275 00:12:33,170 --> 00:12:36,200 Dizi ya da daha genel bir dizi. 276 00:12:36,200 --> 00:12:38,822 Bu daha sonra herhangi bir soru,? 277 00:12:38,822 --> 00:12:39,780 Evde denemeyin yok. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> Tamam. 280 00:12:42,300 --> 00:12:47,270 Yani malloc bugüne kadar bizim yeni olmuştur Biz bellek ayırabilir ki arkadaş 281 00:12:47,270 --> 00:12:50,540 biz mutlaka içinde bilmiyoruz bu yüzden biz yok istediğiniz ilerlemek 282 00:12:50,540 --> 00:12:52,920 içine sert kod bizim 12 benzeri bir program numaraları. 283 00:12:52,920 --> 00:12:55,550 Kullanıcı bize ne kadar söyler kez o girişine istediği veri, 284 00:12:55,550 --> 00:12:58,000 biz bu kadar bellek malloc edebilirsiniz. 285 00:12:58,000 --> 00:13:01,484 >> Yani için, çıkıyor malloc biz bunu kullanıyorum ölçüde, 286 00:13:01,484 --> 00:13:03,900 açıkça son kez, ve sonra Siz bunu kullanıyorum 287 00:13:03,900 --> 00:13:08,160 için bilmeden getString için Birkaç hafta MALLOC belleğinin her 288 00:13:08,160 --> 00:13:09,820 Sözde yığın gelir. 289 00:13:09,820 --> 00:13:13,852 Bu, örneğin, bu yüzden getString olan dinamik bellek tahsis edebilirsiniz 290 00:13:13,852 --> 00:13:16,060 sen bilmeden önceden yazdığınız olacak, 291 00:13:16,060 --> 00:13:21,520 Bu belleğe geri bir işaretçi sizi el, ve bu bellek sizindir tutmak hala, 292 00:13:21,520 --> 00:13:24,080 Hatta döner getString sonra. 293 00:13:24,080 --> 00:13:27,450 Çünkü hatırlama sonra tüm Yığın sürekli yukarı ve aşağı gidiyor 294 00:13:27,450 --> 00:13:27,950 yukarı ve aşağı. 295 00:13:27,950 --> 00:13:30,230 Ve kısa sürede gider aşağı, herhangi bir bellek anlamına gelir 296 00:13:30,230 --> 00:13:33,030 kullanılan bu fonksiyon gerekir başkası tarafından kullanılmamalıdır. 297 00:13:33,030 --> 00:13:34,570 Şimdi çöp değerleri var. 298 00:13:34,570 --> 00:13:36,120 >> Ama yığın burada olduğunu. 299 00:13:36,120 --> 00:13:39,360 Ve malloc olduğunu hakkında güzel ne malloc burada bellek ayırır, 300 00:13:39,360 --> 00:13:42,070 ne için, gömülü değil yığını tarafından büyük bir bölümü,. 301 00:13:42,070 --> 00:13:46,000 Ve böylece herhangi bir işlev erişebilirsiniz malloc'd edilmiş belleği 302 00:13:46,000 --> 00:13:49,120 Hatta getString gibi bir işlev tarafından, Hatta sonra iade edilir. 303 00:13:49,120 --> 00:13:51,700 >> Şimdi, malloc converse ücretsizdir. 304 00:13:51,700 --> 00:13:53,900 Ve gerçekten de, kural size benimseyerek başlamak gerekir 305 00:13:53,900 --> 00:13:58,950 herhangi herhangi malloc kullanmak her zaman olduğu Kendinizi, sonunda, serbest kullanmanız gerekir 306 00:13:58,950 --> 00:14:00,280 Aynı işaretçi. 307 00:14:00,280 --> 00:14:03,289 Biz yazılı olan tüm bu zaman buggy, birçok nedenden dolayı adamcağız kodu. 308 00:14:03,289 --> 00:14:05,580 Ama biri olmuştur CS50 kütüphanesi kullanarak hangi 309 00:14:05,580 --> 00:14:09,010 kendisi kasıtlı olduğunu buggy, bu bellek sızdırıyor. 310 00:14:09,010 --> 00:14:11,410 Eğer getString aradım her zaman Son birkaç hafta içinde 311 00:14:11,410 --> 00:14:13,870 Biz işletme soruyorsun Sistem, Linux, bellek. 312 00:14:13,870 --> 00:14:15,780 Ve bir kez geri verilen asla. 313 00:14:15,780 --> 00:14:17,730 Ve bu değildir, , iyi bir şey pratik. 314 00:14:17,730 --> 00:14:20,330 >> Ve Valgrind, bir PSET 4 tanıtılan araçlar, 315 00:14:20,330 --> 00:14:22,900 size yardımcı tüm ilgili Şimdi böyle hata bulmak. 316 00:14:22,900 --> 00:14:27,060 Ama neyse ki PSET 4 için sana ihtiyacım yok CS50 kitaplık veya GetString kullanımı. 317 00:14:27,060 --> 00:14:31,220 Yani hafıza ile ilgili herhangi bir hata vardır sonuçta kendi olacak. 318 00:14:31,220 --> 00:14:34,060 >> Yani malloc sadece daha fazla Bu amaç için uygun. 319 00:14:34,060 --> 00:14:37,420 Biz aslında şimdi çözebilir temelde farklı sorunlar, 320 00:14:37,420 --> 00:14:41,640 ve temelde daha sorunları çözmek etkin bir hafta Zero'nun vaadi başına. 321 00:14:41,640 --> 00:14:44,720 Şimdiye kadar bu seksi olduğunu veri yapısı biz aldık. 322 00:14:44,720 --> 00:14:47,804 Ve veri yapısı ile sadece demek kavramsallaştırma bir bellek yolu 323 00:14:47,804 --> 00:14:50,720 Sadece söyleyerek ötesinde bir şekilde, bu bir karakter olduğunu, bir int. 324 00:14:50,720 --> 00:14:52,930 Birlikte küme şeyler başlayabilirsiniz. 325 00:14:52,930 --> 00:14:54,460 >> Peki, bir dizi bu gibi görünüyordu. 326 00:14:54,460 --> 00:14:57,270 Ve yaklaşık bir anahtar ne oldu dizi size vermesidir 327 00:14:57,270 --> 00:14:59,724 back-to-back topakları Bellek, her biri 328 00:14:59,724 --> 00:15:02,765 aynı tip olacak, int, int, int, int, ya da karakter, karakter, karakter, 329 00:15:02,765 --> 00:15:03,330 karakter. 330 00:15:03,330 --> 00:15:04,496 Ama bir kaç olumsuz yanları var. 331 00:15:04,496 --> 00:15:06,570 Bu, örneğin, bir boyut altı bir dizi. 332 00:15:06,570 --> 00:15:10,650 Eğer altı ile bu dizi doldurmak varsayalım sayıları ve daha sonra, herhangi bir nedenle, 333 00:15:10,650 --> 00:15:13,187 Kullanıcı vermek istiyor Eğer yedinci sayısı. 334 00:15:13,187 --> 00:15:14,020 Nereye koymak mı? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 Eğer varsa >> çözüm nedir yığını üzerinde bir dizi yarattı, 337 00:15:18,990 --> 00:15:22,030 Örneğin, sadece hafta Biz tanıttı iki gösterim, 338 00:15:22,030 --> 00:15:23,730 içinde bir dizi köşeli parantez içinde? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 Peki, altı var Bu kutulara numaralar. 341 00:15:27,260 --> 00:15:28,530 Içgüdülerin ne olurdu? 342 00:15:28,530 --> 00:15:29,973 Nereye koymak istersiniz? 343 00:15:29,973 --> 00:15:30,860 >> İZLEYİCİ: [Duyulmaz] 344 00:15:30,860 --> 00:15:31,315 >> DAVID J. MALAN: Üzgünüm? 345 00:15:31,315 --> 00:15:32,380 >> İZLEYİCİ: ucunda koyun. 346 00:15:32,380 --> 00:15:33,796 >> DAVID J. MALAN: ucunda koyun. 347 00:15:33,796 --> 00:15:35,880 Yani sadece sağ üzerinde, Bu kutunun dışında. 348 00:15:35,880 --> 00:15:38,710 Hangi güzel, ama o olur Bunu yapamam çıkıyor. 349 00:15:38,710 --> 00:15:41,350 Sormadınız ettik Çünkü eğer bellek bu parça için, 350 00:15:41,350 --> 00:15:44,490 Bu bir tesadüf olabilir diğer bazı değişken tarafından kullanılıyor 351 00:15:44,490 --> 00:15:45,030 tamamen. 352 00:15:45,030 --> 00:15:49,210 Biz koydu bu yüzden bir hafta geri düşünün veya Zamyla ve Davin ve Gabe isimleri dışında 353 00:15:49,210 --> 00:15:49,930 bellekte. 354 00:15:49,930 --> 00:15:51,638 Onlar kelimenin tam anlamıyla arka arkaya arkaya. 355 00:15:51,638 --> 00:15:53,550 Bu yüzden mutlaka olamaz Bu ne 's güven 356 00:15:53,550 --> 00:15:55,800 Burada beni kullanmak için kullanılabilir. 357 00:15:55,800 --> 00:15:56,990 >> Peki başka ne olabilir? 358 00:15:56,990 --> 00:16:00,282 Peki, bir kez gerçekleştirilmesi boyut yedi bir dizi gerekir 359 00:16:00,282 --> 00:16:02,490 Eğer sadece bir yaratabileceği büyüklüğü yedi dizi daha sonra kullanmak 360 00:16:02,490 --> 00:16:05,950 Bir döngü veya bir while döngüsü için, Yeni diziye kopyalamak, 361 00:16:05,950 --> 00:16:09,680 ve sonra bir şekilde sadece kurtulmak Bu dizi ya da sadece kullanmayı bırakın. 362 00:16:09,680 --> 00:16:12,130 Ama bu özellikle verimli değil. 363 00:16:12,130 --> 00:16:15,340 Kısacası, diziler izin vermeyin dinamik yeniden boyutlandırmak. 364 00:16:15,340 --> 00:16:17,900 >> Olsun bir yandan Yani şaşırtıcı rasgele erişim. 365 00:16:17,900 --> 00:16:20,108 O izin Çünkü bize şeyler yapmak böl ve yönet gibi, 366 00:16:20,108 --> 00:16:23,100 biz ettik hepsi ikili arama, Burada ekranda konuştuk. 367 00:16:23,100 --> 00:16:24,950 Ama bir köşeye kendin boya. 368 00:16:24,950 --> 00:16:27,810 En kısa sürede size vurmak gibi senin dizinin sonu, 369 00:16:27,810 --> 00:16:29,980 Eğer çok yapmak zorunda pahalı bir işlemdir 370 00:16:29,980 --> 00:16:33,910 veya kod bir sürü bilgileri Şimdi bu sorunla başa çıkmak için. 371 00:16:33,910 --> 00:16:36,680 >> Bunun yerine biz ne vardı bir şey bir liste olarak adlandırılan, 372 00:16:36,680 --> 00:16:38,820 veya belirli bir listeyi bağlı? 373 00:16:38,820 --> 00:16:41,930 Ne olursa yerine sahip dikdörtgenler, geri geri geri 374 00:16:41,930 --> 00:16:45,730 Biz biraz bırakın dikdörtgenler var Bunların arasında kıpırdatmak oda biraz? 375 00:16:45,730 --> 00:16:49,670 Olsa bile Ve ben bu boğuldum resim veya bu resmi adapte 376 00:16:49,670 --> 00:16:54,696 Metinlerin birinden burada geri olmak geri gerçekte, çok düzenli geri, 377 00:16:54,696 --> 00:16:56,820 Bu dikdörtgenler biri buraya bellekte olabilir. 378 00:16:56,820 --> 00:16:58,028 Bunlardan biri burada olabilir. 379 00:16:58,028 --> 00:17:00,420 Bunlardan biri, burada olabilir Burada ve benzeri üzerinde. 380 00:17:00,420 --> 00:17:02,910 >> Ama ne çekti ise, Bu durumda, oklar 381 00:17:02,910 --> 00:17:05,650 her nasılsa bu bağlantı olduğunu Birlikte dikdörtgenler? 382 00:17:05,650 --> 00:17:08,170 Nitekim, biz bir teknik gördüm Bir ok vücut bulma. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 Ne son olarak kullanmış gün ki, kaputun altında, 385 00:17:13,710 --> 00:17:15,210 Bir ok temsili? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 Bir gösterici, değil mi? 388 00:17:17,349 --> 00:17:19,780 >> Peki ne varsa, yerine Sadece sayıları saklamak, 389 00:17:19,780 --> 00:17:23,130 gibi 9, 17, 22, 26, 34, Ne biz saklandığı takdirde 390 00:17:23,130 --> 00:17:27,079 Sadece bir sayı değil bir işaretçi Her tür numaranın yanındaki? 391 00:17:27,079 --> 00:17:30,690 Yani o kadar bir iplik olacak gibi kumaş sürü ile iğne, 392 00:17:30,690 --> 00:17:32,950 nasılsa bağlama şeyler Birlikte, benzer olabilir 393 00:17:32,950 --> 00:17:35,550 işaretçiler olarak biz Burada oklarla enkarne, 394 00:17:35,550 --> 00:17:38,550 tür birlikte örgü Bu bireysel dikdörtgenler 395 00:17:38,550 --> 00:17:41,780 etkin bir şekilde işaretçi kullanarak Her numaranın yanındaki o 396 00:17:41,780 --> 00:17:46,065 Bu, bazı sonraki sayıya işaret da, bazı sonraki sayı işaret? 397 00:17:46,065 --> 00:17:47,940 Bu yüzden, diğer bir deyişle, hangi biz aslında isteseydi 398 00:17:47,940 --> 00:17:49,820 Böyle bir şey uygulamak? 399 00:17:49,820 --> 00:17:53,610 Peki ne yazık ki, bu dikdörtgenler, 9 ile en az bir, 17, 22 ile, 400 00:17:53,610 --> 00:17:57,040 ve benzeri, bu artık Tek sayılar ile güzel kareler. 401 00:17:57,040 --> 00:17:59,960 alt, dikdörtgen 9'un altında, örneğin, 402 00:17:59,960 --> 00:18:04,330 neyi temsil gerekir Bir gösterici, 32 bit olmak. 403 00:18:04,330 --> 00:18:09,460 Şimdi, ben henüz herhangi bir veri türü farkında değilim C ki size sadece bir int verir 404 00:18:09,460 --> 00:18:11,630 ama bir işaretçi tamamen. 405 00:18:11,630 --> 00:18:15,020 İstersek >> Peki çözüm ne Bu bizim kendi cevap icat? 406 00:18:15,020 --> 00:18:15,760 Evet? 407 00:18:15,760 --> 00:18:16,640 >> İZLEYİCİ: [Duyulmaz] 408 00:18:16,640 --> 00:18:17,360 >> DAVID J. MALAN: Bu nedir? 409 00:18:17,360 --> 00:18:17,880 >> İZLEYİCİ: Yeni yapı. 410 00:18:17,880 --> 00:18:19,590 >> DAVID J. MALAN: Evet, öyleyse neden yeni bir yapı oluşturmak değil, 411 00:18:19,590 --> 00:18:20,920 veya C, bir yapı içinde? 412 00:18:20,920 --> 00:18:25,990 Biz, eğer kısaca, daha önce yapılar gördüm Biz öğrenci yapısı ile ele nerede 413 00:18:25,990 --> 00:18:27,780 Bu gibi bir adı ve bir ev vardı kim. 414 00:18:27,780 --> 00:18:31,980 PSET 3 koparma bir bütün kullanılan structs-- GRect ve GOvals demet 415 00:18:31,980 --> 00:18:34,810 Stanford için oluşturulan Birlikte küme bilgiler. 416 00:18:34,810 --> 00:18:38,580 Peki biz bu aynı fikri alırsak anahtar kelimeler "typedef" ve "yapı" 417 00:18:38,580 --> 00:18:42,890 ve daha sonra bazı öğrenci özgü şeyler, ve aşağıdaki içine bu gelişmeye: 418 00:18:42,890 --> 00:18:46,210 TypeDef yapı node-- ve düğüm sadece çok genel bilgisayar bilimi 419 00:18:46,210 --> 00:18:49,980 Bir veri yapısı içinde bir şey için terim, bir veri yapısı içinde bir kap. 420 00:18:49,980 --> 00:18:53,900 Ben iddia Bir düğüm sahip oluyor Tamamen basit bir int n, 421 00:18:53,900 --> 00:18:58,810 ve daha sonra cryptically biraz, Bu ikinci hat, struct düğümü * yanında. 422 00:18:58,810 --> 00:19:01,300 Ama daha az teknik açıdan, ikinci çizgi nedir 423 00:19:01,300 --> 00:19:02,980 küme parantezi içindeki kod? 424 00:19:02,980 --> 00:19:03,737 Evet? 425 00:19:03,737 --> 00:19:04,851 >> İZLEYİCİ: [Duyulmaz] 426 00:19:04,851 --> 00:19:06,600 David J. MALAN A başka bir düğüme işaretçisi. 427 00:19:06,600 --> 00:19:09,910 Yani kuşkusuz, biraz şifreli sözdizimi. 428 00:19:09,910 --> 00:19:13,250 Ama tam anlamıyla okursanız, yanındaki bir değişken adıdır. 429 00:19:13,250 --> 00:19:14,410 Veri türü nedir? 430 00:19:14,410 --> 00:19:18,206 Bu, bu sefer biraz ayrıntılı var ancak * struct düğümün var. 431 00:19:18,206 --> 00:19:22,960 Biz bir şey yıldızı gördüm Her zaman, o bu veri türü için bir işaretçi demektir. 432 00:19:22,960 --> 00:19:26,810 Yani önümüzdeki görünüşte bir olduğunu Bir yapı düğüme işaretçisi. 433 00:19:26,810 --> 00:19:28,310 >> Şimdi, bir yapı düğümü nedir? 434 00:19:28,310 --> 00:19:31,044 Peki, o bkz fark sağ üst aynı kelimeler. 435 00:19:31,044 --> 00:19:33,960 Ve gerçekten de, aynı zamanda kelime görmek Buraya sol alt "düğüm". 436 00:19:33,960 --> 00:19:35,640 Ve bu aslında sadece bir kolaylık. 437 00:19:35,640 --> 00:19:39,930 Öğrenci tanımda sadece bir kez kelime "öğrenci" var. 438 00:19:39,930 --> 00:19:42,510 Ve bu bir öğrenci, çünkü var Nesne özüne değildi. 439 00:19:42,510 --> 00:19:45,340 Bir öğrencinin içinde bir şey var Bu başka bir öğrenciye işaret gerekiyor, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 Bu tür olurdu Gerçek dünyada garip. 442 00:19:47,630 --> 00:19:50,880 >> Ancak bir düğüm ile ilişkili Liste, bir düğüm istiyoruz 443 00:19:50,880 --> 00:19:53,970 benzer bir nesneye referans olması. 444 00:19:53,970 --> 00:19:57,900 Ve işte değişikliği değil fark sadece ne küme parantezi içinde var. 445 00:19:57,900 --> 00:20:00,800 Ama biz "düğüm" kelimesini ekleyin üst hem de 446 00:20:00,800 --> 00:20:02,930 alt eklemeden yerine "öğrenci." 447 00:20:02,930 --> 00:20:06,000 Ve bu sadece bir teknik detay böylece, yine, veri yapısı 448 00:20:06,000 --> 00:20:11,380 , özüne olabilen bir şekilde düğüm gibi bir başka düğüme işaret edebilir. 449 00:20:11,380 --> 00:20:13,840 >> Peki bu sonuçta ne Bizim için anlamı olacak? 450 00:20:13,840 --> 00:20:17,560 Eh, bir, bu şeyler içinde Bizim düğümün içeriği olduğunu. 451 00:20:17,560 --> 00:20:19,360 Buraya bu şey, Sağ üst, sadece böyledir 452 00:20:19,360 --> 00:20:20,860 Bu, yine, biz kendimize başvurabilirsiniz. 453 00:20:20,860 --> 00:20:23,401 Ve sonra dıştaki şeyler, düğüm yeni bir terim olduğu halde, 454 00:20:23,401 --> 00:20:25,500 belki de, hala var öğrenci ve ne gibi aynı 455 00:20:25,500 --> 00:20:27,520 SPL kaputun altında idi. 456 00:20:27,520 --> 00:20:31,095 >> Şimdi başlamak istedim Yani eğer Bu bağlantılı liste uygulanması, 457 00:20:31,095 --> 00:20:33,220 nasıl tercüme olabilir Böyle bir şey kodlamak için? 458 00:20:33,220 --> 00:20:35,350 Peki, sadece bir görelim Bir programın örnek, 459 00:20:35,350 --> 00:20:36,840 aslında bir bağlantılı liste kullanır. 460 00:20:36,840 --> 00:20:40,870 Bugünün dağıtım kodu arasında Liste Sıfır adında bir program. 461 00:20:40,870 --> 00:20:44,980 Ben bu çalıştırırsanız Ve ben bir süper yarattı Basit GUI, Grafik Kullanıcı Arayüzü, 462 00:20:44,980 --> 00:20:46,460 ama gerçekten sadece printf oluyor. 463 00:20:46,460 --> 00:20:50,930 Ve şimdi kendime bir kaç menü verdik options-- Sil, Ekle, Arama, 464 00:20:50,930 --> 00:20:51,750 ve Traverse. 465 00:20:51,750 --> 00:20:52,630 Ve çıkın. 466 00:20:52,630 --> 00:20:55,970 Bunlar sadece ortak işlemler bir bağlantı listesi olarak bilinen veri yapısı. 467 00:20:55,970 --> 00:20:58,409 >> Şimdi, gidiyor Sil Listeden bir numarayı silmek. 468 00:20:58,409 --> 00:21:00,200 Ekle eklemek için gidiyor listeye bir numara. 469 00:21:00,200 --> 00:21:02,181 Arama bakmak için gidiyor Listede numarası. 470 00:21:02,181 --> 00:21:04,930 Ve travers sadece bir fantezi yoludur söyleyerek, listede yürümek, 471 00:21:04,930 --> 00:21:06,245 çıktısını, ama o kadar. 472 00:21:06,245 --> 00:21:07,720 Hiçbir şekilde değiştirmeyin. 473 00:21:07,720 --> 00:21:08,570 >> Peki bunu deneyelim. 474 00:21:08,570 --> 00:21:10,160 En go ahead ve tip 2 edelim. 475 00:21:10,160 --> 00:21:12,710 Ve sonra ben gidiyorum numara eklemek, 9 söylüyorlar. 476 00:21:12,710 --> 00:21:13,620 Girin. 477 00:21:13,620 --> 00:21:17,480 Ve şimdi benim programı sadece bir demek programlanmış, liste şimdi 9. 478 00:21:17,480 --> 00:21:20,190 Şimdi, ben önde gidersem ve Tekrar takın yapmak, izin 479 00:21:20,190 --> 00:21:23,680 Beni go ahead ve uzaklaştırmak ve 17 yazın. 480 00:21:23,680 --> 00:21:25,770 Şimdi benim liste daha sonra, 17 9. 481 00:21:25,770 --> 00:21:27,750 Ben tekrar takın yaparsanız, en atlayın edelim. 482 00:21:27,750 --> 00:21:32,400 Yerine 22, resim başına biz ettik Burada bakarak, bana atlayabilirsiniz izin 483 00:21:32,400 --> 00:21:34,630 ve yanındaki 26 yerleştirin. 484 00:21:34,630 --> 00:21:36,230 Yani 26 yazın gidiyorum. 485 00:21:36,230 --> 00:21:37,755 beklediğim gibi listesidir. 486 00:21:37,755 --> 00:21:40,630 Ama şimdi, sadece bu kod görmek için Esnek olacak, şimdi bana izin 487 00:21:40,630 --> 00:21:43,520 tip 22, burada en azından kavramsal, biz eğer 488 00:21:43,520 --> 00:21:46,520 Bu gerçekten hangi sıralanır tutulması Şu anda başka bir amaç olacak, 489 00:21:46,520 --> 00:21:48,690 17 ve 26 arasında gitmeli. 490 00:21:48,690 --> 00:21:50,270 Yani Enter tuşuna basın. 491 00:21:50,270 --> 00:21:51,380 Nitekim, bu işleri. 492 00:21:51,380 --> 00:21:54,950 Ve şimdi beni eklemek izin son resim, 34 başına. 493 00:21:54,950 --> 00:21:55,450 >> Tamam. 494 00:21:55,450 --> 00:21:58,980 Yani şimdi benim için şart izin Sil ve Traverse ve Arama yapmak, 495 00:21:58,980 --> 00:21:59,760 Aslında işe. 496 00:21:59,760 --> 00:22:04,180 Ben Ara çalıştırabilirim Aslında, diyelim Enter, sayı 22 arayın. 497 00:22:04,180 --> 00:22:05,010 Bu 22 bulundu. 498 00:22:05,010 --> 00:22:07,580 Yani bu ne Program Listesi Sıfır yapar. 499 00:22:07,580 --> 00:22:10,230 >> Ama aslında ne oluyor o Bu uygular? 500 00:22:10,230 --> 00:22:14,530 Peki, ilk ben, ve gerçekten olabilir Ben bir dosya list0.h denilen, var. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 Ve bu var bir yerde çizgi, typedef struct düğüm, 503 00:22:20,690 --> 00:22:24,850 Sonra ben, benim küme parantezi var int n, ve Sonra tanımı neydi struct--? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Struct düğüm yanındaki. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 Bu yüzden yıldız ihtiyacımız var. 508 00:22:31,045 --> 00:22:33,420 Şimdi teknik olarak biz içine almak Burada çizim alışkanlığı. 509 00:22:33,420 --> 00:22:35,670 Sen ders kitaplarını görebilirsiniz ve Online başvurular var bunu. 510 00:22:35,670 --> 00:22:36,660 Bu işlevsel eşdeğerdir. 511 00:22:36,660 --> 00:22:37,980 Aslında, bu biraz daha tipiktir. 512 00:22:37,980 --> 00:22:40,563 Ama ben ne ile tutarlı olacak Geçen zaman yaptım ve bunu. 513 00:22:40,563 --> 00:22:42,350 Ve sonra son olarak, ben bunu yapmak için gidiyorum. 514 00:22:42,350 --> 00:22:45,550 >> Bir başlık dosyasında Yani bir yerde, list0.h içinde 515 00:22:45,550 --> 00:22:49,200 Bugün bu yapı tanımı, ve belki diğer bazı şeyler. 516 00:22:49,200 --> 00:22:52,580 Bu arada list0c içinde var bir kaç şey olacak. 517 00:22:52,580 --> 00:22:54,740 Ama biz gidiyoruz sadece başlatmak ve bu bitirmek değil. 518 00:22:54,740 --> 00:22:59,690 List0.h Ben istiyorum bir dosya Benim C dosyasına dahil etmek. 519 00:22:59,690 --> 00:23:03,910 Ve sonra bazı noktada ben değilim ana, int var geçersiz olacak. 520 00:23:03,910 --> 00:23:06,530 Ve sonra ben gidiyorum Yapılacaklar bazı burada var. 521 00:23:06,530 --> 00:23:10,620 Ben de bir var gidiyorum prototip, boşluk, arama, int gibi, 522 00:23:10,620 --> 00:23:13,610 n, hayatta kimin amacı Bir eleman aramak için. 523 00:23:13,610 --> 00:23:18,310 Ve sonra buraya ben iddia Bugünün kod geçersiz, arama, int, n, 524 00:23:18,310 --> 00:23:21,020 noktalı virgül ancak açık kaşlı. 525 00:23:21,020 --> 00:23:25,049 Ve şimdi ben bir şekilde aramak istiyorum Bu listede bir öğe için. 526 00:23:25,049 --> 00:23:27,340 Ama biz yeterince yok Henüz ekranda bilgiler. 527 00:23:27,340 --> 00:23:29,800 Ben aslında var listesini kendisi temsil etmektedir. 528 00:23:29,800 --> 00:23:33,070 Yani bir şekilde biz uygulamak Bir programda bir bağlantılı liste 529 00:23:33,070 --> 00:23:37,520 Ben tür şeyler yapmak istiyorum edilir Burada listesini bağlantılı beyan ederim. 530 00:23:37,520 --> 00:23:40,520 Basitlik için, ben yapacağım Bu hatta genel biz olsa, küresel 531 00:23:40,520 --> 00:23:41,645 Bu çok yapmamalısınız. 532 00:23:41,645 --> 00:23:43,260 Ama bu örnek basitleştirecek. 533 00:23:43,260 --> 00:23:45,890 Yani beyan etmek istiyorum Burada bir bağlantılı liste kadar. 534 00:23:45,890 --> 00:23:47,010 Şimdi, ben bunu nasıl yapabilirim? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> İşte bir bağlantılı liste resmi var. 537 00:23:50,750 --> 00:23:53,030 Ve ben gerçekten yok nasıl şu anda biliyorum 538 00:23:53,030 --> 00:23:56,710 Ben temsil hakkında gitmek için gidiyorum Sadece biriyle o kadar çok şey 539 00:23:56,710 --> 00:23:58,040 bellekte değişken. 540 00:23:58,040 --> 00:23:59,160 Ama geri bir an düşünüyorum. 541 00:23:59,160 --> 00:24:00,830 Biz aldık Bütün bu zaman dizeleri, daha sonra hangi biz 542 00:24:00,830 --> 00:24:02,913 diziler olarak ortaya karakterler, daha sonra, biz 543 00:24:02,913 --> 00:24:05,740 Sadece bir işaretçi olarak ortaya İlk karaktere 544 00:24:05,740 --> 00:24:08,890 karakter dizisi olarak Bu boş sonlandırılmış oluyor. 545 00:24:08,890 --> 00:24:13,530 Bu mantıkla, ve bu So düşüncelerinizi tohumlama resim tür, 546 00:24:13,530 --> 00:24:17,964 biz aslında ne yazmak gerekir bizim Kod bağlantılı liste temsil etmek? 547 00:24:17,964 --> 00:24:21,130 Ne kadar bu bilgilerin ihtiyacımız var C kodu yakalamak için, sen söylerdin? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 Evet? 550 00:24:23,154 --> 00:24:24,738 >> İZLEYİCİ: Biz bir düğüme bir işaretçi gerekir. 551 00:24:24,738 --> 00:24:26,237 DAVID J. MALAN: Bir düğüme bir işaretçi. 552 00:24:26,237 --> 00:24:29,320 Özellikle, düğüm, sizin olur içgüdüleri bir işaretçi tutmak olacak? 553 00:24:29,320 --> 00:24:30,026 >> İZLEYİCİ: İlk düğüm. 554 00:24:30,026 --> 00:24:31,942 >> DAVID J. MALAN: Evet, Muhtemelen sadece ilk. 555 00:24:31,942 --> 00:24:34,030 Ve, birinci fark düğüm başka bir şekildir. 556 00:24:34,030 --> 00:24:37,690 Bu yapı sadece yarısı büyüklüğünde, çünkü gerçekten sadece bir işaretçi var. 557 00:24:37,690 --> 00:24:44,650 Yani gerçekten neler yapabileceğini beyan olduğunu bağlantılı liste * tipi düğümün olmak. 558 00:24:44,650 --> 00:24:47,780 Ve Sadece ilk diyelim ve null olarak başlatılamadı. 559 00:24:47,780 --> 00:24:49,910 Yani boş, yine geliyor ise Burada resmin içine. 560 00:24:49,910 --> 00:24:53,620 Sadece boş özel gibi kullanılan getString gibi şeyler için dönüş değeri 561 00:24:53,620 --> 00:24:57,770 ve malloc, boş da sıfır işaretçi, bir işaretçi eksikliği, 562 00:24:57,770 --> 00:24:58,430 eğer sen. 563 00:24:58,430 --> 00:25:00,309 Sadece bir şey henüz burada demektir. 564 00:25:00,309 --> 00:25:02,100 Şimdi ilk ben oldum olabilir Bu şey denir. 565 00:25:02,100 --> 00:25:04,200 Ben "liste" denilen olabilirdi veya diğer şeylerin herhangi bir sayı. 566 00:25:04,200 --> 00:25:06,960 Ama böylece "ilk" olarak arıyorum Bu resim ile o çizgiler kadar. 567 00:25:06,960 --> 00:25:10,280 Yani sadece bir dize gibi temsil edilebilir İlk bayt adresi ile, 568 00:25:10,280 --> 00:25:11,280 yani bir bağlantılı liste yapabilirsiniz. 569 00:25:11,280 --> 00:25:13,480 Ve biz diğer verileri görürsünüz yapıları temsil 570 00:25:13,480 --> 00:25:16,700 Sadece bir işaretçi ile, 32-bit ok, işaret 571 00:25:16,700 --> 00:25:18,740 yapısında ilk düğümde. 572 00:25:18,740 --> 00:25:20,340 >> Ama şimdi bir sorunu tahmin edelim. 573 00:25:20,340 --> 00:25:23,230 Ben sadece hatırlayarak ediyorsam Benim programda adresiniz 574 00:25:23,230 --> 00:25:27,220 Birinci düğüm, birinci Bu veri yapısı içinde dikdörtgen, 575 00:25:27,220 --> 00:25:31,760 vardı daha hakkında dava olmak ne Benim listesinin geri kalanı uygulanması? 576 00:25:31,760 --> 00:25:35,820 Gidiyor bir anahtar detay nedir Bu aslında çalışır sağlamak için? 577 00:25:35,820 --> 00:25:39,250 Ve I "gerçekten çalışıyor" çok bir dize gibi, demek, 578 00:25:39,250 --> 00:25:42,180 bize ilk karakter gidelim saniye Davin adına, 579 00:25:42,180 --> 00:25:44,755 üçüncü için Dördüncü, sonuna kadar, 580 00:25:44,755 --> 00:25:47,880 Biz sonunda olduğunuzda nasıl biliyoruz Şöyle bir bağlantılı liste? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 Ne zaman boş olduğunu. 583 00:25:50,660 --> 00:25:53,640 Ve ben bu tür temsil ettik Bir elektrik mühendisi kudret gibi, 584 00:25:53,640 --> 00:25:56,420 Küçük topraklama ile sembolü, türlü. 585 00:25:56,420 --> 00:25:58,246 Ama bu sadece bu durumda null anlamına gelir. 586 00:25:58,246 --> 00:26:00,370 Bunu herhangi bir sayı çizebilirsiniz yolları, ama bu yazar 587 00:26:00,370 --> 00:26:02,800 Burada bu sembolü kullanmaya oldu. 588 00:26:02,800 --> 00:26:06,260 Biz çekimi konum olarak >> Çok uzun Birlikte bu düğümlerin hepsi, 589 00:26:06,260 --> 00:26:08,600 Sadece nerede hatırlayarak Birincisi, bu nedenle uzun 590 00:26:08,600 --> 00:26:11,760 biz özel bir sembol koymak gibi Listedeki son düğüm 591 00:26:11,760 --> 00:26:15,130 Bu çünkü biz, null adlı kullanacağız Elimizdeki mevcut ne varsa, 592 00:26:15,130 --> 00:26:16,480 Bu liste tamamlandı. 593 00:26:16,480 --> 00:26:20,190 Ve ben bile sadece size bir işaretçi vermek İlk eleman, sen, programcı, 594 00:26:20,190 --> 00:26:22,486 Kesinlikle geri kalanını erişebilirsiniz. 595 00:26:22,486 --> 00:26:24,360 Ama senin kafasında let biraz dolaşmak, 596 00:26:24,360 --> 00:26:26,140 Zaten değilseniz Oldukça ne wandered-- 597 00:26:26,140 --> 00:26:28,723 çalışma süresi olacak Bu listede bir şey bulmak? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 O Kahretsin, n büyük Ey var, hangi adalet, kötü değil. 600 00:26:33,470 --> 00:26:34,800 Ama doğrusaldır. 601 00:26:34,800 --> 00:26:37,980 Biz ne özelliği vazgeçmiş Daha fazla hareket ettirerek dizilerin 602 00:26:37,980 --> 00:26:43,130 dinamik Bu resim doğru Birlikte dokunmuş veya düğümleri bağlantılı? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 Biz rastgele erişimi verdik. 605 00:26:46,687 --> 00:26:48,770 Bir dizi yüzünden güzel matematiksel herşey 606 00:26:48,770 --> 00:26:50,340 geri geri geri geri. 607 00:26:50,340 --> 00:26:52,370 Hatta bu resim olsa güzel görünüyor, ve hatta 608 00:26:52,370 --> 00:26:55,830 bu düğümlerin gibi görünüyor olsa da güzel gerçekte, aralıklı edilir 609 00:26:55,830 --> 00:26:56,830 Onlar her yerde olabilir. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99 şu düğümleri herhangi bir yerde olabilir. 611 00:27:01,590 --> 00:27:05,960 Malloc bellek ayrılamadı yok çünkü yığından, ama her yerde yığın. 612 00:27:05,960 --> 00:27:09,080 Sen mutlaka bu olduğunu bilmiyorum Geri olacak geri geri. 613 00:27:09,080 --> 00:27:12,460 Ve gerçeklik en çok bu resim oldukça bu güzel olacak değil. 614 00:27:12,460 --> 00:27:16,140 >> Bu yüzden biraz almak için gidiyor Bu işlevi uygulamak için çalışıyoruz. 615 00:27:16,140 --> 00:27:17,880 Yani şimdi arama uygulamak verelim. 616 00:27:17,880 --> 00:27:20,250 Ve biz tür görürsünüz Bunu yapmanın akıllıca yoludur. 617 00:27:20,250 --> 00:27:24,660 Ben bir arama fonksiyonu olduğumu Yani eğer ve Ben bir değişken, tamsayı n verilen ediyorum 618 00:27:24,660 --> 00:27:28,490 bakmak için, bilmem gerekiyor içine bakarak yeni sözdizimi 619 00:27:28,490 --> 00:27:32,400 olan bir yapının n bulmak için işaret etti. 620 00:27:32,400 --> 00:27:33,210 O yüzden bu yapalım. 621 00:27:33,210 --> 00:27:36,030 >> Bu yüzden ilk ben gidiyorum önde ve * düğüm beyan ederim. 622 00:27:36,030 --> 00:27:39,400 Ve ben onu aramak için gidiyorum Sadece kongre tarafından gösterici. 623 00:27:39,400 --> 00:27:41,710 Ve ben ilk onu başlatmak için gidiyorum. 624 00:27:41,710 --> 00:27:43,770 Ve şimdi ben bunu yapabilirsiniz şekillerde bir dizi. 625 00:27:43,770 --> 00:27:45,436 Ama ortak bir yaklaşım almaya gidiyorum. 626 00:27:45,436 --> 00:27:50,180 Işaretçi eşit olmasa da null, ve bu geçerli sözdizimi. 627 00:27:50,180 --> 00:27:54,550 Ve sadece bu yüzden, aşağıdakileri yapmanız anlamına gelir Uzun hiçbir şey işaret değil gibi. 628 00:27:54,550 --> 00:27:55,800 Ne yapmak istiyorsun? 629 00:27:55,800 --> 00:28:01,939 >> Gösterici nokta n, bana geri gelsin Buna, equals-- ne eşittir? 630 00:28:01,939 --> 00:28:03,105 Ne değer ben arıyorum? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 geçirilen fiili n. 633 00:28:06,590 --> 00:28:09,020 Yani burada bir başka özellik var C ve birçok dilde. 634 00:28:09,020 --> 00:28:13,705 Hatta yapı denilen düğümün olsa Bir değer n, tamamen meşru vardır 635 00:28:13,705 --> 00:28:17,530 Ayrıca yerel bir argüman var veya değişken n denir. 636 00:28:17,530 --> 00:28:20,085 Hatta biz, birlikte Çünkü İnsan gözü, ayırt edebilir 637 00:28:20,085 --> 00:28:22,087 bu n muhtemelen olduğu Bu n farklıdır. 638 00:28:22,087 --> 00:28:23,420 Sözdizimi farklı olduğundan. 639 00:28:23,420 --> 00:28:26,211 Bir nokta ve bir işaretçi var, Bu bir ise böyle bir şey vardır. 640 00:28:26,211 --> 00:28:27,290 Yani bu Tamam. 641 00:28:27,290 --> 00:28:29,120 Aynı şeyler onları aramak için Tamam. 642 00:28:29,120 --> 00:28:32,380 Bunu bulmak yoksa >> ben değilim bir şey yapmak istiyorum gidiyor 643 00:28:32,380 --> 00:28:35,000 gibi biz n bulundu duyurdu. 644 00:28:35,000 --> 00:28:37,930 Ve biz o kadar bırakacağım Yorum veya pseudocode kodu. 645 00:28:37,930 --> 00:28:40,190 Else ve burada ilginç kısmı, ne 646 00:28:40,190 --> 00:28:47,320 Ben Geçerli düğümün eğer yapmak istiyorsun Ben umurumda n içeren değil? 647 00:28:47,320 --> 00:28:50,700 Nasıl aşağıdaki elde edebilirim? 648 00:28:50,700 --> 00:28:53,710 Eğer benim parmak an PTR olduğunu ve var 649 00:28:53,710 --> 00:28:55,920 ne işaret İlk, işaret edilir 650 00:28:55,920 --> 00:28:59,290 Benim parmak hareket nasıl kodundaki sonraki düğüme? 651 00:28:59,290 --> 00:29:01,915 Peki, biz konum kırıntı ne Bu durumda takip edecek? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 HEDEF KİTLE: [duyulamaz]. 654 00:29:04,380 --> 00:29:05,630 DAVID J. MALAN: Evet, bu yüzden yanında. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 Ben geri dönmek Yani benim Burada kod, gerçekten, ben değilim 657 00:29:09,824 --> 00:29:12,990 , işaretçi devam edin ve diyecek ki bu sadece geçici bir değişken-- olduğunu 658 00:29:12,990 --> 00:29:15,320 Bir garip isim, ptr, ancak Sadece temp-- gibi 659 00:29:15,320 --> 00:29:19,234 Ben işaretçi ayarlamak için gidiyorum ne olursa olsun işaretçi bu-- eşit 660 00:29:19,234 --> 00:29:22,150 ve yine, bu bir olacak yanında moment-- nokta için biraz buggy. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 Diğer bir deyişle, ben almaya gidiyorum benim Bu düğümün işaret ediyor parmak 663 00:29:26,550 --> 00:29:31,247 Burada ve ben seni biliyorum, demek için gidiyorum Ne, sonraki alana bir göz atın 664 00:29:31,247 --> 00:29:33,330 ve parmağınızı hareket ettirin ne olursa olsun işaret ediyor. 665 00:29:33,330 --> 00:29:35,163 Ve bu gidiyor , tekrar, tekrar tekrar. 666 00:29:35,163 --> 00:29:37,630 Ama benim parmak yapar hiç bir şey yapıyor durdurmak? 667 00:29:37,630 --> 00:29:40,095 En kısa sürede ne kod tekmeler hattı gibi? 668 00:29:40,095 --> 00:29:40,970 HEDEF KİTLE: [Duyulmaz] 669 00:29:40,970 --> 00:29:43,060 DAVID J. MALAN: Eğer nokta ise işaretçi null eşit değildir. 670 00:29:43,060 --> 00:29:44,900 Bir noktada benim parmak At boş işaret olacak 671 00:29:44,900 --> 00:29:47,070 ve ben fark gidiyorum bu listenin sonu. 672 00:29:47,070 --> 00:29:48,910 Şimdi, bu biraz basitlik beyaz yalan. 673 00:29:48,910 --> 00:29:51,580 Bu çıkıyor ki olsa bile biz sadece bu nokta gösterim öğrendim 674 00:29:51,580 --> 00:29:55,220 yapılar için, işaretleyici bir yapı değildir. 675 00:29:55,220 --> 00:29:56,580 ptr nedir? 676 00:29:56,580 --> 00:29:58,350 Sadece daha nitpicky olmak. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 Bir düğüme bir işaretçi var. 679 00:30:01,360 --> 00:30:03,120 Bu bir düğüm kendisi değil. 680 00:30:03,120 --> 00:30:06,650 Ben burada hiçbir yıldız olsaydı, işaretçi absolutely-- bir düğüm var. 681 00:30:06,650 --> 00:30:08,650 Bu hafta biri gibi Bir değişkenin beyanı, 682 00:30:08,650 --> 00:30:10,120 Hatta kelime "düğüm" yeni olmasına rağmen. 683 00:30:10,120 --> 00:30:13,860 >> Ama biz tanıtmak en kısa sürede bir Yıldız, şimdi bir düğüme bir işaretçi var. 684 00:30:13,860 --> 00:30:17,960 Ve ne yazık ki kullanamazsınız bir işaretçi için nokta notasyonu. 685 00:30:17,960 --> 00:30:21,070 Sen ok kullanmak zorunda notasyonu, hangi çarpıcı, 686 00:30:21,070 --> 00:30:23,470 İlk kez herhangi bir parça sözdizimi sezgisel görünüyor. 687 00:30:23,470 --> 00:30:25,245 Bu anlamıyla, bir ok gibi görünüyor. 688 00:30:25,245 --> 00:30:26,370 Ve böylece iyi bir şey. 689 00:30:26,370 --> 00:30:28,995 Ve buraya tam anlamıyla Bir ok gibi görünüyor. 690 00:30:28,995 --> 00:30:31,870 Yani ben değil la-- düşünüyorum Ben ötürü-- fazla işlemekle düşünüyorum ben 691 00:30:31,870 --> 00:30:34,120 son yeni parça olduğunu düşünüyorum sözdizimi görmek için gidiyoruz. 692 00:30:34,120 --> 00:30:36,500 Ve şükür ki, gerçekten de var Biraz daha sezgisel. 693 00:30:36,500 --> 00:30:40,090 >> Şimdi, o sizin için kim eski yol tercih olabilir, 694 00:30:40,090 --> 00:30:42,550 Hala nokta gösterimini kullanabilirsiniz. 695 00:30:42,550 --> 00:30:45,380 Ama Pazartesi yıllara göre konuşma, biz ilk 696 00:30:45,380 --> 00:30:50,530 Bu gidip, oraya gitmek gerekir adres, ve sonra alanına erişmek. 697 00:30:50,530 --> 00:30:51,897 Yani bu da doğrudur. 698 00:30:51,897 --> 00:30:53,730 Ve açıkçası, bu bir daha bilgiçlik küçük. 699 00:30:53,730 --> 00:30:56,530 Kelimenin tam anlamıyla söylüyorsun, inceleyebilirsiniz işaretçi ve oraya gitmek. 700 00:30:56,530 --> 00:30:59,320 Sonra .n kapmak, alan n çağırdı. 701 00:30:59,320 --> 00:31:01,370 Ama açıkçası, hiç kimse istiyor yazın veya bu okumak için. 702 00:31:01,370 --> 00:31:03,620 Ve böylece dünya icat ok gösterimi, hangi 703 00:31:03,620 --> 00:31:06,980 aynı, eşdeğer sadece sözdizimsel şeker var. 704 00:31:06,980 --> 00:31:10,570 Bu söyleyerek Yani süslü bir şekilde iyi görünüyor, ya da basit görünüyor. 705 00:31:10,570 --> 00:31:12,296 >> Peki şimdi başka bir şey yapacağım. 706 00:31:12,296 --> 00:31:15,420 Ben ettik kez "mola" demek için gidiyorum o yüzden onu aramaya tutmayız bulundu. 707 00:31:15,420 --> 00:31:17,620 Ama bu özü olan Bir arama fonksiyonu. 708 00:31:17,620 --> 00:31:21,710 Ama içinde, çok daha kolay sonunda, kod üzerinden yürümek değil. 709 00:31:21,710 --> 00:31:25,570 Bu gerçekten resmi uygulamasıdır Bugünün dağıtım kodunda arama. 710 00:31:25,570 --> 00:31:30,530 Ben bu ekleme değil söylemek cesaret yürümek özellikle eğlenceli 711 00:31:30,530 --> 00:31:33,180 görsel, ne de olsa, silme Günün sonunda olsa 712 00:31:33,180 --> 00:31:35,460 onlar oldukça aşağı kaynatın Basit sezgisel tarama. 713 00:31:35,460 --> 00:31:36,330 >> Yani bu yapalım. 714 00:31:36,330 --> 00:31:39,250 Burada mizah beni olacak, ben yaptım stres topları bir demet getirmek. 715 00:31:39,250 --> 00:31:40,620 Ben sayıların bir demet getirdi. 716 00:31:40,620 --> 00:31:46,562 Ve biz sadece bir kaç gönüllü alabilir 9, 17, 20, 22, 29 ve 34 temsil etmek? 717 00:31:46,562 --> 00:31:48,270 Yani aslında herkes kim burada bugün. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 Yani, bir, iki, üç oldu Dört, beş, altı kişi. 720 00:31:52,760 --> 00:31:55,740 Ve ben hayır, bakın go-- istendi ettik Arkada bir ellerini yükseltir. 721 00:31:55,740 --> 00:32:01,910 Yeterli, bir, iki, üç, dört, five-- bana altı balance-- yük verelim. 722 00:32:01,910 --> 00:32:03,051 Tamam, altı yukarı gel. 723 00:32:03,051 --> 00:32:04,050 Biz diğer insanları gerekir. 724 00:32:04,050 --> 00:32:05,460 Biz ekstra stres topları getirdi. 725 00:32:05,460 --> 00:32:08,200 Ve eğer yapabilirsen, için Sadece bir an, çizgi 726 00:32:08,200 --> 00:32:10,490 kendinizi yukarı sadece Burada bu resimdeki gibi. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> Tamam. 729 00:32:15,959 --> 00:32:17,125 Senin adın ne, bakalım? 730 00:32:17,125 --> 00:32:17,550 >> İZLEYİCİ: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> DAVID J. MALAN: Andrew, Eğer sayı 9 vardır. 732 00:32:18,800 --> 00:32:19,540 Tanıştığımıza memnun oldum. 733 00:32:19,540 --> 00:32:20,400 Hadi bakalım. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 HEDEF KİTLE: Jen. 736 00:32:22,176 --> 00:32:22,662 DAVID J. MALAN: Jen. 737 00:32:22,662 --> 00:32:23,162 David. 738 00:32:23,162 --> 00:32:23,765 Sayı 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 Evet? 741 00:32:25,450 --> 00:32:26,400 >> İZLEYİCİ: Ben Julia değilim. 742 00:32:26,400 --> 00:32:26,980 >> DAVID J. MALAN: Julia, David. 743 00:32:26,980 --> 00:32:27,545 Sayı 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 HEDEF KİTLE: Hıristiyan. 746 00:32:29,340 --> 00:32:30,715 DAVID J. MALAN: Hıristiyan, David. 747 00:32:30,715 --> 00:32:31,541 Sayı 22. 748 00:32:31,541 --> 00:32:32,040 Ve? 749 00:32:32,040 --> 00:32:32,649 >> İZLEYİCİ: JP. 750 00:32:32,649 --> 00:32:33,440 DAVID J. MALAN: JP. 751 00:32:33,440 --> 00:32:34,880 Sayı 29. 752 00:32:34,880 --> 00:32:37,080 Yani Uh oh go ahead ve in-- olsun. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 Yanında Olmak. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 Herkes bir işaretleyici var mı? 760 00:32:43,682 --> 00:32:44,890 HEDEF KİTLE: Ben bir Sharpie var. 761 00:32:44,890 --> 00:32:45,660 DAVID J. MALAN: Bir Sharpie var? 762 00:32:45,660 --> 00:32:46,159 TAMAM MI. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 Ve herkes bir parça kağıt var mı? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 Ders kaydedin. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 Hadi. 769 00:32:55,362 --> 00:32:56,320 HEDEF KİTLE: Biz onu var. 770 00:32:56,320 --> 00:32:57,600 DAVID J. MALAN: Biz onu var? 771 00:32:57,600 --> 00:32:58,577 Pekala, teşekkür ederim. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 İşte başlıyoruz. 774 00:33:02,520 --> 00:33:03,582 Bu sizden miydi? 775 00:33:03,582 --> 00:33:04,540 Sen sadece bir gün kurtardı. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 Yani 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 Tamam. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 Ben 29 yanlış yazılmış, ama Tamam. 782 00:33:14,890 --> 00:33:15,720 Devam et. 783 00:33:15,720 --> 00:33:18,114 Pekala, sana vereceğim kalem geri an. 784 00:33:18,114 --> 00:33:19,280 Yani biz burada bu millet var. 785 00:33:19,280 --> 00:33:20,330 Diğer bir atalım. 786 00:33:20,330 --> 00:33:23,750 Gabe, oynamak istiyorum Burada ilk unsur? 787 00:33:23,750 --> 00:33:25,705 Biz gelin sizi gerekir Bu güzel millet. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 Yani 9, 17, 20, 22, sıralama 29, ve sonra 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 Birini kaybetmek mi? 792 00:33:33,325 --> 00:33:33,950 Ben bir 34 var. 793 00:33:33,950 --> 00:33:36,730 Nerede isteyen did-- Tamam, 34 olmak? 794 00:33:36,730 --> 00:33:37,605 Tamam, 34, yukarı gel. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 Pekala, bu olacak doruk değer. 797 00:33:41,220 --> 00:33:41,550 Adınız ne? 798 00:33:41,550 --> 00:33:42,040 >> İZLEYİCİ: Peter. 799 00:33:42,040 --> 00:33:43,456 >> DAVID J. MALAN: Peter yukarı gel. 800 00:33:43,456 --> 00:33:46,810 Pekâlâ, burada bir düğümlerin sürü. 801 00:33:46,810 --> 00:33:49,060 Eğer çocuklar her temsil Bu dikdörtgenler biri. 802 00:33:49,060 --> 00:33:51,930 Ve Gabe, biraz garip dışarı adam, ilki temsil etmektedir. 803 00:33:51,930 --> 00:33:54,850 Yani onun işaretçi biraz daha küçüktür herkesten daha ekranda. 804 00:33:54,850 --> 00:33:58,120 Ve bu durumda, hesabınızla her sol eller, aşağı işaret ya gidiyor 805 00:33:58,120 --> 00:34:01,085 böylece bu yüzden, boş temsil Sadece bir işaretçi bulunmaması, 806 00:34:01,085 --> 00:34:03,210 ya da işaret edilecek gidiyor senin yanında bir düğüm at. 807 00:34:03,210 --> 00:34:05,440 >> Peki şimdi sen süslüyor eğer resim gibi kendinizi 808 00:34:05,440 --> 00:34:07,585 Burada, go ahead ve nokta Gabe'e, birbirlerine 809 00:34:07,585 --> 00:34:11,030 özelde işaret etti sayı 9 listesini temsil etmek. 810 00:34:11,030 --> 00:34:14,050 Tamam, ve sayı 34, sol el Sadece zemin işaret edilmelidir. 811 00:34:14,050 --> 00:34:15,750 >> Tamam, bu yüzden bu bağlantılı liste. 812 00:34:15,750 --> 00:34:17,580 Yani bu söz konusu senaryodur. 813 00:34:17,580 --> 00:34:20,210 Ve gerçekten de, bu temsili sorunların bir sınıf 814 00:34:20,210 --> 00:34:21,929 Eğer kodu ile çözmeye çalışın diye. 815 00:34:21,929 --> 00:34:25,020 Sen sonuçta eklemek istiyorum listeye yeni bir unsur. 816 00:34:25,020 --> 00:34:27,494 Bu durumda, biz gidiyoruz numara 55 takarak deneyin. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 Ama orada oluyor Farklı durumlar dikkate. 819 00:34:30,860 --> 00:34:34,409 Ve gerçekten de, bu bir olacak büyük resmi burada paketler, bir 820 00:34:34,409 --> 00:34:35,659 Farklı durumlar nelerdir. 821 00:34:35,659 --> 00:34:39,120 Koşulları varsa veya farklı nelerdir Programınız olabilir dalları? 822 00:34:39,120 --> 00:34:42,024 >> Peki, numarası için çalışıyoruz Biz 55 olmak artık biliyoruz eklemek, 823 00:34:42,024 --> 00:34:44,650 ama bilmiyordum peşin, ben daresay 824 00:34:44,650 --> 00:34:47,840 en az üç düşer olası durumlar. 825 00:34:47,840 --> 00:34:49,717 Nerede yeni bir unsur olabilir? 826 00:34:49,717 --> 00:34:51,050 HEDEF KİTLE: Ve son veya orta. 827 00:34:51,050 --> 00:34:54,150 David J. MALAN: sonunda, içinde orta veya başında. 828 00:34:54,150 --> 00:34:56,650 Yani en azından orada iddia Üç problemler çözmek gerekiyor. 829 00:34:56,650 --> 00:34:58,691 En belki de ne seçeyim belki basit 830 00:34:58,691 --> 00:35:01,090 bir, nerede yeni eleman başlangıçta aittir. 831 00:35:01,090 --> 00:35:04,040 Yani oldukça kodu gidiyorum gibi sadece yazdı, hangi arama. 832 00:35:04,040 --> 00:35:07,670 Ve ben, ptr için gidiyorum hangi Ben, benim parmak ile burada temsil edeceğiz 833 00:35:07,670 --> 00:35:08,370 her zaman olduğu gibi. 834 00:35:08,370 --> 00:35:12,430 >> Ve, ne değeri hatırlıyorum biz ptr başlatılamadı mi? 835 00:35:12,430 --> 00:35:15,300 Bu yüzden başlangıçta null onu başlatıldı. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 Ama sonra biz bir kez ne yaptın arama fonksiyonu içinde vardı? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 Biz, birinci eşit set Bunu yaparken anlamına gelmez ki. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 Ben ilk eşit ptr ayarlarsanız, ne elimi gerçekten işaret olmalı? 842 00:35:30,570 --> 00:35:31,070 Sağ. 843 00:35:31,070 --> 00:35:33,290 Gabe ve ben gidiyoruz Yani eğer Burada eşit değerler için, 844 00:35:33,290 --> 00:35:34,760 Biz 9 numarada hem noktaya gerekir. 845 00:35:34,760 --> 00:35:36,420 >> Yani bu bizim hikayenin başlangıcı oldu. 846 00:35:36,420 --> 00:35:38,700 Ve şimdi bu, sadece basittir olsa bile sözdizimi yeni. 847 00:35:38,700 --> 00:35:40,580 Kavramsal olarak bu sadece doğrusal arama motorudur. 848 00:35:40,580 --> 00:35:42,750 9 eşit 55 mi? 849 00:35:42,750 --> 00:35:45,559 Ya da daha doğrusu, en az 9 diyelim. 850 00:35:45,559 --> 00:35:47,600 Ben çalışıyorum, çünkü 55 koymak nereye anlamaya. 851 00:35:47,600 --> 00:35:51,270 9 daha az, daha az 17, daha az 20 'den daha az 22, en az 29, 852 00:35:51,270 --> 00:35:52,510 en az 34, no. 853 00:35:52,510 --> 00:35:55,080 Yani şimdi halinde konum En az üç biri. 854 00:35:55,080 --> 00:35:59,910 >> Ben buraya 55 eklemek istiyorsanız, ne Kod ihtiyacı hatları idam olsun? 855 00:35:59,910 --> 00:36:01,890 Nasıl bu resmi yapar İnsanların değiştirmek gerekir? 856 00:36:01,890 --> 00:36:03,181 Sol elimle ne yapmalıyım? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 Bu, başlangıçta sıfır olmalıdır Ben listenin sonunda olduğum için. 859 00:36:07,360 --> 00:36:09,318 Ve ne olması gerektiğini Burada Peter ile oldu? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 Belli ki bana işaret edecek. 862 00:36:12,430 --> 00:36:15,580 Yani en az iki satır var iddia bugünden örnek kod kod 863 00:36:15,580 --> 00:36:18,570 bu uygulamaya gidiyor kuyruk 55 ekleme senaryo. 864 00:36:18,570 --> 00:36:20,950 Ve birileri hop olabilir yukarı ve sadece 55 temsil? 865 00:36:20,950 --> 00:36:22,200 Pekala, yeni 55 bulunmaktadır. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> Peki şimdi ne gelecek olursa senaryo, birlikte geliyor 868 00:36:27,054 --> 00:36:29,720 ve biz eklemek istiyorum başlayan veya bu listeye başkanı? 869 00:36:29,720 --> 00:36:31,100 Ve adı, numarası 55 ne? 870 00:36:31,100 --> 00:36:31,420 >> İZLEYİCİ: Jack. 871 00:36:31,420 --> 00:36:32,295 >> DAVID J. MALAN: Jack? 872 00:36:32,295 --> 00:36:33,585 Tamam, seninle tanışmak güzel. 873 00:36:33,585 --> 00:36:34,210 Aramıza hoşgeldin. 874 00:36:34,210 --> 00:36:36,640 Yani şimdi biz gidiyoruz , diyelim ki, sayı 5 yerleştirin. 875 00:36:36,640 --> 00:36:39,840 İşte ikinci durumda bulunuyor Üç önce geldi. 876 00:36:39,840 --> 00:36:43,050 Yani 5 başında aitse, Şimdi bunu öğrenmek nasıl görelim. 877 00:36:43,050 --> 00:36:46,310 Ben ptr başlatmak Tekrar sayısı 9 işaretçi. 878 00:36:46,310 --> 00:36:49,140 Ve ben 5 daha az 9, ah, anladım. 879 00:36:49,140 --> 00:36:50,880 Yani bizim için bu resmi düzeltmek. 880 00:36:50,880 --> 00:36:54,820 Kimin elleri, Gabe en ya David'in veya-- sayı 9'un adı ne? 881 00:36:54,820 --> 00:36:55,740 >> İZLEYİCİ: Jen. 882 00:36:55,740 --> 00:36:58,406 >> DAVID J. MALAN: Jen hands-- Bizim eller, hangi değiştirmeniz gerekir? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 Tamam, bu yüzden Gabe şimdi ne işaret? 885 00:37:00,970 --> 00:37:01,640 Bana. 886 00:37:01,640 --> 00:37:02,750 Ben yeni bir düğüm duyuyorum. 887 00:37:02,750 --> 00:37:04,870 Yani hareket sadece tür olacak Burada görsel olarak görmek için. 888 00:37:04,870 --> 00:37:06,435 Ve bu arada ne olduğunu işaret mi? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 Hala nerede işaret ediyorum. 891 00:37:09,020 --> 00:37:10,000 Yani o kadar. 892 00:37:10,000 --> 00:37:13,717 Kod düzeltmeleri Yani sadece gerçekten bir satır Bu özel konu, bu gibi görünüyor. 893 00:37:13,717 --> 00:37:14,800 Pekala, bu yüzden iyi. 894 00:37:14,800 --> 00:37:17,580 Ve birisi 5 için bir yer tutucudur olabilir? 895 00:37:17,580 --> 00:37:18,080 Hadi gel. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 Size yakın zaman alırsınız. 898 00:37:21,320 --> 00:37:24,280 >> Pekâlâ, şimdi-- ve Bir kenara, adları 899 00:37:24,280 --> 00:37:28,510 Ben sağ açık söz yapmıyorum Şimdi, Sonr gösterici, selefi işaretçisi 900 00:37:28,510 --> 00:37:31,260 ve yeni işaretçi, işte Sadece isimleri verilen 901 00:37:31,260 --> 00:37:35,280 işaretçileri örnek kod veya tür etrafında işaret ediyor ellerim. 902 00:37:35,280 --> 00:37:36,060 Adınız ne? 903 00:37:36,060 --> 00:37:36,700 >> İZLEYİCİ: Christine. 904 00:37:36,700 --> 00:37:37,100 >> DAVID J. MALAN: Christine. 905 00:37:37,100 --> 00:37:38,090 Aramıza hoşgeldin. 906 00:37:38,090 --> 00:37:42,180 Pekala, o yüzden şimdi düşünelim biraz daha can sıkıcı senaryo, 907 00:37:42,180 --> 00:37:46,350 Ben eklemek istiyorum sayede Bu içine 26 gibi bir şey. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 Ne? 910 00:37:47,590 --> 00:37:50,510 Bunlar bu kalem var iyi bir şey mudur. 911 00:37:50,510 --> 00:37:51,955 Pekala, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 Birisi başka bir parça alabilir Eğer Kağıt, sadece tamam case-- olarak, hazır. 914 00:37:57,570 --> 00:37:58,370 Ah, ilginç. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 Peki bu bir örnektir Bir ders hata. 917 00:38:02,390 --> 00:38:03,894 Tamam bu yüzden adınız neydi? 918 00:38:03,894 --> 00:38:04,560 HEDEF KİTLE: Julia. 919 00:38:04,560 --> 00:38:07,559 DAVID J. MALAN: Julia, pop olabilir dışarı ve taklit asla vardı? 920 00:38:07,559 --> 00:38:09,040 Tamam, bu asla olmadı. 921 00:38:09,040 --> 00:38:09,680 Teşekkür ederim. 922 00:38:09,680 --> 00:38:12,180 Bu yüzden eklemek istediğinizi varsayalım Bu bağlantılı listeye Julia. 923 00:38:12,180 --> 00:38:13,780 O sayısı 20'dir. 924 00:38:13,780 --> 00:38:15,530 Ve tabii ki o var En ait olacak 925 00:38:15,530 --> 00:38:17,521 begin-- henüz hiçbir şeye işaret etmemektedir. 926 00:38:17,521 --> 00:38:20,020 Yani eliniz tür olabilir aşağı null veya bazı çöp değeri. 927 00:38:20,020 --> 00:38:21,210 En hızlı hikaye anlatayım. 928 00:38:21,210 --> 00:38:22,980 Ben 5 numarada bu kez işaret ediyorum. 929 00:38:22,980 --> 00:38:23,880 Sonra 9 edin. 930 00:38:23,880 --> 00:38:25,130 Sonra 17 kontrol edin. 931 00:38:25,130 --> 00:38:26,247 Sonra 22 kontrol edin. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 Ve ben, ooh, Julia fark 22 önce gitmek gerekiyor. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 Peki ne gerekiyor? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 Kimin elleri değiştirmek gerekir? 938 00:38:36,910 --> 00:38:38,360 Julia, maden, veya-- Adın neydi? 939 00:38:38,360 --> 00:38:39,230 >> İZLEYİCİ: Hıristiyan. 940 00:38:39,230 --> 00:38:40,060 >> DAVID J. MALAN: Hristiyan veya? 941 00:38:40,060 --> 00:38:40,560 >> İZLEYİCİ: Andy. 942 00:38:40,560 --> 00:38:40,905 >> DAVID J. MALAN: Andy. 943 00:38:40,905 --> 00:38:41,654 Hıristiyan ya da Andy? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Andy işaret etmek gerekiyor? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 Tamam. 949 00:38:47,840 --> 00:38:48,960 Yani Andy, Julia işaret etmek istiyorsun? 950 00:38:48,960 --> 00:38:50,120 Ama bir dakika bekleyin. 951 00:38:50,120 --> 00:38:53,260 Şimdiye kadar Hikayede, Ben bir tür kulüpler 952 00:38:53,260 --> 00:38:56,800 anlamda yükü, bu işaretçisi var şey 953 00:38:56,800 --> 00:38:57,850 Liste boyunca hareket. 954 00:38:57,850 --> 00:39:00,800 Biz Andy için bir isim var, ama olabilir Andy diye bir değişken var. 955 00:39:00,800 --> 00:39:04,320 Elimizdeki sadece diğer değişkendir Önce, Gabe'e temsil kim. 956 00:39:04,320 --> 00:39:07,690 >> Peki bu neden dolayısıyla aslında kadarıyla biz bu gerekli değildir ettik. 957 00:39:07,690 --> 00:39:10,846 Ama şimdi ekranda var beklenen işaretçi yine söz. 958 00:39:10,846 --> 00:39:11,970 Yani beni daha açık olalım. 959 00:39:11,970 --> 00:39:14,820 Bu gösterici ise, ben daha iyi oldu Biraz daha zeki olsun 960 00:39:14,820 --> 00:39:15,950 Benim yineleme hakkında. 961 00:39:15,950 --> 00:39:19,580 Eğer benim burada geçiyor sakıncası yoksa Yine, burada işaret, burada işaret. 962 00:39:19,580 --> 00:39:22,500 Ama bana beklenen işaretçi atalım, selefi işaretçi, işte 963 00:39:22,500 --> 00:39:24,740 tür işaret eleman Ben sadece oldu. 964 00:39:24,740 --> 00:39:27,330 Yani burada gittiğinizde, şimdi Benim sol el güncellemeleri. 965 00:39:27,330 --> 00:39:29,370 Burada benim sol güncellemeleri gittiğinizde. 966 00:39:29,370 --> 00:39:33,090 Ve şimdi ben bir işaretçi sadece var Julia sonra gider unsuru, 967 00:39:33,090 --> 00:39:36,300 Ben hala bir işaretçi var Andy önce elemanı. 968 00:39:36,300 --> 00:39:39,430 Yani, aslında, erişimi kırıntıları, eğer sen, 969 00:39:39,430 --> 00:39:41,500 Gerekli işaretçileri tüm. 970 00:39:41,500 --> 00:39:43,710 >> Ben de işaret ediyorum eğer öyleyse Andy ve ben de işaret ediyorum 971 00:39:43,710 --> 00:39:47,105 kimin elleri Hıristiyan, at Şimdi başka bir yerde işaret edilmelidir? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 Andy Yani şimdi Julia işaret edebilir. 974 00:39:51,960 --> 00:39:54,460 Julia şimdi Hıristiyan işaret edebilir. 975 00:39:54,460 --> 00:39:56,950 O kopyalayabilirsiniz Çünkü benim Sağ elin işaretçi. 976 00:39:56,950 --> 00:40:00,044 Ve bu etkili bir koyar buraya bu yerine. 977 00:40:00,044 --> 00:40:02,460 Yani kısacası, hatta bu olsa sonsuza dek tür bizi alıyor 978 00:40:02,460 --> 00:40:04,510 Aslında güncellemek için bir Listeyi bağlantılı, fark 979 00:40:04,510 --> 00:40:06,580 operasyonlar olduğunu Nispeten basit. 980 00:40:06,580 --> 00:40:10,030 Bu, iki, bir üç var: sonuçta kod satırları. 981 00:40:10,030 --> 00:40:12,780 Ama o etrafına sarılmış muhtemelen kod satırları 982 00:40:12,780 --> 00:40:16,350 mantık biraz o etkili bir olduğunu sorusunu, biz sorar? 983 00:40:16,350 --> 00:40:18,970 Biz başındayız, orta veya son? 984 00:40:18,970 --> 00:40:21,890 >> Şimdi, şüphesiz başka vardır biz uygulamak olabilir operasyonlar. 985 00:40:21,890 --> 00:40:24,880 Ve burada bu resimler sadece tasvir ne sadece insanlar ile yaptım. 986 00:40:24,880 --> 00:40:26,080 Ne kaldırılması hakkında? 987 00:40:26,080 --> 00:40:30,650 Ben istiyorsanız, örneğin, Numarayı kaldırmak 34 veya 55, 988 00:40:30,650 --> 00:40:34,680 Ben, kod aynı tür sahip olabilir ama bir ya da iki adım gerekir gidiyorum. 989 00:40:34,680 --> 00:40:36,110 Ne yeni Çünkü? 990 00:40:36,110 --> 00:40:40,460 Ben sonunda birini kaldırırsanız, numarası gibi 55 ve 34, 991 00:40:40,460 --> 00:40:42,995 ne de ben bunu olarak değiştirmek zorunda? 992 00:40:42,995 --> 00:40:44,870 Ben evict-- etmek zorunda Adın neydi? 993 00:40:44,870 --> 00:40:45,380 >> İZLEYİCİ: Jack. 994 00:40:45,380 --> 00:40:46,255 >> DAVID J. MALAN: Jack. 995 00:40:46,255 --> 00:40:49,770 Ben, evict-- ücretsiz Jack sadece var yani tam anlamıyla en azından ücretsiz Jack arayın, ya da 996 00:40:49,770 --> 00:40:53,530 Orada gösterici de, ama şimdi Ne Peter ile değiştirmek gerekiyor? 997 00:40:53,530 --> 00:40:55,510 Eli iyi aşağı işaret başlayın. 998 00:40:55,510 --> 00:40:59,300 En kısa sürede ben ücretsiz çağrı olarak Çünkü Jack, Peter hala Jack işaret eğer 999 00:40:59,300 --> 00:41:02,530 ve bu nedenle traversing devam listesi ve erişim bu işaretçi, 1000 00:41:02,530 --> 00:41:05,650 Bu bizim eski dostumuz segmentasyon var aslında tekme olabilir arıza. 1001 00:41:05,650 --> 00:41:07,860 Biz verdik Çünkü Jack bellek geri. 1002 00:41:07,860 --> 00:41:10,760 >> Siz orada kalabilirler beceriksizce sadece bir an için. 1003 00:41:10,760 --> 00:41:13,410 Biz sadece bir çift var, çünkü Nihai işlemler dikkate. 1004 00:41:13,410 --> 00:41:15,600 Listenin başını çıkarma, beginning-- ve bu kişinin veya 1005 00:41:15,600 --> 00:41:16,349 Biraz can sıkıcı. 1006 00:41:16,349 --> 00:41:19,640 Biz bilmek zorunda olduğundan Gabe tür özel bu programda yer almaktadır. 1007 00:41:19,640 --> 00:41:21,440 Çünkü gerçekten, kendi işaretçisi vardır. 1008 00:41:21,440 --> 00:41:24,860 O sadece, işaret ediliyor değil Burada hemen hemen herkes gibi. 1009 00:41:24,860 --> 00:41:28,112 >> Yani listenin baş olduğunda , kimin elleri şimdi değiştirmek gerekir kaldırıldı? 1010 00:41:28,112 --> 00:41:29,070 Adın neydi? 1011 00:41:29,070 --> 00:41:29,450 >> İZLEYİCİ: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> DAVID J. MALAN: Berbatım isimleri, görünüşe göre. 1013 00:41:31,408 --> 00:41:34,011 Yani Christine ve Gabe, kimin elleri değiştirmeniz gerekir 1014 00:41:34,011 --> 00:41:36,510 Biz Christine kaldırmaya çalıştığınızda, resimden sayısı 5? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 Tamam, bu yüzden Gabe yapalım. 1017 00:41:38,820 --> 00:41:40,950 Gabe noktasına gidiyor, muhtemelen, 9 numarada. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 Ama bundan sonra ne yapmalıyım? 1020 00:41:44,642 --> 00:41:46,600 HEDEF KİTLE: Christine gerekir [duyulamaz] null. 1021 00:41:46,600 --> 00:41:50,244 DAVID J. MALAN: Tamam, biz muhtemelen gerekir make-- yerde "boş" duydum. 1022 00:41:50,244 --> 00:41:51,410 HEDEF KİTLE: Boş ve onu serbest. 1023 00:41:51,410 --> 00:41:51,855 DAVID J. MALAN: Ne null? 1024 00:41:51,855 --> 00:41:53,074 HEDEF KİTLE: Boş ve onu serbest. 1025 00:41:53,074 --> 00:41:54,490 DAVID J. MALAN: Boş ve onu serbest. 1026 00:41:54,490 --> 00:41:55,422 Yani bu çok kolay. 1027 00:41:55,422 --> 00:41:58,380 Ve şimdi sıralama olduğunu mükemmel aidiyet, orada ayakta. 1028 00:41:58,380 --> 00:42:00,430 Eğer oldum Çünkü Listeden ayrışmıştır. 1029 00:42:00,430 --> 00:42:02,820 Etkili oldum Listeden yetim. 1030 00:42:02,820 --> 00:42:07,770 Ve böylece biz daha şimdi ücretsiz çağrı vardı Christine bellek geri vermek. 1031 00:42:07,770 --> 00:42:10,240 Aksi takdirde her zaman biz Listeden bir düğüm silme 1032 00:42:10,240 --> 00:42:14,230 Biz listesini yapmak olabilir daha kısa, ama aslında azaltmadan 1033 00:42:14,230 --> 00:42:15,096 bellekte boyutu. 1034 00:42:15,096 --> 00:42:17,720 Ve böylece biz ekleyerek devam edersek ve ekleyerek, listeye şeyler ekleyerek, 1035 00:42:17,720 --> 00:42:19,280 Benim bilgisayar yavaşlayabilir ve yavaş yavaş ve, 1036 00:42:19,280 --> 00:42:21,740 Ben tükeniyor çünkü Bellek, aslında değilim bile 1037 00:42:21,740 --> 00:42:25,580 Christine'in bayt kullanarak bellek artık. 1038 00:42:25,580 --> 00:42:28,500 >> Yani sonunda diğer vardır elbette-- kaldırma senaryolar 1039 00:42:28,500 --> 00:42:30,640 orta kaldırılması sonunda, biz gördük. 1040 00:42:30,640 --> 00:42:32,348 Ama daha ilginç Şimdi sorun olduğunu 1041 00:42:32,348 --> 00:42:34,770 gidiş tam dikkate olmak çalışma süresi nedir. 1042 00:42:34,770 --> 00:42:36,640 Yani sadece siz tutabilirsiniz sizin kağıt parçaları Gabe, eğer 1043 00:42:36,640 --> 00:42:38,640 Eğer vererek sakıncası olmaz Herkes bir stres topu. 1044 00:42:38,640 --> 00:42:42,100 Bizim bağlı listeye çok teşekkür ederiz Burada gönüllü, eğer yapabilirsen. 1045 00:42:42,100 --> 00:42:45,320 >> [Alkış] 1046 00:42:45,320 --> 00:42:46,700 >> DAVID J. MALAN: Pekala. 1047 00:42:46,700 --> 00:42:51,110 Analitik Yani bir çift Daha sonra soruları, eğer olabilir. 1048 00:42:51,110 --> 00:42:59,670 Biz daha önce bu gösterim gördüm, Büyük Ç ve omega, üst sınır 1049 00:42:59,670 --> 00:43:02,520 ve alt sınırları Bazı algoritmanın çalışma süresi. 1050 00:43:02,520 --> 00:43:04,950 Yani sadece düşünelim bir kaç soru. 1051 00:43:04,950 --> 00:43:07,090 >> Bir, ve biz bunu dedi önce, çalışan ne 1052 00:43:07,090 --> 00:43:10,647 Bir için arama zamanı Büyük O bakımından listesi? 1053 00:43:10,647 --> 00:43:13,480 Ne çalışan bir üst sınır var bağlantılı liste arama zamanı 1054 00:43:13,480 --> 00:43:16,340 Burada bizim gönüllüler tarafından uygulandığı gibi? 1055 00:43:16,340 --> 00:43:17,820 Bu n büyük Ey, doğrusal değil. 1056 00:43:17,820 --> 00:43:20,630 En kötü durumda Çünkü elemanı 55 gibi, 1057 00:43:20,630 --> 00:43:23,830 nereye olmak için olabilir arıyor olabilir Jack, sonunda tüm yol oldu. 1058 00:43:23,830 --> 00:43:28,250 Ve ne yazık ki, bir dizi farklı Bu sefer fantezi alınamıyor. 1059 00:43:28,250 --> 00:43:31,820 Bizim insanların hepsi olsa da küçük elemanları, 5 sıralanır, 1060 00:43:31,820 --> 00:43:35,900 büyük elemanına kadar tüm yol, 55, genellikle iyi bir şey. 1061 00:43:35,900 --> 00:43:38,815 Ama bu varsayım ne artık yapmamızı sağlar? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 HEDEF KİTLE: [Duyulmaz] 1064 00:43:40,650 --> 00:43:40,920 DAVID J. MALAN: Tekrar söyle? 1065 00:43:40,920 --> 00:43:41,800 HEDEF KİTLE: Rastgele erişim. 1066 00:43:41,800 --> 00:43:43,049 DAVID J. MALAN: Rastgele erişim. 1067 00:43:43,049 --> 00:43:46,330 Ve sırayla hiçbir elimizden anlamına gelir uzun, zayıf sıfır, sezgi kullanın 1068 00:43:46,330 --> 00:43:49,365 ikili kullanarak ve açıklık arama ve bölmek ve fethetmek. 1069 00:43:49,365 --> 00:43:51,240 Olsa bile Çünkü biz insanlar açıkça olabilir 1070 00:43:51,240 --> 00:43:54,610 Andy veya Hıristiyan olduğunu görmek kabaca listenin ortasında, 1071 00:43:54,610 --> 00:43:57,670 Biz sadece bir olarak biliyorum Listeyi kaymağını bilgisayar 1072 00:43:57,670 --> 00:43:59,029 başından itibaren. 1073 00:43:59,029 --> 00:44:00,570 Yani biz bu rastgele erişimi verdik. 1074 00:44:00,570 --> 00:44:04,380 >> N Yani büyük Ç şimdi üst olduğunu arama zamanında bağlı. 1075 00:44:04,380 --> 00:44:07,920 Ne bizim arama omega hakkında? 1076 00:44:07,920 --> 00:44:11,535 Alt sınır arıyor neler var Bu listedeki bazı numara için? 1077 00:44:11,535 --> 00:44:12,410 HEDEF KİTLE: [Duyulmaz] 1078 00:44:12,410 --> 00:44:13,040 DAVID J. MALAN: Tekrar söyle? 1079 00:44:13,040 --> 00:44:13,420 HEDEF KİTLE: Bir. 1080 00:44:13,420 --> 00:44:13,800 DAVID J. MALAN: Bir. 1081 00:44:13,800 --> 00:44:14,760 Yani zaman sabiti. 1082 00:44:14,760 --> 00:44:17,020 En iyi durumda, Christine gerçekten listenin başında. 1083 00:44:17,020 --> 00:44:19,020 Ve biz arıyoruz 5 numara, bu yüzden onu buldum. 1084 00:44:19,020 --> 00:44:19,787 Yani hayır büyük dağıtmak. 1085 00:44:19,787 --> 00:44:22,370 Ama olmak var Bu durumda listenin başında. 1086 00:44:22,370 --> 00:44:23,745 Gibi bir şey hakkında ne Sil? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 Eğer bir eleman silmek için ne isterseniz? 1089 00:44:26,300 --> 00:44:29,200 Ne üst sınır ve alt sınır var Bağlantılı bir şey silinmesine ilişkin 1090 00:44:29,200 --> 00:44:29,699 Listeye? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 HEDEF KİTLE: [Duyulmaz] 1093 00:44:36,070 --> 00:44:36,420 DAVID J. MALAN: Tekrar söyle? 1094 00:44:36,420 --> 00:44:37,067 HEDEF KİTLE: n. 1095 00:44:37,067 --> 00:44:38,900 David J. MALAN: n, sınır gerçekten üst. 1096 00:44:38,900 --> 00:44:41,700 En kötü durumda biz denemek için biz sadece yaptığımız gibi, Jack silmek için. 1097 00:44:41,700 --> 00:44:43,050 O sonunda tüm yol. 1098 00:44:43,050 --> 00:44:45,419 Sonsuza kadar bizi alır, ya da n adımlar onu bulmak için. 1099 00:44:45,419 --> 00:44:46,460 Yani bir üst sınır var. 1100 00:44:46,460 --> 00:44:47,430 Bu tabii, doğrusal değil. 1101 00:44:47,430 --> 00:44:50,970 Ve en iyi durumda çalışma süresi, ya da En iyi durumda, alt sınır 1102 00:44:50,970 --> 00:44:51,975 sürekli zaman olacaktır. 1103 00:44:51,975 --> 00:44:54,600 Belki silmeye çalıştığınızda Çünkü Christine ve biz sadece şanslı olsun 1104 00:44:54,600 --> 00:44:55,558 O başında bulunuyor. 1105 00:44:55,558 --> 00:44:56,350 Şimdi bir dakika bekleyin. 1106 00:44:56,350 --> 00:44:59,370 Gabe, başında da oldu ve biz de Gabe güncellemek zorunda kaldı. 1107 00:44:59,370 --> 00:45:01,150 Yani sadece bir adım değildi. 1108 00:45:01,150 --> 00:45:04,210 Yani gerçekten sabittir zaman, en iyi durumda, 1109 00:45:04,210 --> 00:45:06,345 küçük öğe kaldırmak için? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 Iki olabilir olsa bu, bir kod üç, ya da hatta 100 hatları, 1112 00:45:10,960 --> 00:45:14,000 o aynı sayıda ise değil, bazı döngü içinde çizgiler, 1113 00:45:14,000 --> 00:45:16,577 ve boyutundan bağımsız olarak Listenin, kesinlikle. 1114 00:45:16,577 --> 00:45:18,660 Elemanı olarak silme Listenin başında, 1115 00:45:18,660 --> 00:45:21,940 biz uğraşmak zorunda bile Gabe, hala sabit zaman. 1116 00:45:21,940 --> 00:45:24,220 >> Yani bu gibi görünüyor geriye büyük bir adım. 1117 00:45:24,220 --> 00:45:27,000 Ve zaman ne bir atık eğer haftada bir ve haftada 1118 00:45:27,000 --> 00:45:30,250 Sıfır biz sadece vardı pseudocode kodu ama gerçek kod 1119 00:45:30,250 --> 00:45:35,780 Günlük bir şeyi uygulamak için Baz n, ya da günlük, daha doğrusu, n, baz 2, 1120 00:45:35,780 --> 00:45:37,150 kendi çalışma süresi açısından. 1121 00:45:37,150 --> 00:45:40,710 Yani halt biz başlatmak için neden isteyeyim Bağlantılı bir listesi gibi bir şey kullanarak? 1122 00:45:40,710 --> 00:45:41,517 Evet. 1123 00:45:41,517 --> 00:45:44,022 >> İZLEYİCİ: Yani ekleyebilirsiniz Diziye elemanları. 1124 00:45:44,022 --> 00:45:46,230 DAVID J. MALAN: Yani yapabilirsiniz diziye öğeler eklemek. 1125 00:45:46,230 --> 00:45:47,550 Ve bu da tematik olduğunu. 1126 00:45:47,550 --> 00:45:49,740 Ve biz görmeye devam edeceğiz Bu, bu ticaret-off, çok 1127 00:45:49,740 --> 00:45:51,573 gibi gördüğümüz bir birleştirme tür ticaret-off. 1128 00:45:51,573 --> 00:45:54,606 Biz gerçekten hızlandırmak olabilir daha doğrusu, arama veya sıralama, 1129 00:45:54,606 --> 00:45:57,480 biz biraz daha fazla yer harcamak ve Bir ek bellek yığın sahip 1130 00:45:57,480 --> 00:45:58,760 veya birleştirme sıralama için bir dizi. 1131 00:45:58,760 --> 00:46:01,270 Ama biz daha fazla harcama uzay, ama biz zamandan tasarruf. 1132 00:46:01,270 --> 00:46:04,820 Bu durumda, konum zaman vazgeçerek ama biz konum 1133 00:46:04,820 --> 00:46:08,170 esneklik kazanıyor, dinamizm eğer sen, 1134 00:46:08,170 --> 00:46:10,280 hangi belki olumlu bir özelliktir. 1135 00:46:10,280 --> 00:46:11,520 >> Biz de alanı harcıyoruz. 1136 00:46:11,520 --> 00:46:13,710 Hangi anlamda bir bağlantılı daha pahalı liste 1137 00:46:13,710 --> 00:46:15,700 Bir dizinin daha alan açısından? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 Nereden fazladan boşluk geliyor? 1140 00:46:19,920 --> 00:46:20,460 Evet? 1141 00:46:20,460 --> 00:46:21,800 >> İZLEYİCİ: [duyulamaz] işaretçi. 1142 00:46:21,800 --> 00:46:23,310 >> DAVID J. MALAN: Evet, biz Ayrıca işaretçisi var. 1143 00:46:23,310 --> 00:46:25,560 Yani bu minorly can sıkıcı bir durum Bu artık değilim 1144 00:46:25,560 --> 00:46:27,780 Ben sadece bir int depolamak Bir int temsil etmek. 1145 00:46:27,780 --> 00:46:30,990 Ben bir int ve a depolama ediyorum Ayrıca 32 bit işaretçi. 1146 00:46:30,990 --> 00:46:33,470 Yani tam anlamıyla ikiye ediyorum alan miktarı dahil. 1147 00:46:33,470 --> 00:46:36,040 Yani bir trade-off, ama Bu int durumunda bulunuyor. 1148 00:46:36,040 --> 00:46:39,580 , Sen int depolamak değil varsayalım ancak bu dikdörtgenler her varsayalım 1149 00:46:39,580 --> 00:46:43,290 veya bunların insanlara her temsil eden Bir kelime, bir İngilizce kelime bu 1150 00:46:43,290 --> 00:46:46,430 Beş karakter, 10 olabilir karakterleri, hatta belki de daha fazlası. 1151 00:46:46,430 --> 00:46:49,940 Sonra sadece 32 daha fazla bit ekleyerek Büyük bir anlaşma daha az olabilir. 1152 00:46:49,940 --> 00:46:52,160 >> Ne Öğrencilerin her varsa gösteriye 1153 00:46:52,160 --> 00:46:55,107 vardı anlamıyla öğrenci yapılar olduğunu belki isimleri ve evler var ve 1154 00:46:55,107 --> 00:46:57,065 telefon numaraları ve Twitter işleme ve benzeri yer alır. 1155 00:46:57,065 --> 00:46:59,564 Yani her alanda biz başladık Geçen gün hakkında konuşurken, 1156 00:46:59,564 --> 00:47:02,410 gibi büyük bir anlaşma daha az Bizim düğümleri daha ilginç olsun 1157 00:47:02,410 --> 00:47:05,972 ve büyük, ha, ek bir harcama işaretçi sadece bunları birbirine bağlamak için. 1158 00:47:05,972 --> 00:47:07,180 Ama gerçekten, bu bir ticaret-off. 1159 00:47:07,180 --> 00:47:09,560 Ve gerçekten de, kodu daha karmaşık, gibi olacak 1160 00:47:09,560 --> 00:47:11,770 ile kaymağını tarafından bakın söz konusu bir örnek. 1161 00:47:11,770 --> 00:47:14,302 Ama ne olsaydı Burada bazı kutsal kasesi. 1162 00:47:14,302 --> 00:47:17,010 Biz bir adım atmak yoksa neler geriye ama büyük bir adım ileri 1163 00:47:17,010 --> 00:47:19,180 ve bir veri uygulamak bunun yapısı ile biz 1164 00:47:19,180 --> 00:47:22,870 Jack veya benzeri unsurları bulabilirsiniz Christine ya da başka elemanları 1165 00:47:22,870 --> 00:47:25,870 Gerçek sabit zamanda bu dizide? 1166 00:47:25,870 --> 00:47:26,920 Arama sabittir. 1167 00:47:26,920 --> 00:47:28,320 Sil sabittir. 1168 00:47:28,320 --> 00:47:29,570 Ekle sabittir. 1169 00:47:29,570 --> 00:47:32,260 Bu işlemlerin tamamı sabittir. 1170 00:47:32,260 --> 00:47:33,750 Bu bizim kutsal kasesi olacaktır. 1171 00:47:33,750 --> 00:47:36,690 Ve bu nerede biz dahaki sefere bulacaktır. 1172 00:47:36,690 --> 00:47:38,600 Sonra görüşürüz. 1173 00:47:38,600 --> 00:47:39,371